Skip to main content

진소희

1. 📌 핵심 개념 정리

✅ 요약하기

각자 해당 챕터에서 중요하다고 느낀 개념이나 아이디어를 간략하게 정리하고 개선 전, 후에 대한 예시 코드를 비교하며 개념을 설명합니다.

  1. 첫째, 돌려보자

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

  1. 둘째,

    고쳐보자
    • 코드를 고칠 때마다 JCommon 단위 테스트와 본인이 짠 단위 테스트를 실행다. 즉, 변경 코드는 JCommon 프레임워크에서 사용해도 문제 없다.
    • 라이선스 정보, 저작권, 작성자, 변경 이력은 법적인 정보는 필하므로 라이선스 정보와 저작권은 보존한다. 반면, 변경 이력은 1960년대에 나온 방식이다. 이제는 소스 코드 제어 도구를 사

    하므로 변경 이력은 없애도 되겠다.
  2. 클래스 이름이 SerialDate인 이유가 무엇일까? 일련번호를 사용해 클래스를 구현했기 때문이다.
    • 일련번호라는 용어는 정확하지 못하다. 상대 오프셋이 더 정확하다. 일련번호라는 용어는 날짜보다 제품 식별 번호로 더 적합하다.
  • SerialDate라는
    이름은
      구현을 암시하는데 실상은 추상 클래스다.
      • 구현을

        암시할 필요가 없다. 구현은 숨기는 편이 좋다. 그

      • 냥 Date가 좋다고 생각한다. 이름이 다른 곳에서 중복되기 때문에, DayDate를 쓰기로 결정한다.
    1. DayDate 클래스가 MonthConstants를 상속하는 이유는 무엇일까?
      • MonthConstants 클래스는 달을 정의하는 static final 상수 모음에 불과하다.
      • 상수 클래스를 상속하면 MonthConstants.January와 같은 표현을 사용할 필요가 없어진다. 바람직하진 않다. MonthConstants는 enum으로 정의해야 마땅하다.
    2. 불필요주석은 거짓말과 잘못된 정보가 쌓이기 좋은 곳이다.
    3. DayDate 자체를 훼손하지 않으면서 구현 정보를 전달할 방법이 필하다.
      • 일반적으로 우리는 파생 클래스의 인스턴스로부터 구현 정보를 가져온다.
      • 일반적으로 기반 클래스(부모 클래스)는 파생 클래스(자식 클래스)를 몰라야 바람직하다.
      • 추상 메서드로 위임하는 정적 메서드는 SINGLETON, DECORATOR, ABSTRACT FACTORY 패턴 조합을 사한다.
      • 인수와 변수 선언에서 final 키워드를 모두 없앤다. 실질적인 가치는 없으면서 코드만 복잡하게 만든다고 판단되었기 때문이다.
      • for 루프 안에 if문이 두 번 나오는데 ||연산자를 사용해 if문 하나로 만든다.
      • 알고리즘이 복잡해지면 임시 변수 설명을 사용해 더 읽기 쉽게 고친다.

    2. 🤔 이해가 어려운 부분

    🔍 질문하기

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

    1. 개념 또는 원칙의 이름
      • 어려웠던 부분
        해당final 개념이키워드를 헷갈리거나로버트 명확시몬스는 코드 전체에 사용하라고 강력히 권장하지만, 않았던책의 점을저자는 구체적으로모두 설명합니없앴다.
      • 궁금한 점
        해당 개념이 어떤 원리로기준인 동작하는지, 실무에서 어떻게 활용되는것인등을이해가 질문가지 형태로 정리합않았습니다.

    3. 📚 참고 사항

    📢 논의하기

    관련된 자료가 있다면 공유하고, 더 깊이 논의하고 싶은 아이디어나 의견을 정리합니다.

    1. 관련 자료 공유
      • 추가 자료
        관련 블로그 글이나 공식 문서 링크를 제공합니다.

    1. 논의하고 싶은 주제
      • 주제
        논의하고 싶은 내용을 간략히 정리합니다.
      • 설명
        논의하고 싶은 이유를 작성합니다.