- Common sense naming conventions
- Cohesive and loosely coupled modules
- Elegant abstractions
- Lack of duplication
- A close resemblance to the application domain
- 변수, 메소드, 객체의 이름을 상식에 근거해서 붙이기
- 내부로는 강한 결합, 외부로는 유연한 모듈
- 우아한 추상화(elegant abstractions)
- 중복의 부재(lack of redundancy)
- 어플과 도메인과의 밀접한 관련성
'고먼'이 말하는 리펑토링
- '잘 설계된 코드를 작고 가역적인(reversible) 변화를 연속적으로 도입해서 자기 자신을 제외한 그 어느 누구도 관리할 수 없게 만드는 과정'
- 이름 제멋대로 붙이기
- 보물찾기(Treasure Hunt) : 코드가 간단하고 자체적으로 완결된 방식 구성이 아닌, 주로 다른 코드에 대한 참조로 이루어지는 경우.
- 객체지향적인 설계를 수행하여 상속(inheritance), 위임(delegation), 프록시(proxy)와 같은 개념 적용하다 보면 어느 객체가 수행하는 간단한 업무가 실제로 어디에서 이루어지는지 알기 어려운 경우가 생긴다.
- 객체지향의 근본사항은 코드의 관리를 쉽게 하는 것에 있지 추상 계층을 도입해 코드 이해를 어렵게 만드는 것이 아니다.
- '자기만의 모델링 언어 사용' 워드나, 파워포인트로 그리지 말고 UML쓰자.
- 너무나 명백한 사실을 상세히 설명하지 말라. 주석은 상식선에서 쓰자.
- '비오는 날을 위한 시나리오' 일어나지도 않을 코드를 열심이 작업하지 말라.
- '모듈의 중력장(Module Gravity Well) 오만가지 잡동사니를 전부 한 곳으로 끌어들이는 객체를 만들지 말라. 모듈의 내부로는 응집력이 있어야 한다.(응집력 상승=버그 최소화)
직업 안정도(Job security index) = 1 / 코드 관리의 용이성 (Maintainability)
윗말을 고지고때로 믿지말라;; 역설적 표현이다.
refer to
'프로그래밍은 상상이다'-임백준