설계·아키텍처

조영호 님의 저서 **《오브젝트: 코드로 이해하는 객체지향 설계》**는 한국 개발자들 사이에서 객체지향의 바이블로 불리는 명저입니다.

조영호 님의 저서 《오브젝트: 코드로 이해하는 객체지향 설계》는 한국 개발자들 사이에서 객체지향의 바이블로 불리는 명저입니다.

CC
클론코딩 팀
3분 읽기

조영호 님의 저서 **《오브젝트: 코드로 이해하는 객체지향 설계》**는 한국 개발자들 사이에서 객체지향의 바이블로 불리는 명저입니다.

책의 핵심 철학인 '역할, 책임, 협력' 그리고 **'변경 유연성'**을 중심으로, 개발자에게 영감을 주는 문장 30개


1. 설계의 본질과 목적

  1. "모든 소프트웨어 모듈에는 세 가지 목적이 있다. 첫째, 실행 중에 제대로 동작하는 것. 둘째, 변경을 위해 존재하는 것. 셋째, 코드를 읽는 사람과 의사소통하는 것이다."
  2. "설계란 코드를 배치하는 방식이며, 설계는 변경을 위해 존재한다."
  3. "좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다."
  4. "우리는 미래를 예측할 수 없다. 단지 대비할 수 있을 뿐이다."
  5. "설계는 트레이드오프의 산물이다. 모든 상황에 적합한 절대적인 설계는 존재하지 않는다."

2. 객체와 협력 (Collaboration)

  1. "객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다."
  2. "어떤 객체도 섬이 아니다. 객체는 다른 객체와의 협력을 통해 기능을 구현한다."
  3. "협력이 객체를 만들고, 객체가 역할을 만든다."
  4. "객체가 어떤 상태를 가지고 있느냐가 아니라, 어떤 행동을 하느냐가 객체의 정체성을 결정한다."
  5. "애플리케이션의 기능을 구현하기 위해 객체들이 협력하는 과정이 바로 '문맥(Context)'이다."

3. 책임 주도 설계 (Responsibility)

  1. "데이터가 아닌 책임에 초점을 맞춰라."
  2. "객체에게 책임을 할당하는 것은 설계를 시작하는 가장 중요한 단계다."
  3. "'이 객체가 어떤 데이터를 포함해야 하는가?'라는 질문을 '이 객체가 어떤 책임을 수행해야 하는가?'로 바꾸라."
  4. "책임은 객체가 수신할 수 있는 메시지의 기반이 된다."
  5. "훌륭한 객체지향 설계는 객체가 아니라 메시지를 먼저 결정한다."

4. 캡슐화와 응집도 (Encapsulation & Cohesion)

  1. "캡슐화란 단순히 데이터를 감추는 것이 아니다. 소프트웨어 안에서 변하는 모든 것을 감추는 것이다."
  2. "상태와 행동을 하나의 단위로 묶는 자율적인 실체, 이것이 객체의 본질이다."
  3. "응집도가 높다는 것은 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도가 크다는 것을 의미한다."
  4. "서로 다른 이유로 변경되는 코드가 하나의 모듈 안에 공존해서는 안 된다."
  5. "'묻지 말고 시켜라(Tell, Don't Ask)'. 객체의 상태를 묻지 말고 원하는 작업을 시켜야 한다."

5. 의존성과 변경 관리 (Dependency)

  1. "의존성은 변경의 전파 가능성을 의미한다."
  2. "유연하고 재사용 가능한 설계는 객체가 어떻게(How) 하는지를 장황하게 나열하지 않고, 무엇(What)을 하는지를 서술한다."
  3. "컴파일타임 의존성을 런타임 의존성으로 대체하라. 이것이 유연한 설계의 핵심이다."
  4. "추상화에 의존하라. 구체 클래스에 의존하지 말고 인터페이스나 추상 클래스에 의존하라."
  5. "의존성을 관리하는 것은 곧 변경을 관리하는 것이다."

6. 상속과 합성 (Inheritance vs Composition)

  1. "상속은 캡슐화를 깨뜨린다. 상속은 부모 클래스의 구현이 자식 클래스에게 노출되는 상속의 구조적 한계 때문이다."
  2. "상속보다는 합성을 선호하라. 합성은 객체의 구현이 아닌 퍼블릭 인터페이스에 의존하게 만든다."
  3. "코드 재사용을 위해 상속을 사용하지 마라. 상속은 타입 계층을 구현하기 위해 사용해야 한다."
  4. "서브클래싱(구현 상속)이 아니라 서브타이핑(인터페이스 상속)을 목표로 해야 한다."

7. 마무리를 위한 제언

  1. "결국 가장 중요한 것은 코드다. 코드는 설계의 유일한 산출물이며, 실행 가능한 유일한 문서다."
CC

클론코딩 팀

튜토리얼 기반 학습의 새로운 기준을 만들어가는 클론코딩입니다.

개발 교육콘텐츠 크리에이터