조영호 님의 저서 **《오브젝트: 코드로 이해하는 객체지향 설계》**는 한국 개발자들 사이에서 객체지향의 바이블로 불리는 명저입니다.
책의 핵심 철학인 '역할, 책임, 협력' 그리고 **'변경 유연성'**을 중심으로, 개발자에게 영감을 주는 문장 30개
1. 설계의 본질과 목적
- "모든 소프트웨어 모듈에는 세 가지 목적이 있다. 첫째, 실행 중에 제대로 동작하는 것. 둘째, 변경을 위해 존재하는 것. 셋째, 코드를 읽는 사람과 의사소통하는 것이다."
- "설계란 코드를 배치하는 방식이며, 설계는 변경을 위해 존재한다."
- "좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다."
- "우리는 미래를 예측할 수 없다. 단지 대비할 수 있을 뿐이다."
- "설계는 트레이드오프의 산물이다. 모든 상황에 적합한 절대적인 설계는 존재하지 않는다."
2. 객체와 협력 (Collaboration)
- "객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다."
- "어떤 객체도 섬이 아니다. 객체는 다른 객체와의 협력을 통해 기능을 구현한다."
- "협력이 객체를 만들고, 객체가 역할을 만든다."
- "객체가 어떤 상태를 가지고 있느냐가 아니라, 어떤 행동을 하느냐가 객체의 정체성을 결정한다."
- "애플리케이션의 기능을 구현하기 위해 객체들이 협력하는 과정이 바로 '문맥(Context)'이다."
3. 책임 주도 설계 (Responsibility)
- "데이터가 아닌 책임에 초점을 맞춰라."
- "객체에게 책임을 할당하는 것은 설계를 시작하는 가장 중요한 단계다."
- "'이 객체가 어떤 데이터를 포함해야 하는가?'라는 질문을 '이 객체가 어떤 책임을 수행해야 하는가?'로 바꾸라."
- "책임은 객체가 수신할 수 있는 메시지의 기반이 된다."
- "훌륭한 객체지향 설계는 객체가 아니라 메시지를 먼저 결정한다."
4. 캡슐화와 응집도 (Encapsulation & Cohesion)
- "캡슐화란 단순히 데이터를 감추는 것이 아니다. 소프트웨어 안에서 변하는 모든 것을 감추는 것이다."
- "상태와 행동을 하나의 단위로 묶는 자율적인 실체, 이것이 객체의 본질이다."
- "응집도가 높다는 것은 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도가 크다는 것을 의미한다."
- "서로 다른 이유로 변경되는 코드가 하나의 모듈 안에 공존해서는 안 된다."
- "'묻지 말고 시켜라(Tell, Don't Ask)'. 객체의 상태를 묻지 말고 원하는 작업을 시켜야 한다."
5. 의존성과 변경 관리 (Dependency)
- "의존성은 변경의 전파 가능성을 의미한다."
- "유연하고 재사용 가능한 설계는 객체가 어떻게(How) 하는지를 장황하게 나열하지 않고, 무엇(What)을 하는지를 서술한다."
- "컴파일타임 의존성을 런타임 의존성으로 대체하라. 이것이 유연한 설계의 핵심이다."
- "추상화에 의존하라. 구체 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존하라."
- "의존성을 관리하는 것은 곧 변경을 관리하는 것이다."
6. 상속과 합성 (Inheritance vs Composition)
- "상속은 캡슐화를 깨뜨린다. 상속은 부모 클래스의 구현이 자식 클래스에게 노출되는 상속의 구조적 한계 때문이다."
- "상속보다는 합성을 선호하라. 합성은 객체의 구현이 아닌 퍼블릭 인터페이스에 의존하게 만든다."
- "코드 재사용을 위해 상속을 사용하지 마라. 상속은 타입 계층을 구현하기 위해 사용해야 한다."
- "서브클래싱(구현 상속)이 아니라 서브타이핑(인터페이스 상속)을 목표로 해야 한다."
7. 마무리를 위한 제언
- "결국 가장 중요한 것은 코드다. 코드는 설계의 유일한 산출물이며, 실행 가능한 유일한 문서다."
CC
클론코딩 팀
튜토리얼 기반 학습의 새로운 기준을 만들어가는 클론코딩입니다.
개발 교육콘텐츠 크리에이터