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 |