켄트 벡은 다음 규칙을 따르면 설계는 '단순하다'고 말한다
우선 순위 순
설계는 의도한 대로 돌아가는 시스템을 내놓아야 한다.
테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 높아진다. 테스트 케이스가 많을수록 개발자는 테스트가 쉽게 코드를 작성한다.
테스트 케이스를 모두 작성했다면 코드와 클래스를 정리해도 괜찮다. 코드를 점진적으로 리팩터링 해나간다.
테스트 케이스가 있기 때문에 코드를 정리하면서 시스템이 깨질까 걱정할 필요가 없다.
리팩터링 단계에서는 소프트웨어 설계 품질을 높이는 기법이라면 무엇이든 적용해도 괜찮다.
중복은 추가 작업, 추가 위험, 불필요한 복잡도를 뜻한다. 깔끔한 시스템을 만들려면 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요하다.
중복의 형태
소규모 재사용
아주 적은 양의 공통적인 코드를 새 메서드로 뽑아 이 메서드를 좀더 추상화해 다른 맥락에서 재사용하는 것
템플릿 메서드 패턴
메서드에서 공통적인 부분은 두고 다르게 구현되는 하나의 부분만 상속으로 다르게 구현하는 방법
자신이 이해하는 코드를 짜기는 쉽다. 나중에 코드를 유지보수 하는 사람이 코드를 짜는 사람만큼이나 문제를 깊이 이해할 가능성은 희박하다.
코드는 개발자의 의도를 분명히 표현해야 한다. 개발자가 코드를 명백하게 짤수록 다른 사람이 그 코드를 이해하기 쉬워진다.
나중에 코드를 읽을 사람이 바로 자신일 가능성이 높다는 사실을 명심하고 코드만 돌린 후에 다음 문제로 직행하는 것이 아니라 노력과 주의를 들여야 한다.
HOW
함수와 클래스 수를 가능한 줄여야 한다. 목표는 함수와 클래스 크기를 작게 유지하면서 동시에 시스템 크기도 작게 유지하는 데 있다.
이 규칙은 간단한 설계 규칙 네 개 중 우선순위가 가장 낮다. 테스트 케이스를 만들고, 중복을 제거하고 의도를 표현하는 다른 작업이 더 중요하다.
진짜 간단한데 어려운 것 같다. 이 책을 지금까지 읽으면서 이번 장에서 소개한 단순한 설계 규칙 4가지는 다 들어봤던 것들이다. 그렇지만 참... 적용하기 어려운 것 같다.
특히 나는 코드를 짜고 보면 중복이 되는 부분이 정말 많다는 것을 느낀다. 그래서 항상 이 중복을 어떻게 처리를 할까?를 생각하게 되고 그러다가 코드를 뒤엎게 되고... 하는 경우도 있게 되는 것 같다.
중복을 잘 처리할 수 있는 방법과 최대한 중복이 없게 코드를 처음부터 짜는 것을 고민하면서 연습해 나가야겠다.