독서일지/클린 코드

클린 코드 독서일지 - Day 23

Sadie Kim 2023. 11. 20. 21:58

창발성

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

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

켄트 백은 다음 규칙을 따르면 설계는 단순하다고 말한다.

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

위 목록은 중요도 순임.

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

테스트가 없으면 시스템이 의도한 대로 돌아가는지 검증이 불가능하다.
또한 테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 높아진다.
=> 테스트가 쉽게 코드를 작성하게 되어, 크기가 작고 목적 하나만 수행하는 클래스가 나오게 됨.

테스트 케이스를 만들고 계속 돌리라는 규칙을 따르면, 시스템은 낮은 결합도와 높은 응집력을 저절로 달성하게 된다.

단순한 설계 규칙 2~4: 리팩터링

테스트 케이스가 있으므로 시스템이 깨질까 걱정할 필요 없이 리팩터링이 가능
리팩터링 단계에서는 소프트웨어 설계 품질을 높이는 기법이라면 무엇이든 적용 가능 - 응집도 높이기, 결합도 낮추기, 관심사 분리, 시스템 관심사를 모듈로 나누기, 함수와 클래스 크기 줄이기, 더 나은 이름 선택하기 등
=> 이 단계에서는 단순한 설계 규칙 중 나머지 3개를 적용한다.

중복을 없애라

중복은 추가 작업, 추가 위험, 불필요한 복잡도를 뜻함
코드를 재사용해 중복을 없애자.

표현하라

표현력을 높이는 방법

  1. 좋은 이름 선택하기
  2. 함수와 클래스 크기를 가능한 줄이기
  3. 표준 명칭 사용하기
  4. 단위 테스트 케이스를 꼼꼼히 작성하기
  5. 다음에 읽을 사람을 고려해 코드를 읽기 쉽게 만들도록 노력하기

클래스와 메서드 수를 최소로 줄여라

크기를 줄이는 것도 너무 극단으로 치달으면 득보다 실이 많아지므로, 가능한 줄이기
실용적인 방식을 택하는 것이 중요
설계 규칙 네 개 중 우선순위가 가장 낮음 -> 나머지가 더 중요.

결론

단순한 설계 규칙을 따른다면 오랜 경험 후에나 익힐 우수한 기법과 원칙을 단번에 활용할 수 있다.