[클린코드] 12장 : 창발성
상 한규
∣
2024년 1월 17일
목록으로 돌아가기
- 창발성 : 불시에 솟아나는 특성으로, 단순한 결합들이 복잡한 결과를 나타내는 것.
- 창발적 설계 : 규칙과 원칙을 지켜 설계를 하면 그것들이 모여 좋은 거시적 설계가 된다.
- 창발적 설계로 클린 코드를 구현하자
- 켄트 벡에 의하면 네 가지 규칙을 따른 설계는 단순한 설계라고 칭한다.
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머의 의도를 표현한다.
- 클래스와 메서드 수를 최소로 줄인다.
- 규칙 1. 모든 테스트를 실행한다.
- 모든 테스트 케이스를 항상 통과하는 시스템은 ‘테스트가 가능한 시스템’이다.
- 철저히 테스트가 가능한 시스템을 만들면 이는 크기가 작고 목적 하나만 수행하는 클래스가 나오며, 더 나은 설계를 얻을 수 있다.
- 아래의 방법을 따라 결합도를 낮추어 설계 품질을 높힐 수 있다.
- DIP(Dependency Inversion Principle) - 의존 역전 원칙
- 의존성 주입
- 인터페이스
- 추상화
- 규칙 2 ~ 4는 리팩터링과 관련되어있다.
테스트 케이스 작성 후 리팩토링을 한다. 이 때, 응집도를 높이고, 결합도를 낮출 수 있으며, 관심사를 분리할 수 있다.
- 규칙 2. 중복을 없앤다.
- 중복은 매우 큰 위험을 불러오므로 반드시 제거해야한다.
- 클린 시스템을 만드려면 단 몇 줄이라도 꼭 중복을 제거하겠다는 의지가 필요하다.
- Template method 패턴을 사용해보자.
- 규칙 3. 프로그래머의 의도를 표현한다.
- 의도를 정확히 표현하여 유지보수에 비용을 줄이자.
- 좋은 이름을 고르고, 함수와 클래스의 크기를 가능한 한 줄인다.
- 표준 명칭을 사용한다.
- 단위 테스트 케이스를 꼼꼼히 작성한다.
- 충분히 고민하여 이름을 짓는다.
- 클래스와 메서드 수를 최소로 줄인다.
- 무의미하고 독단적인 정책을 지양하여 메서드 수와 클래스 수를 줄이자.
- 가능한 한 실용적인 방식을 택하자.
- 이의 목표는 함수와 클래스 크기를 작게 유지하면서 시스템의 크기도 작게 유지하는 데에 있다.
댓글