Skip to main content

진소희

1. 📌 핵심 개념 정리

✅ 요약하기

  1. 첫째, 돌려보자
    • SerialDateTests라는 클래스는 단위 테스트 케이스 몇 개를 포함한다. 돌려보면 실패하는 케이스는 없다. 하지만 테스트 케이스를 훑어보면 모든 경우를 점검하지 않는다는 사실이 드러난다.
    • 코드 커버리지 분석 도구인 클로버를 이용해 단위 테스트가 실행하는 코드와 실행하지 않는 코드를 조사했다. 대략 50% 정도였다.
    • 클래스를 철저히 이해하고 리팩터링하려면 훨씬 높은 테스트 커버리지가 필요했다.

  1. 둘째, 고쳐보자
    • 코드를 고칠 때마다 JCommon 단위 테스트와 본인이 짠 단위 테스트를 실행한다. 즉, 변경 코드는 JCommon 프레임워크에서 사용해도 문제 없다.
    • 라이선스 정보, 저작권, 작성자, 변경 이력은 법적인 정보는 필요하므로 라이선스 정보와 저작권은 보존한다. 반면, 변경 이력은 1960년대에 나온 방식이다. 이제는 소스 코드 제어 도구를 사용하므로 변경 이력은 없애도 되겠다.
    • 클래스 이름이 SerialDate인 이유가 무엇일까? 일련번호를 사용해 클래스를 구현했기 때문이다.
      • 일련번호라는 용어는 정확하지 못하다. 상대 오프셋이 더 정확하다. 일련번호라는 용어는 날짜보다 제품 식별 번호로 더 적합하다.
    • SerialDate라는 이름은 구현을 암시하는데 실상은 추상 클래스다.
      • 구현을 암시할 필요가 없다. 구현은 숨기는 편이 좋다. 그
      • 냥 Date가 좋다고 생각한다. 이름이 다른 곳에서 중복되기 때문에, DayDate를 쓰기로 결정한다.
    • DayDate 클래스가 MonthConstants를 상속하는 이유는 무엇일까?
      • MonthConstants 클래스는 달을 정의하는 static final 상수 모음에 불과하다.
      • 상수 클래스를 상속하면 MonthConstants.January와 같은 표현을 사용할 필요가 없어진다. 바람직하진 않다. MonthConstants는 enum으로 정의해야 마땅하다.
    • 불필요한 주석은 거짓말과 잘못된 정보가 쌓이기 좋은 곳이다.
    • DayDate 자체를 훼손하지 않으면서 구현 정보를 전달할 방법이 필요하다.
      • 일반적으로 우리는 파생 클래스의 인스턴스로부터 구현 정보를 가져온다.
      • 일반적으로 기반 클래스(부모 클래스)는 파생 클래스(자식 클래스)를 몰라야 바람직하다.
      • 추상 메서드로 위임하는 정적 메서드는 SINGLETON, DECORATOR, ABSTRACT FACTORY 패턴 조합을 사용한다.
      • 인수와 변수 선언에서 final 키워드를 모두 없앤다. 실질적인 가치는 없으면서 코드만 복잡하게 만든다고 판단되었기 때문이다.
      • for 루프 안에 if문이 두 번 나오는데 ||연산자를 사용해 if문 하나로 만든다.
      • 알고리즘이 복잡해지면 임시 변수 설명을 사용해 더 읽기 쉽게 고친다.

2. 🤔 이해가 어려운 부분

🔍 질문하기

책을 읽으며 이해하기 어려웠던 개념이나 명확하지 않았던 내용을 정리합니다.

  1. 개념 또는 원칙의 이름
    • 어려웠던 부분
      final 키워드를 로버트 시몬스는 코드 전체에 사용하라고 강력히 권장하지만, 책의 저자는 모두 없앴다.
    • 궁금한 점
      어떤 기준인 것인지 이해가 가지 않았습니다.