본문 바로가기
개발방법론

[TDD 리팩토링 by 자바지기 박재성님] 정리

by tango0415 2020. 4. 28.

https://www.youtube.com/watch?v=bIeqAlmNRrA

의식적인 연습의7가지 원칙

  • 첫째, 효과적인 훈련 기법이 수립되어 있는 기술 연마
  • 둘째, 개인의 컴포트 존을 벗어난 지점에서 진행, 자신의 현재 능력을 살짝 넘어가는 작업을 지속적으로 시도
  • 셋째, 명확하고 구체적인 목표를 가지고 진행
  • 넷째, 신중하고 계획적이다. 즉, 개인이 온전히 집중하고 '의식적'으로 행동할 것을 요구
  • 다섯째, 피드백과 피드백에 따른 행동 변경을 수반
  • 여섯째, 효과적인 심적 표상을 만들어내는 한편으로 심적 표상에 의존
  • 일곱째, 기존에 습득한 기술의 특정 부분을 집중적으로 개선함으로써 발전시키고, 수정하는 과정을 수반

프리코스 3주차 진행 내용

  • 1주차 - 프로그래밍 제약사항
    • 자바 코드 컨벤션을 지키면서 프로그래밍한다
    • indent(인덴트, 들여쓰기) depth 3이 넘지 않도록 구현한다. 2까지만 허용한다
    • 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라
  • 1주차 - 피드백
    • space 도 convention 이다
    • 불필요하게 공백 라인을 만들지 않는다
    • git commit 메시지를 의미있게 작성한다
  • 2주차 - 프로그래밍 제약사항
    • 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다
    • else 예약어를 쓰지 않는다
  • 2주차 - 피드백
    • java api 를 적극 활용한다
  • 3주차 - 프로그래밍 제약사항
    • 함수(또는 메소드)의 길이가 10라인을 넘어가지 않도록 구현한다
    • indent(인덴트, 들여쓰기) depth 2이 넘지 않도록 구현한다.
    • 함수(또는 메소드)의 인자 수를 3개까지만 허용한다.
  • 3주차 - 피드백
    • 상태 데이터를 가지는 객체에서 데이터를 꺼내려(get) 하지 말고 객체에 메시지를 보내라
      * car.getPosition() == maxDistance;
      * car.isMaxPosition(maxDistance);
  • 요구사항 분석
    • MD 파일로 구현할 기능 목록을 먼저 작성

꾸준히 진행할 하루 중의 일정 시간을 만들어야 한다

장난감 프로젝트 찾기 (문자열 덧셈 계산기)

  • 1단계 - 단위테스트 연습
    TDD 와 단위테스트는 다르다
    내가 사용하는 API 사용법을 익히기 위한 학습 테스트에서 시작
    내가 구현하는 메소드 중 input output 이 명확한 클래스 메소드 (utill)

  • 2단계 - TDD 연습
    자신에게 친숙한 것을 먼저
    웹, UI, DB 와 의존성이 없는 프로젝트

  • 3단계 - 메소드 리팩토링
    정성적인 기준보다는 정량적이고 측정 가능한 방법으로 연습
    메소드의 라인수 제한
    else 사용하지 않기
    local 변수가 꼭 필요한가?
    Compose pattern 으로...함수의 추상화를 모두 같은 단계로 만들기

  • 요구사항 추가
    음수가 들어오면 RuntimeException 발생
    모든 원시값과 문자열을 포장한다

  • 4단계 - 장난감 프로젝트 난이도 높이기
    로또
    사다리 타기
    볼링 게임 점수판
    체스 게임
    지뢰 찾기 게임

  • 5단계 - 의존관계 추가를 통한 난이도 높이기
    메인 메소드 실행시키지 않고 완성시키기
    컴파일 에러를 최소화
    ATDD 기반으로 프로그래밍
    레거시 코드를 TDD 로 만들어보기

객체지향 생활체조 원칙

  1. 한 세머드에 오직 한 단계의 들여쓰기만 한다
  2. else 예약어를 쓰지 않는다
  3. 모든 원시값과 문자열을 포장한다
  4. 한 줄에 점을 하나만 찍는다
  5. 줄여쓰지 않는다 (축약금지)
  6. 모든 엔티티를 작게 유지한다
  7. 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다
  8. 일급 콜렉션을 쓴다
  9. 케터/세터/프로퍼티를 쓰지 않는다

참고: 마틴 파울러 - 소트웍스 앤솔러지

ps. 메소드 인자 개수는 0개가 가장 좋다