들어가며
- 습관을 들이기 위해 하루 하루 일지를 작성할 예정
클래스 다루기
- 코드를 작성할 때의 편의성보다 가독성이 높은 코드를 작성하라.
- 캡슐화의 의미론적인 위반을 각별히 주의하라.
포함 has a (갖다)(Containment)
관계
- 직원은 이름을 “갖고” 전화번호를 “갖고” 세금 ID 등을 “갖는”다.
7+-2
는 개인이 다른 작업을 수행하고 있을때 기억할 수 있는 개별적인 항목의 수다. 클래스의 멤버 변수가 이 수치를 넘는다면 리팩토링을 고려하라.
상속 is a
관계
- 상속을 고려해서 설계하고 문서화하라. 그게 아니면 상속을 금지하라.
광범위한 타입 검사보다 다형성을 사용하라.
클래스를 작성하는 이유
- 현실 세계의 객체를 모델링한다.
- 추상 객체를 모델링 한다.
- 복잡성을 줄인다.
- 복잡성을 고립시킨다.
- 구현 세부 사항을 숨긴다.
- 변경의 효과를 제한한다.
- 전역 데이터를 숨긴다.
- 매개 변수 전달을 간소화 한다.
- 중앙 집중 관리한다.
- 코드 재사용을 돕는다.
- 연관된 기능을 패키지로 구성한다.
- 특정한 리퍽토링을 수행한다.
Reference
스티브 맥코넬 지음, 서우석 옮김 『 코드 컴플리트 2nd edition 』, 위키북스(2017. 07. 28), 인용.
찰스 펫졸드, 『 Code, 하드웨어와 소프트웨어에 숨어있는 언어 』, 인사이트(2010 10 11), 인용.
스티브 프리먼, 냇 프라이스 지음, 이대엽 옮김, 『 테스트 주도 개발로 배우는 객체 지향 설계와 실천 』, 인사이트(2013 06 20), 인용.
앤드류 헌트, 데이비드 토머스 지음, 김창준, 정지호 옮김, 『 실용주의 프로그래머 』, 인사이트(2005 08 02), 인용.