Search
📖

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

1. Intro

객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임
현실속에 존재하는 사물을 최대한 유사하게 모방하여 소프트웨어 내부에 옮겨오는 작업
소프트웨어는 실세계의 투영
객체는 현실세계에 존재하는 사물의 추상화
철학적인 개념으로 설명하는데 적합함. 메세지를 주고 받고 공동의 목표를 위해 협력하는 객체의 관계를 설명하는데 적합
그러나 실용적인 관점에서 객체지향 분석,설계를 설명하는데는 적합하지 않음
의인화
음료라는 객체가 동작하는 원리?
소프트웨어 세계에서는 음료 객체가 자신의 상태를 스스로 변경시킴
현실 세계에서는 사람이 직접 음료의 상태를 변경시킴

2. 협력하는 사람들

2.1 기본 개념

협력, 역할, 책임
예시)
협력: 커피 주문
역할: 손님, 캐시어, 바리스타
책임: 주문하기, 주문받기, 커피제조

2.2 협력 (요청과 응답으로 구성된 협력)

협력은 요청과 응답으로 이루어짐
하나의 문제 해결에는 다수의 역할이 필요함 → 요청은 연쇄적임

2.3 역할과 책임

역할은 책임이라는 단어를 내포함
역할 하나에 여러개의 책임이 존재 가능
특징
다수의 사람이 동일한 역할을 수행 가능
역할은 대체가능성을 의미
책임을 수행하는 방법은 자율적으로 선택 가능 - 다형성
한사람이 동시에 여러 역할을 수행 가능
그외 논의 내용

3. 역할, 책임, 협력

3.1 기능 구현을 위해 협력하는 객체들

객체 (사람)
메시지 (에이전트의 요청)
메서드 (에이전트가 요청을 처리하는 방법)

3.2 역할과 책임을 수행하며 협력하는 객체들

역할은 협력에 참여하는 객체에 대한 일종의 페르소나이다
역할은 관련성 높은 책임의 집합
객체의 역할의 특징
여러 객체가 동일한 역할을 수행 가능
역할은 대체 가능성을 의미
각 객체는 책임을 수행하는 방법을 자율적 선택
하나의 객체가 동시에 여러 역할을 수행할 수 있음
역할과 책임은 다형성과 깊은 연관성을 가짐

4. 협력속에 사는 객체

4.1 기본 개념

실제 협력에 참여하는 주체는 객체
협력의 품질은 객체의 품질
객체의 필요 조건 → 협력적 , 자율적
다른 객체로부터 요청이 들어오면 자체적으로 판단하여 응답 여부 결정

4.2 상태와 행동을 함께 지닌 자율적인 객체

객체는 상태행동을 함께 지닌 실체
어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지님
객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재
객체는 다른 객체가 무엇(what)을 수행 하는지는 알 수 있지만 어떻게(how) 수행 하는지는 알 수 없음.

4.3 협력과 메세지

메시지는 객체지향 세계에서 가능한 유일한 의사소통 수단 (외부의 요청이 무엇인지를 표현)
객체지향 세계에서 협력은 메시지를 전송하는 객체와 메시지를 수신하는 객체 사이의 관계로 구성
송신자(sender): 메세지를 전송하는 객체
수신자(receiver): 메세지를 수신하는 객체

4.4 메서드와 자율성

메세지와 메서드의 분리는 객체의 협력에 참여하는 객체들간의 자율성을 증진 시킴. 캡슐화
메서드: 객체가 수신된 메시지(요청)를 처리하는 방법
메세지: 외부의 요청이 무엇 인지를 표현
메세지를 수신한 객체가 실행 시간(runtime)에 메서드를 선택할 수 있다는 점은 다른 프로그래밍 언어와 객체지향 프로그래밍 언어를 구분 짓는 핵심적인 특징 중 하나이다. 이것은 프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정하는 절차적인 언어와 확연히 구분되는 특징이다.

5. 객체지향의 본질

객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
자율적인 객체란 상태행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는데 적합한 메서드를 자율적으로 선택한다.
객체를 이용해서 시스템을 분할하는 방법이다 협력, 역할, 책임을 통해서 어플리케이션의 윤곽을 결정한다. 이때, 협력을 참여하는 주체는 객체다. 부연 개념으로, 메시지와, 메서드가 있다. 핵심은 적절한 책임을 수행하는 역할간의 유연하고 견고한 협력관계를 구축하는 것이다.

5.1 객체를 지향하라

클래스가 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성요소이지만 객체 그 자체가 아니다.
객체지향의 핵심은 클래스가 아니다. 클래스는 구현 매커니즘에 불과함
적절한 책임을 수행하는 역할간의 유연하고 견고한 협력관계를 구축하는 것이다.
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라. 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.