본문 바로가기
📖 독서/오브젝트(Objects)

[오브젝트] 1장. 객체 설계

by 말랑한곰탱이 2022. 2. 19.

- 객체는 자신의 데이터를 스스로 처리하는 자율적인 존재여야 한다. 외부의 간섭을 최대한 배제하고 메시지를 통해서만 협력하는 자율적인 객체들의 공동체를 만드는 것이 훌륭한 객체 지향 설계를 얻을 수 있는 지름길이다.

절차지향과 객체지향

- 절차지향 : 모든 처리가 하나의 클래스 안에 위치하고 나머지 클래스는 단지 데이터의 역할만 수행. 절차적 프로그래밍의 세상은 우리의 예상을 너무나도 쉽게 벗어나기 때문에 코드를 읽는 사람과 원활하게 의사소통하지 못한다. 또한 데이터의 변경으로 인한 영향을 지역적으로 고립시키기 어려워 변경은 버그를 부르고 버그에 대한 두려움은 코드를 변경하기 어렵게 만든다.

- 객체지향 : 데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식. 의존성은 적절히 통제되고 하나의 변경으로 인한 여파가 여러 클래스로 전파되는 것을 효율적으로 억제한다. 객체지향 설계의 핵심은 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것이다. 각 객체는 자신을 스스로 책임진다!!

 

책임의 이동

- 객체는 다른 객체와의 협력이라는 문맥 안에서 특정한 역할을 수행하는 데 필요한 책임을 수행해야 한다. 따라서 객체가 어떤 데이터를 가지느냐보다 객체에 어떤 책임을 할당할 것이냐에 초점을 맞춰야 한다.

- 불필요한 세부사항을 캡슐화하는 자율적인 객체들이 낮은 결합도와 높은 응집도를 가지고 협력하도록 최소한의 의존성만을 남기는 것이 훌륭한 객체지향 설계다.

 

객체지향 설계

- 설계는 균형의 예술이다. 훌륭한 설계는 적절한 트레이드오프의 결과물이라는 사실을 명심하라. 이러한 트레이드오프 과정이 설계를 어려우면서도 흥미진진한 작업으로 만드는 것이다.

- 비록 현실에서는 수동적인 존재라고 하더라도 일단 객체지향의 세계에 들어오면 모든 것이 능동적이고 자율적인 존재로 바뀐다. 레베카 워프스브록은 이처럼 능동적이고 자율적인 존재로 소프트웨어 객체를 설계하는 원칙을 가리켜 의인화(anthropomorphism)라고 부른다.

- 설계는 코드를 작성하는 매 순간 코드를 어떻게 배치할 것인지를 결정하는 과정에서 나온다. 설계는 코드 작성의 일부이며 코드를 작성하지 않고서는 검증할 수 없다.

- 좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다.

- 훌륭한 객체지향 설계란 협력하는 객체 사이의 의존성을 적절하게 관리하는 설계다. 세상에 엮인 것이 많은 사람일수록 변하기 어려운 것처럼 객체가 실행되는 주변 환경에 강하게 결합될수록 변경하기 어려워진다. 객체 간의 의존성은 애플리케이션을 수정하기 어렵게 만드는 주범이다.