“오브젝트 : 코드로 이해하는 객체지향 설계” 을 읽기 시작한다.
Chapter 01 : 객체, 설계
[Rovert C. Martin : 클린 소프트웨어]
모든 소프트웨어는 세가지 목적이 있다.
1.실행중에 제대로 동작하는 것.
-모듈의 존재 이유.2.변경을 위해 존재하는 것.
- 요구사항은 변경되기 때문에 간단한 작업으로 변경이 가능해야한다.3.코드를 읽는 사람과 의사소통 하는 것.
-특별한 훈연없이도 쉽게 읽고 이해할 수 있어야 한다.
- 모든 모듈은 제대로 실행돼야 하고, 변경이 용이해야하며, 이해하기 쉬워야 한다.
- 예제(절차적 Theater)의 문제
모든 제어를 theater가 한다, 읽기(이해)가 어렵다.
모든 세부사항을 Theater에서 다룬다, 의존성이 과하다(결합도가 높다).
(최소하의 의존성을 유지하고, 불필요한 의존성을 제거해야한다.)
- 개선
자율성을 높이자.
- 관람객과 판매원을 자율적인 존재로 만든다.
내부구현(세부사항)을 외부에 노출하지 않는다.(캡슐화) - 문제를 스스로 책임지고 해결자기 자신의 문제를 스스로 해결하도록 코드를 변경하자.객체 내부의 상태를 캡슐화 하고 객체간에 오직 메시지를 통해서 상호작용하도록 하는것이 핵심.
스스로와 밀접하게 연관된 작업만을 수행하고, 연관성 없는 작업은 다른객체에 위임하는 객체를
응집도(cohesion)가 높다고 말한다.객체의 응집도를 높이기 위해선 스스로 자신의 데이터를 책임져야 한다.
- 객체지향 프로그래밍
데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍 하는 방식을
객체지향 프로그래밍이라고 부른다.훌룡한 객체지향 설계의 핵심은 캡슐화를 이용해 의존성을 적절히 관림함으로써 객체사이의 결합도를 낮추는 것.
- 책임의 이동
각 객체는 자신을 스스로 책임진다.
데이터와 데이터를 사용하는 프로세스가 동일한 객체 안에 위치한다면 객체지향 프로그래밍 방식을 따르고 있을 확률이 높다.설계를 어렵게 만드는것 -> 의존성
해결방법 -> 객체사이의 결합도를 낮추는 것
불필요한 세부사항을 객체내부로 캡슐화하는 것은 객체의 자율성을 높이고, 응집도 높은 객체들의 공동체를 창조할 수 있다.
- 트레이드오프
어떤 기능을 설계하는 방법은 한가지 이상일 수 있다.
동일한 기능을 한가지 이상의 방법으로 설계할 수 있기 때문에 설계는 트레이드오프의 산물이다.
- 의인화
객체지향 세계에서는 모든 것이 능독적이고 자율적인 존재로 바뀐다.
레베카 워프스브록은 능동적이고 자율적인 존재로 소프트웨어 객체를 설계하는 원칙을 가리켜
의인화(anthropomorphism)훌룡한 객체지향 설계란 소프트웨어를 구성하는 모든 객체들이 자울적으로 행동하는 설계를 가리킨다.
- 객체지향 설계
유연하게 대응할 수 있는 코드를 원한다.
변경 가능한 코드란 이해하기 쉬운 코드다.훌룡한 객체지향 설계란 협력하는 객체 사이의 의존성을 적절하게 관리하는 설계다.
객체가 실행되는 주변환경에 강하게 결합될수록 변경하기 어려워진다.진정한 객체지향 설계로 나아가는 길
-> 협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것.
- 정리를 하자… 훌룡한 객체지향 설계란…(소단위마다 나오는..)
캡슐화를 이용해 의존성을 적절히 관림함으로써 객체사이의 결합도를 낮추는 것.
소프트웨어를 구성하는 모든 객체들이 자울적으로 행동하는 설계
협력하는 객체 사이의 의존성을 적절하게 관리하는 설계... 의존성...의존성!!!
1장을 읽음 20.10.26