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

2023. 5. 28. 18:58북리뷰/객체지향 사실과 오해

728x90

객체지향 프로그래밍이란 현실 속에 존재하는 사물을 최대한 유사하게 모방해 SW내부로 옮겨오는 작업이라고 많이 알고있음.

실세계의 모방이라는 개념은 객체지향의 철학적인 개념을 설명하는데 적합하나, 실제 분석 및 설계를 설명하기에는 적합하지 않음. 실제로 객체와 대응되는 실세계 사물을 발견할 확률이 높지 않다.

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

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

 

# 요청과 응답으로 구성된 협력

대부분 사람들은 큰 문제를 혼자서 해결하기 보다는 다른 사람들의 도움을 받아 해결하는 것을 선호

사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공할 수 있는 사람에게 도움을 요청

하나의 문제를 해결하기 위해 다수의 사람 혹은 역할이 필요함 -> 요청이 또 다른 사람에 대한 요청을 유발 : 요청은 연쇄적으로 발생함

 

요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식과 서비스를 제공. 즉, 다른 사람의 요청에 응답. 응답 역시 요청의 방향과 반대 방향으로 연쇄적으로 전달

 

# 역할과 책임

사람들은 타인과 협력하는 과정 속에 특정한 역할을 부여 받음(손님, 캐시어, 바리스타)

역할 : 어떤 협력 안에서 특정한 사람이 차지하는 책임이나 임무

역할이라는 단어는 의미적으로 책임이라는 개념을 내포(선생님 : 학생을 가르칠 책임)

특정한 역할은 특정한 책임을 암시

 

## 역할 및 책임의 중요한 개념

- 여러 사람은 동일한 역할을 수행할 수 있음

- 역할은 대체 가능성을 의미

- 책임을 수행하는 방법은 자율적으로 선택할 수 있음 : 다형성

- 한 사람이 동시에 여러 역할을 수행할 수 있음

 

# 현실 기능과 객체지향의 대조

- 사람 : 객체

- 요청 : 메시지

- 요청 처리 방법 : 메서드

 

## 객체의 역할(현실 역할 및 책임과 비슷)

- 여러 객체가 동일한 역할을 수행 가능

- 역할은 대체 가능성을 의미

- 각 객체는 책임 수행 방법을 자율적으로 선택

- 하나의 객체가 동시에 여러 역할 수행 가능

 

객체지향 애플리케이션의 윤곽은 역할, 책임 협력이 결정하나, 실제로 협력 참여 주체는 객체임

 

## 객체의 덕목

- 객체는 충분히 협력적이어야. 다른 객체 요청에 귀를 귀울리고, 다른 객체에게 적극적으로 도움을 요청해야

모든 것을 스스로 처리하는 객체는 자멸할 수밖에 없음. 또한 다른 객체 명령에 복종하는 것이 아니라, 요청에 응답하는 것 뿐임.

- 객체는 충분히 자율적이어야. 자기 스스로 원칙에 따라 일하고, 통제해야.

 

# 상태와 행동

객체 사적인 부분은 외부에서 간섭할 수 없도록 차단해야. 다른 객체가 무엇을(what) 수행하는지는 알 수 있어도, 어떻게(how)수행하는지는 알 수 없어야.

상태 : 커피 제조 레시피

행동 : 커피 제조

객체는 상태와 행위를 하나의 단위로 묶는 자율적 존재

 

# 메시지

- 한 객체가 다른 객체에게 요청하는 단위

- 요청 : 전송 , 요청 받음 : 수신

- 메시지 전송하는 객체 = 송신자, 매시지 수신하는 객체 = 수신자 

 

# 메서드

- 수신된 메시지를 처리하는 방법

 

# 객체지향 본질

- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법

- 자율적인 객체 : 상태와 행위를 함께 지니며 스스로 자기 자신을 책임

- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력, 객체는 협력 내에서 정해진 역할 수행, 역할은 관련 책임의 집합

- 객체는 다른 객체와 협력하기 위해 메시지를 전송, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택

 

 

# 클래스

- 클래스를 강조하는 관점은 객체의 캡슐화를 저해, 클래스를 서로 강하게 결합

- 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 앱 구축을 방해함

- 훌륭한 OOP 설계자는 코드를 담는 클래스 관점이 아닌, 메시지를 주고받는 객체 관점으로 사고함

- 중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는가임

- 클래스는 객체들의 협력 관례를 코드로 옮기는 도구에 불과

- 클래스의 구조와 메서드가 아니라, 객체의 역할 책임 협력에 집중해야

 

 

 

728x90

'북리뷰 > 객체지향 사실과 오해' 카테고리의 다른 글

06. 객체 지도  (0) 2023.05.31
05. 책임과 메시지  (0) 2023.05.30
04. 역할, 책임, 협력  (0) 2023.05.30
03. 타입과 추상화  (0) 2023.05.29
02. 이상한 나라의 객체  (0) 2023.05.29