반응형

창발적 설계로 깔끔한 코드 구현하기

 

목차

1. 창발적 설계란

2. 모든 테스트를 실행한다

3. 중복을 없앤다

4. 의도를 표현한다

5. 실용적 관점에서 타협한다.


1. 창발적 설계란

창발성(Emergence) :

  - 하위 계층에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출연하는 현상.

  - 각각의 개미는 집을 지을 능력이 없지만, 작은 개미들의 상호작용을 통해 집이라는 결과물이 나오는 것처럼 작은 요소들의 상호작용의 반복이 전체구조에 영향을 미친다.

 

창발적 설계 : 

  단순한 4가지를 반복하다보면 전체적으로 깨끗한 코드가 만들어진다.

 

'켄트 백' 이 주장한 창발적 설계 원칙

  1. 모든 테스트를 실행한다.
  2. 중복을 없앤다.
  3. 프로그래머 의도를 표현한다.
  4. 클래스와 메서드 수를 최소로 줄인다. 실용적 관점에서 타협한다.

원칙의 중요도는 위 순서와 같다.

 

1. 모든 테스트를 실행한다.

  * 테스트를 작성할수록 설계 품질이 좋아진다.

  - 모든 테스트 케이스를 향상 통과하는 시스템은 '테스트가 가능한 시스템'이다. 테스트가 불가능한 시스템은 검증도 불가능하고, 절대 출시하면 안된다.

  - 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 높아진다. 크기가 작고 목적 하나만 수행하는 클래스가 나온다.

  - 결합도가 높으면 테스트 케이스를 작성하기 어렵기 때문에 결합도를 낮추는 설계를 하게 된다.

  - '모든 테스트를 실행한다'는 규칙을 따르면 시스템은 낮은 결합도와 높은 응집력이라는 목표를 저절도 달성할 수 있다.

 

2. 중복을 없앤다

  * 기존의 코드를 최대한 재활용한다.

  - 중복을 없애는 패턴중에 Template Method 패턴 :

        알고리즘의 구조를 상위 클래스의 메서드에서 정의하고, 하위 클래스에서 자신의 맞게 세부 알고리즘을 정의한다.

 

3. 의도를 표현하라

  * 다른 사람을 위해서 읽기 쉽게 만들어야 한다. (본인이 다른 사람이 될 수도 있다.)

  1. 좋은 이름을 선택한다.
  2. 함수와 클래스 크기를 가능한 줄인다. 작은 클래스와 작은 함수는 이름 짓기도 쉽다!
  3. 표준 명칭을 사용한다. 다른 개발자가 보고 바로 이해할 수 있도록 디자인 패턴을 사용했다면 그 이름을 클래스에 넣어준다.
  4. 단위 테스트 케이스를 꼼꼼하게 작성한다.
  5. 다른 사람을 위해 조금이라도 더! 읽기 쉽게 만들려고 노력한다.

 

4. 클래스와 메서드 수를 최소로 줄인다. 실용적 관점에서 타협한다.

  * 과도한 설계를 하지 말아야 한다.

  - 여러가지 규칙을 극단적으로 심취해 클래스와 메서드를 무수하게 만들지 말라

  - 결국 좋은 코드를 만드는 이유는 생산성을 올리기 위한것이다.

  - 실용적인 관점에서 타협해야 한다.

  - 환경과 상황이 바뀌면 그때 설게를 하면 된다. 거의 발생하지 않을 일에 미리 투자하는 비용이 더 크다.

 

728x90
반응형

'Book > Clean Code' 카테고리의 다른 글

[Clean Code] Chapter 14  (0) 2022.04.02
[Clean Code] Chapter 13  (0) 2022.03.31
[Clean Code] Chapter 11  (0) 2022.03.27
[Clean Code] Chapter 10  (0) 2022.03.26
[Clean Code] Chapter 09  (0) 2022.03.21

+ Recent posts