Clean Code

[Clean Code] Chapter 12 창발성

takman 2022. 3. 21. 00:30

해당 포스팅 내용은 책 'Clean Code - Robert C. Martin' 출처로 합니다.

 

 

 

먼저 창발성이 무엇인지에 대해 알아보자

 

창발: 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상
창발성: 단순한 결합이 복잡한 결과를 나타내는 특징을 의미 
  - 창발적 설계란 ?
-> 어떤 규칙과 원칙에 따라 설계를 하였을 때, 그것들이 모여 아주 좋은 거시적 설계가 되었을 때 이를 창발적 설계라 한다. 

 

소프트 웨어의 설계 품질을 크게 높여주는 4가지

중요도 순

  • 모든 테스트를 실행한다.
  • 중복을 없앤다.
  • 프로그래머의 의도를 표현한다.
  • 클래스와 메서드 수를 최소로 줄인다.

 

위와 같은 규칙을 따를 때, 켄트벡은 설계가 '단순하다' 라고 말한다.

이러한 규칙을 잘 지킨다면,

1. 우수한 설계가 나온다.

2. 코드 구조와 설계를 파악하기가 쉬워진다.

3. SRP나 DIP와 같은 원칙을 적용하기 쉬워진다.

4. 우수한 설계의 창발성을 촉진한다.

 

 

단순한 설계 규칙1: 모든 테스트를 실행하라

  • 설계는 시스템이 의도한 대로 돌아가는지 검증할 수 있어야 한다.
  • 테스트가 가능한 시스템을 만들려는 노력은 낮은 결합도와 높은 응집력이라는 결과를 만든다.
  • 테스트 케이스를 만들고 계속 실행함으로써, 설계 품질을 자연스레 높일 수 있다.

단순한 설계 규칙2: 중복을 없애라

  • 중복이란 추가 작업, 추가 위험, 불필요한 복잡도를 뜻한다.
  • 깔끔한 시스템을 만들기 위해서는 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요하다.

        동일한 코드를 새 메서드로 만듦으로써, 

        1. 메서드의 가시성↑

        2. 재사용성 ↑ -> 시스템 복잡도 ↓

 

  • Template Method 패턴은 고차원 중복 제거할 목적으로 자주 사용된다.

   Template Method 패턴: 거의 동일한 두 메소드에서 중복되는 부분을 합치고, 차이가 있는 부분만 별도의 하위 클래스에 작성하는 방법

 

단순한 설계 규칙3: 의도를 분명히 표현하라

  • 엉망인 코드를 짠다면 타인 또는 미래의 나 또한 코드를 100% 이해가 힘들어진다.
  • 개발자가 코드를 명백하게 짠다면, 다른 사람이 코드를 이해하기 쉬워지고 그 결과 결함이 줄고 유지보수 비용이 적게 든다.
의도를 분명히 표현하는 방법

1. 좋은 이름을 선택한다.
2. 함수와 클래스의 크기를 가능한 줄인다.
3. 표준 명칭을 사용한다.
4. 단위 테스트 케이스를 꼼꼼히 작성한다.
  • 의도를 분명하게 표현하기 위해서는 결국 노력이 가장 중요하다.

 

단순한 설계 규칙4: 클래스와 메서드 수를 최소로 줄여라

  • 중복을 제거하고 의도를 명백히 표현하는 등의 기본 원칙을 극단적으로 따르면, 득보다 실이 많아질 수 있다.(비효율적이 될 가능성↑)
  • 단순한 설계 규칙1~3 까지를 지키되, 적당한 선에서 실용적인 방식을 택하는 것이 중요하다.  

 

 

참고: https://velog.io/@jwkim/Clean-Code-12%EC%9E%A5-%EC%B0%BD%EB%B0%9C%EC%84%B1