[클린코드] 12장 : 창발성

목록으로 돌아가기
  • 창발성 : 불시에 솟아나는 특성으로, 단순한 결합들이 복잡한 결과를 나타내는 것.
  • 창발적 설계 : 규칙과 원칙을 지켜 설계를 하면 그것들이 모여 좋은 거시적 설계가 된다.

  • 창발적 설계로 클린 코드를 구현하자
  • 켄트 벡에 의하면 네 가지 규칙을 따른 설계는 단순한 설계라고 칭한다.
    • 모든 테스트를 실행한다.
    • 중복을 없앤다.
    • 프로그래머의 의도를 표현한다.
    • 클래스와 메서드 수를 최소로 줄인다.

  • 규칙 1. 모든 테스트를 실행한다.
    • 모든 테스트 케이스를 항상 통과하는 시스템은 ‘테스트가 가능한 시스템’이다.
    • 철저히 테스트가 가능한 시스템을 만들면 이는 크기가 작고 목적 하나만 수행하는 클래스가 나오며, 더 나은 설계를 얻을 수 있다.
    • 아래의 방법을 따라 결합도를 낮추어 설계 품질을 높힐 수 있다.
      • DIP(Dependency Inversion Principle) - 의존 역전 원칙
      • 의존성 주입
      • 인터페이스
      • 추상화

  • 규칙 2 ~ 4는 리팩터링과 관련되어있다. 테스트 케이스 작성 후 리팩토링을 한다. 이 때, 응집도를 높이고, 결합도를 낮출 수 있으며, 관심사를 분리할 수 있다.

  • 규칙 2. 중복을 없앤다.
    • 중복은 매우 큰 위험을 불러오므로 반드시 제거해야한다.
    • 클린 시스템을 만드려면 단 몇 줄이라도 꼭 중복을 제거하겠다는 의지가 필요하다.
    • Template method 패턴을 사용해보자.

  • 규칙 3. 프로그래머의 의도를 표현한다.
    • 의도를 정확히 표현하여 유지보수에 비용을 줄이자.
    • 좋은 이름을 고르고, 함수와 클래스의 크기를 가능한 한 줄인다.
    • 표준 명칭을 사용한다.
    • 단위 테스트 케이스를 꼼꼼히 작성한다.
    • 충분히 고민하여 이름을 짓는다.

  • 클래스와 메서드 수를 최소로 줄인다.
    • 무의미하고 독단적인 정책을 지양하여 메서드 수와 클래스 수를 줄이자.
    • 가능한 한 실용적인 방식을 택하자.
    • 이의 목표는 함수와 클래스 크기를 작게 유지하면서 시스템의 크기도 작게 유지하는 데에 있다.
author-profile
Written by 상 한규

댓글