4 주차
화 | Assignment #18
12장. 창발성
📘 책에서 기억하고 싶은 내용
- 단순한 설계 규칙 4가지 (p.216)
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머의 의도를 표현한다.
- 클래스와 메소드 수를 최소로 줄인다.
- 모든 테스트를 실행하라. (p.216)
- 결합도가 높으면
TC
를 작성하기 어렵고, 테스트가 불가능한 시스템은 검증도 불가능
- 테스트가 가능한 시스템을 만들기 위해 노력하면
SRP
를 준수하는 클래스를 설계 하게 되고, 결국 설계 품질이 좋아짐
TC
를 테스트 코드로 작성하면, 나중에 코드를 정리하여도 정상 작동 여부 확인이 가능함
- 중복을 없애라 (p.217)
- 중복은 추가 작업, 추가 위험, 불필요한 복잡도를 뜻함
- 깔끔한 시스템을 만들려면 단 몇 줄이라도 중복을 제거하겠다는 의지가 필요함
- 소규모 재사용은 시스템 복잡도를 극적으로 감소시킴
TEMPLATE METHOD
패턴은 고차원 중복을 제거할 목적으로 자주 사용됨
- 프로그래머의 의도를 표현하라 (p.221)
- 자신이 이해하는 코드를 짜기는 쉬움
- 하지만, 추후 유지보수할 사람이 코드를 짜는 사람만큼이나 문제를 깊이 이해할 가능성은 희박함
- 시스템이 점차 복잡해지며 유지보수 개발자가 시스템을 이해한르ㅏ 보내는 시간은 점점 늘어나고 동시에 코드를 오해할 가능성도 점점 커짐
- 개발자가 코드를 명백하게 짤수록 결함이 줄어들고 유지보수 비용이 줄어듦
- 코드의 표현력을 높이는 방법
- 좋은 이름으로 선택
- 함수와 클래스 크기를 가능한 줄임
- 표준 명칭 사용
- 단위 테스트 케이스 꼼꼼히 작성 :
TC
는 예제로 보여주는 문서
- 코드만 실행하고 다음 문제로 직행하는 사례가 너무나도 많아 다음 사람을 위한 배려가 필요함
나중에 내가 짠 더러운 코드를 읽을 사람은 바로 나 자신일 가능성이 높다는 사실을 잊지 말자
- 클래스와 메소드 수를 최소로 줄여라 (p.222)
- 어떤 규칙이든 지나치게 준수하면 과함
- ex) 클래스마다 무조건 인터페이스를 생성하기, 자료/동작 클래스는 무조건 분리하기 등
- 가능한 독단적인 견해 대신 실용적인 방식을 택해야 함
- 목표는 함수와 클래스 크기를 작게 유지하며 동시에 시스템 크기도 작게 유지하는 데 있음
🤔 소감 및 생각
- 복잡도가 높은 시스템을 유지보수하며 느꼈던 부분을 이 챕터에서 많이 다룬 것 같다.
- 그리고, 각 챕터의 내용이 결국 하나의 사실을 말하고 있음을 다시 느꼈지만, 모든 사람들이 알고 있지만 간과하기 쉬운 부분인 것 같다. 경험할수록 코드의 표현력이 좋아질거라고 믿고 매일 더 좋은 코드를 짤 수 있도록 노력해야겠다.
🔍 새롭게 또는 다시 알게 된 내용
- 창발성 : 남이 모르거나 하지 아니한 것을 처음으로 또는 새롭게 밝혀내거나 이루어 내는 성질