Skip to content

Latest commit

 

History

History
38 lines (35 loc) · 4.72 KB

chapter4.md

File metadata and controls

38 lines (35 loc) · 4.72 KB

4장 - 설계 품질과 트레이드오프

  • 스터디 중 삼색볼펜법으로 체크한 부분들을 팀원들과 공유한 내용입니다.
  • 스터디원들이 2명 이상 겹치는 부분은 강조표시(BOLD)가 되어 있습니다.
  • 문장은 페이지의 오름차순으로 정렬되어 있습니다.

🔴 빨강 (아주 중요하다고 생각한 내용!)

  • 변경될 수 있는 어떤 것이라도 캡슐화해야 한다.(109)

🔵 파랑 (중요하다고 생각한 내용!)

  • 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.(97)
  • 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다.(97)
  • 책임은 객체의 상태에서 행동으로, 나아가 객체와 객체 사이의 상호작용으로 설계 중심을 이동시키고, 결합도가 낮고 응집도가 높으며 구현을 효과적으로 캡슐화하는 객체들을 창조할 수 있는 기반을 제공한다.(98)
  • 데이터 중심의 관점은 객체의 상태에 초점을 맞추고 책임 중심의 관점은 객체의 행동에 초점을 맞춘다. 전자는 객체를 독립된 데이터 덩어리로 바라보고 후자는 객체를 협력하는 공동체의 일원으로 바라본다.(98)
  • 객체는 책임을 드러내는 안정적인 인터페이스 뒤로 책임을 수행하는 데 필요한 상태를 캡슐화함으로써 구현 변경에 대한 파장이 외부로 퍼져나가는 것을 방지한다.(99)
  • 객체지향이 강력한 이유는 한 곳에서 일어난 변경이 전체 시스템에 영향을 끼치지 않도록 파급효과를 적절하게 조절할 수 있는 장치를 제공하기 떄문이다.(108)
  • 변경될 가능성이 높은 부분을 구현이라고 부르고 상대적으로 안정적인 부분을 인터페이스라고 부른다는 사실을 기억하라.(109)
  • 캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있기 때문이다.(109)
  • 변경의 관점에서 응집도란 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도로 측정할 수 있다.(110)
  • 결합도는 한 모듈이 변경되기 위해서 다른 모듈의 변경을 요구하는 정도로 측정할 수 있다.(111)
  • 따라서 응집도와 결합도를 고려하기 전에 먼저 캡슐화를 향상시키기 위해 노력하라.(112)
  • 안타깝게도 접근자와 수정자 메서드는 객체 내부의 상태에 대한 어떤 정보도 캡슐화하지 못한다.(113)
  • 이처럼 데이터 중심 설계는 객체의 캡슐화를 약화시키기 때문에 클라이언트가 객체의 구현에 강하게 결합된다.(115)
  • 서로 다른 이유로 변경되는 코드가 하나의 모듈 안에 공존할 때 모듈의 응집도가 높다고 말한다.(116)
  • 어떤 요구사항 변경을 수용하기 위해 하나 이상의 클래스를 수정해야 하는 것은 설계의 응집도가 낮다는 증거다.(117)
  • 캡슐화는 설계의 제 1원리다.(117)
  • 객체에게 의미 있는 메서드는 객체가 책임져야 하는 무언가를 수행하는 메서드다.(117)
  • 우리가 상태와 행동을 객체라는 하나의 단위로 묶는 이유는 객체 스스로 자신의 상태를 처리할 수 있게 하기 위해서다.(119)
  • 데이터 주도 설계는 설계를 시작하는 처음부터 데이터에 관해 결정하도록 강요하기 떄문에 너무 이른 시기에 내부 구현에 초점을 맞추게 한다.(131)
  • 데이터 중심 설계 방식에 익숙한 개발자들은 일반적으로 데이터와 기능을 분리하는 절차적 프로그래밍 방식을 따른다.(131)
  • 올바른 객체지향 설계의 무게 중심은 항상 객체의 내부가 아니라 외부에 맞춰져 있어야 한다.(132)

🟢 초록 (흥미롭다고 생각한 내용!)

  • 가끔씩은 좋은 설계보다는 나쁜 설계를 살펴보는 관점에서 통찰을 얻기도 한다.(98)
  • 여기서 유지보수성이란 두려움 없이, 주저함 없이, 저항감 없이 코드를 변경할 수 있는 능력을 말한다.(109)
  • 직접 작성한 코드는 항상 불안정하며 언제라도 변경될 가능성이 높다.(112)
  • 코드 중복은 악의 근원이다.(119)
  • 이 메서드는 객체 내부에 DayOfWeek 타입의 요일과 LocalTime 타입의 시간 정보가 인스턴스 변수로 포함돼 있다는 사실을 인터페이스를 통해 외부에 노출하고 있는 것이다.(126)
  • 위 세 개의 메서드는 할인 정책에는 금액 할인 정책, 비율 할인 정책, 미적용의 세 가지가 존재한다는 사실을 만천하에 드러내고 있다.(127)