탐구생활/독서

[객체지향의 사실과 오해] 01_협력하는 객체들의 공동체

왹져박사 2025. 2. 10. 18:26

01_협력하는 객체들의 공동체

“객체들의 패러다임의 핵심은 자율적인 객체들의 협력

객체지향의 목표는 실세계를 모방하는 것이 아니라,

고객과 사용자를 만족시키는 신세계를 창조하는 것.

 

협력하는 사람들

요청-응답-협력, 역할-책임

 

역할, 책임, 협력

적절한 객체에게 적절한 책임을 할당하는 것.

책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소.

객체의 역할

  • 여러 객체가 동일한 역할을 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다.
  • 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
  • 하나의 객체가 동시에 여러 역할을 수행할 수 있다.

 

협력 속에 사는 객체

객체는 어플리케이션의 기능을 구현하기 위해 존재한다.

객체지향 어플리케이션의 아름다움을 결정하는 것 → 협력

협력이 얼마나 조화를 이루는 가를 결정하는 것 → 객체

결국, 협력(어플리케이션)의 품질을 결정하는 것은 객체의 품질

 

이를 위해, 객체가 갖춰야 할 덕목

  1. 객체는 충분히 ‘협력적’이어야 한다. 스스로 모든 것을 처리하려는 객체는 내부적인 복잡도에 의해 자멸하고 만다.
  2. 다른 객체의 요청, 다른 객체에게 요청에 열려 있어야 한다.
  3. 객체는 충분히 ‘자율적’이어야 한다.
  4. 다른 객체가 요청한 응답 여부나, 응답 방식은 객체 스스로 판단하고 결정한다.

 

객체지향 설계의 묘미

다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에

협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 것!

 

과거의 전통적인 개발 방법과는 다른 객체지향의 핵심은,

데이터(상태)와 프로세스(행동)를 객체라는 하나의 틀 안에 함께 묶어 객체의 자율성을 보장한다.

이러한 자율적인 객체로 구성된 공동체는 유지보수가 쉽고,

재사용이 용이한 시스템을 구축할 수 있는 가능성을 제시한다.

 

객체 간의 의사소통 수단: 메시지

수신된 메시지를 처리하는 방법: 메서드

 

다른 프로그래밍 언어와 구별되는 핵심적인 특징

메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다.

메시지와 메서드의 분리 → 객체의 협력에 참여하는 객체들 간의 자율성 증진.

캡슐화(encapsulation)와 깊은 관련.

 

객체지향의 본질

“객체”지향 어플리케이션이란,

역학을 가진 객체들이 그 책임을 다하며, 메시지를 주고받으며 협력하는 동적인 관계.

클래스는 이를 구현하는 메커니즘일 뿐!

 

 


 

사실, C++ 이전에 C#을 배울 때까지만 해도 객체 지향에 대하여 전혀 알지 못했다고 생각한다. 

객체 지향? SOLID 원칙? 이라고 생각했던 것 같다. 

사실상 길어봤자 6개월인 학원들에서는 기본 문법을 빠르게 익힌 후, Unity C#으로 넘어갔다. 

객체 지향 이상의 컴포넌트 지향 언어라는 C#을 배우며,

부끄럽지만 public과 private을 단지 에디터 공개/비공개 정도로만 알았다. 

그 과정에서 Getter/Setter는 Singleton 패턴에서만 보고, 사용해 보았다. 

 

이후에 C++을 제대로(기초부터) 공부하며, 함수, 메서드, 메시지가 무엇인지 알게 되었고, 

강사님이 추천해 주신 이 '객체지향의 사실과 오해'라는 책을 읽으며 객체가 무엇인지, 

객체들은 어떻게 상호작용 하는지 그려지는 것 같다. 

 

나는 본질적으로 언어를 익히며 왜?라는 의문을 해결해야 나의 의도를 명확하게 담아 정말 프로그래밍할 수 있다고 생각한다. 그렇기에 이제야 코더에서 프로그래머가 되었다고 생각한다. 

 

사실상 객체 지향 언어를 배우기 이전에, 이 책을 읽고 공부했다면

훨씬 전체적인 구조를 생각하는 것에 도움이 많이 되었을 것이라고 생각한다.