우테캠 미션 회고: 로또 - TDD

이진호·2023년 1월 2일
0

미션 회고

목록 보기
1/2

로또 - TDD

학습 목표

  • TDD 기반으로 프로그래밍하는 경험
  • 메소드 분리 + 클래스를 분리하는 리팩토링 경험
  • 점진적으로 리팩토링하는 경험

객체지향 생활 체조

  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  • 규칙 2: else 예약어를 쓰지 않는다.
  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 규칙 5: 줄여쓰지 않는다(축약 금지).
  • 규칙 8: 일급 콜렉션을 쓴다.

의미 있는 이름

  • 의도를 분명히 밝혀라
  • 개념 하나에 단어 하나를 사용하라

경계

  • 외부 코드 사용하기

    public Sensors {
        private Map<String, Sensor> sensors = new HashMap<>();
    
        public Sensor getById(String id) {
            return sensors.get(id);
        }
    
        // 이하 생략
    }

TDD

  • TDD = TFD(Test First Development) + 리팩토링
  • TDD 사이클
    • 실패하는 테스트를 구현한다.
    • 테스트가 성공하도록 프로덕션 코드를 구현한다.
    • 프로덕션 코드와 테스트 코드를 리팩토링한다.
  • TDD 원칙
    • 원칙 1 - 실패하는 단위 테스트를 작성할 때까지 프로덕션 코드(production code)를 작성하지 않는다.
    • 원칙 2 - 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
    • 원칙 3 - 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • UI, DB 등과 의존관계를 가지지 않는 핵심 도메인 영역을 집중 설계

구현할 기능 목록 작성하기

테스트하기 어려운 부분을 찾아 테스트 가능한 구조로 개선

  • 테스트하기 어려운 코드의 의존관계를 Object Graph의 상위로 이동.

미션 PR

0개의 댓글