STUDY/Books

[Clean Code] 12장 창발성

hyunah 2021. 6. 5. 20:14

Clean Code 내용 정리; 12장 창발성


착실하게 따르기만 하면 우수한 설계가 나오는 단순한 설계 규칙 네 가지에 대해 설명한다.





1. 모든 테스트를 실행하라


  • 테스트가 불가능한 시스템은 검증도 불가능하다. 오류가 날 것이 두려워 리팩터링을 하기도 망설여진다.


  • 테스트가 가능한 시스템을 만들면 크기가 작고 목적 하나만 수행하는 클래스가 나오기 때문에 설계 품질이 높아진다.



'테스트 케이스를 만들고 계속 돌려라'






2. 리팩터링: 중복을 없애라


  • 우수한 설계에서 중복은 추가적인 작업과 위험, 불필요한 복잡도를 뜻하기 때문에 없애야할 대상이다.


  • 단 몇 줄이라도 중복을 제거하겠다는 의지로 소규모 재사용의 기회를 포착한다면 시스템 복잡도를 극적으로 줄일 수 있다.



//size와 isEmpty 함수를 구현해야 하는 경우 size함수를 재사용하여 중복 구현을 막음

int size(){}

boolean isEmpty(){
  return 0 == size();
}



//고차원 중복 제거에 자주 활용되는 TEMPLATE METHOD 패턴
//TEMPLATE METHOD 패턴: 변하지 않는 알고리즘은 슈퍼 클래스 메소드에 만들어두고 하위 클래스에서 다른 형태로 override해 사용

abstract public class VacationPolicy {
  public void accrueVacation() {
    calculateBaseVacationHours();
    alterForLegalMinimums();
    applyToPayroll();
  }

  private void calculateBaseVacationHours(){/*...*/};
  abstract protected void alterForLegalMinimums();
  private void applyToPayroll(){/*...*/};
}

public class USVacationPolicy extends VacationPolicy {
  @Override protected void alterForLegalMinimums(){/*...*/};
}

public class EUVacationPolicy extends VacationPolicy {
  @Override protected void alterForLegalMinimums(){/*...*/};
}





3. 리팩터링: 프로그래머 의도를 표현하라


  • 지금의 내가 이해하는 코드를 짜기는 쉽다. 그러나 코드는 혼자만 읽는 것이 아니고, 지금만 읽고 말 것도 아니다. 우린 나중에 읽을 사람을 고려해 조금이라도 읽기 쉽게 만들려고 깊이 고민해야 한다. 조금만 더 주의를 기울여서 명백한 코드를 짜라.


  • 좋은 이름을 선택하고, 함수와 클래스 크기를 가능한 줄이며 단위 테스트 케이스를 꼼꼼히 작성하여 기능을 분명히 이해할 수 있게 만들어라.






4. 리팩터링: 클래스와 메서드 수를 최소로 줄여라


  • 함수와 클래스 수를 가능한 줄이되, 무의미하고 독단적인 정책에 따라 너무 많은 클래스와 메서드를 만들지는 말아야 한다.


  • 함수와 클래스 크기를 작게 유지하면서 시스템 크기도 작게 유지하는 것을 목표로 해야 한다.


그러나 이 규칙은 앞서 소개한 규칙들 중에서 우선순위가 가장 낮다.






TDD에 관해 공부하고 실습할 때만 해도 '이 좋은 걸 왜 안 하지?'라는 생각을 하였는데, 최근 클론 코딩 프로젝트를 하면서 이것이 얼마나 바보같은 자만이었는지 알 수 있었다.

클린 코드에서 계속해서 반복하는 이야기는 위의 네 규칙으로 수렴할 것이다. 가장 중요하고 효과적이고 필수적이지만, 그만큼 실천하기가 어렵다는 것을 누구보다 잘 알고 있기에 반복해서 되새겨야할 규칙들이다.

'STUDY > Books' 카테고리의 다른 글

[Clean Code] 13장 동시성  (0) 2021.06.09
[Clean Code] 11장 시스템  (0) 2021.06.04
[Clean Code] 10장 클래스  (0) 2021.05.30
[Clean Code] 9장 단위 테스트  (0) 2021.05.25
[Clean Code] 8장 경계  (0) 2021.05.24