Skip to main content

김주엽

1. 📌 핵심 개념 정리

✅ 요약하기

  1. 창발적 설계로 깔끔한 코드를 구현하자
    • 켄트 벡이 강조한 단순한 설계 네 가지 규칙(중요도 순으로 나열됨)
      1. 모든 테스트를 실행한다.
      2. 중복을 없앤다.
      3. 프로그래머 의도를 표현한다.
      4. 클래스와 메서드 수를 최소로 줄인다.

  1. 단순한 설계 규칙 1: 모든 테스트를 실행하라
    • 설계는 의도한 대로 돌아가는 시스템을 내놓아야 한다.
    • 테스트가 불가능한 시스템은 검증도 불가능하다.
    • 테스트가 가능한 시스템을 만들기 위해 애쓰면 설계 품질도 좋아진다.
    • 크기가 작고 목적 하나만 수행하는 클래스가 나오고 SRP를 준수하는 경우 테스트가 더 쉬워진다.
    • 테스트 코드가 많을수록 개발자는 테스트가 쉬운 코드를 작성하게 된다.
    • 결합도가 높으면 테스트 케이스를 작성하기 어렵다.
      • DIP원칙을 적용하고 의존성 주입, 인터페이스, 추상화를 사용해 결합도를 낮추면 설계 품질이 높아진다.

  1. 단순한 설계 규칙 2~4: 리팩터링
    • 테스트 케이스를 모두 작성했다면 코드와 클래스를 정리하라.
    • 응집도를 높이고 결합도를 낮추며 관심사를 모듈로 분리한다.
    • 함수와 클래스 크기를 줄이고 더 나은 이름을 짓는다.
    • 중복을 제거하고 프로그래머 의도를 표현하며 클래스와 메서드 수를 최소로 줄일 수 있도록 하라.

  1. 중복을 없애라
    • 중복은 추가 작업, 추가 위험, 불필요한 복잡도를 나타낸다.
    • Template Method 패턴을 고차원 중복을 제거하는 목적으로 사용하라.
      • 예시
        abstract public class VacationPolicy {
          public void accrueVacation() {
            caculateBseVacationHours();
            alterForLegalMinimums();
            applyToPayroll();
          }
        
          private void calculateBaseVacationHours() { /* ... */ };
          abstract protected void alterForLegalMinimums();
          private void applyToPayroll() { /* ... */ };
        }
        
        public class USVacationPolicy extends VacationPolicy {
          @Override protected void alterForLegalMinimums() {
            // 미국 최소 법정 일수를 사용한다.
          }
        }
        
        public class EUVacationPolicy extends VacationPolicy {
          @Override protected void alterForLegalMinimums() {
            // 유럽연합 최소 법정 일수를 사용한다.
          }
        }
        

  1. 표현하라
    • 자신이 이해하는 코드를 짜는 것은 쉽지만 나중에 코드를 유지보수하는 사람이 코드를 깊이 이해할 확률은 희박하다.
    • 좋은 이름을 선택하라.
      • 이름과 기능이 완전히 다른 클래스나 함수, 변수 등으로 유지보수 담당자를 놀라게 해서는 안 된다.
    • 함수와 클래스 크기를 가능한 줄인다.
      • 작은 클래스와 함수는 이름 짓기도 쉽고 구현 및 이해가 쉬워진다.
    • 표준 명칭을 사용하라.
      • 디자인 패턴은 의사소통과 표현력 강화가 주요 목적이다.
      • 클래스가 디자인 패턴을 사용한다면 사용한 패턴 이름을 클래스에 붙여준다.
    • 단위 테스트 케이스를 꼼꼼하게 작성하라.
      • 테스트 케이스는 예제를 보여주는 문서이다.
      • 잘 만든 테스트 케이스를 읽으면 클래스 기능이 한눈에 들어온다.

  1. 클래스와 메서드 수를 최소로 줄여라
    • 중복을 제거하고 의도를 표현하고 SRP 원칙을 준수하는 행위가 극단으로 치달으면 득보다 실이 많아진다.
    • 클래스와 메서드 크기를 줄이기 위해 수없이 많은 클래스와 메서드를 만드는 사례가 있다.
      • 함수와 클래스를 필요한 만큼만 분리하라.
    • 클래스와 메서드 수를 줄이는 것은 시스템 크기를 작게 유지하는 것을 목표로 한다.
    • 간단한 설계 규칙 중 우선순위가 가장 낮다.
      • 클래스와 함수 수를 줄이는 것도 물론 중요하지만 테스트 케이스를 만들고 중복을 제거하고 의도를 표현하는 것이 더 중요하다.

2. 🤔 이해가 어려운 부분

🔍 질문하기

  1. 창발적 설계로 깔끔한 코드를 구현하자
    • 어려웠던 부분
      창발성이라는 단어를 이해하기 어려웠다.
    • 이해한 점
      • 창발성이란 하위 계층에 없는 특성이나 행동이 상위 계층에서 자발적으로 나타나는 현상을 말한다.

3. 📚 참고 사항

📢 논의하기

  1. 관련 자료 공유