본문 바로가기
독서

객체지향의 사실과 오해 - 1장 협력하는 객체들의 공동체

by tempus 2022. 3. 21.
반응형

아래 내용은 조영호 님의 "객체지향의 사실과 오해"를 읽고 공부한 내용을 개인적으로 정리하였습니다.

 

1장. 협력하는 객체들의 공동체

📕 Section 1

객체 지향의 목표는 실세계의 모방이 아니라 새로운 세계를 창조하는 것이다.

실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다.

👉 실세계에서 일어나는 모든 일들을 객체로 대체하기에는 한계가 있기에 모방이 아닌 창조를 한다고 말하는 것 같았다.

 

📕 Section 2

객체 지향에서 가장 중요한 3가지 개념 : 역할, 협력, 책임

 

 

각각의 객체에는 역할과 책임이 주어진다. 그리고 그 객체들 사이에서는 협력을 통해 움직인다.

  • 협력은 응답요청으로 구성
  • 역할은 어떤 협력에 참여하는 특정한 객체가 협력 안에서 차지하는 책임이나 의무 ➡ 역할이라는 의미에 책임을 내포

👉 결론적으로 객체 지향에서 시스템은 역할책임을 수행하는 객체로 분할되고 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구성되어 있다.

 

결국 우리는 적절한 객체에게 적절한 책임을 할당하는 것부터 시작을 해야 한다. 이는 곧 객체의 품질이 되고 더 나아가 협력의 품질이 된다.

 

📕 Section 3

객체는 다음과 같은 2가지 덕목을 갖추어야 한다.

1. 객체는 충분히 협력적이어야 한다.

전지전능한 객체(God Object)는 내부의 복잡도에 의해 자멸하고 만다. 객체는 열린 마음을 지니고 다른 객체의 명령에 복종하는 것이 아닌 요청에 응답할 뿐, 어떤 식으로 응답할지는 그 객체의 몫이다.

👉 이 말은 객체가 다른 객체에게 요청을 할 때 What은 알 수 있지만 그 객체의 How는 알 수 없다는 것을 의미한다.

 

2. 객체는 충분히 자율적이어야 한다.

자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제한다. 자율적이기 위해서는 상태행위를 함께 지니고 있어야 한다. 그리고 내부와 외부를 명확히 구분해야 한다. 객체 지향에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장

👉 객체의 사적인 부분(How)은 객체 스스로 관리하고 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야 한다. 위에 말했듯이 객체는 다른 객체가 무엇을 수행하는지 알 수 있지만 어떻게 수행하는지에 대해서는 알 수 없다.

 

 

📕 Section 4

객체들이 협력하기 위해서 의사소통을 해야 하는데 메시지를 통해서만 소통한다.

  • 송신하는 객체(Sender)
  • 수신하는 객체(Receiver)

수신된 메시지를 처리하는 방법은 메서드라고 한다. 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현 또 실행 시간에 따라 메서드를 선택할 수 있다. 이는 프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정하는 절차적인 언어와 확연히 구분된다.

👉 절차 지향에 비해 좀 더 유연한 설계가 가능하게 되는 부분인 것 같다.

 

📕 정리

  • 객체 지향의 목표는 실세계의 모방이 아니라 새로운 세계를 창조하는 것
  • 자율적인 객체란 상태(변수)와 행위 (메서드)를 가지고 있고 내부와 외부가 명확히 구분된다.
  • 객체 지향의 중요한 3가지 개념 : 협력, 역할, 책임
  • 협력 시 메시지를 통해하고 적합한 메서드를 자율적으로 선택
  • 객체 지향의 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것

 

훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 한다.

👉클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다. 즉, 중요한 것은 클래스들의 정적인 관계가 아니라 메시지를 주고받는 객체들의 동적인 관계

 

 

반응형

댓글


loading