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

Jimin·2024년 2월 14일
0
post-thumbnail

협력하는 사람들

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

역할, 책임, 협력

역할

어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미.

책임

역할은 책임이라는 개념을 내포한다.

협력 ➡️ 특정한 역할 ➡️ 특정한 책임 암시

  1. 여러 사람이 동일한 역할을 수행할 수 있다.
  2. 역할은 대체 가능성 을 의미한다.
  3. 책임을 수행하는 방법은 자율적 으로 선택할 수 있다.
  4. 한 사람동시에 여러 역할을 수행할 수 있다.

역할, 책임, 협력

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

실세계프로그래밍
사람객체
요청메시지
요청 처리 방법메서드

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

협력의 핵심

특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성하는 것.

사람들의 협력과 객체들의 협력의 차이점

사람: 공통의 목표를 달성하기 위해 협력
객체: 애플리케이션의 기능을 구현하기 위해 협력

애플리케이션기능 ➡️ 더 작은 책임으로 분할 ➡️ 책임은 역할을 수행할 수 있는 객체가 수행

시스템

시스템 ➡️ 역할과 책임을 수행하는 객체로 분할

시스템의 기능

객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.

객체의 역할

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

역할유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소이다.


협력 속에 사는 객체

객체지향 애플리케이션의 윤곽을 결정하는 것은 역할, 책임, 협력 이지만,
➡️ 실제로 협력에 참여하는 주체는 "객체" 이다.

객체는 애플리케이션의 기능을 구현하기 위해 존재한다.
➡️ 객체는 다른 객체와의 협력을 통해 기능을 구현하게 된다.

객체지향 애플리케이션의 아름다움을 결정하는 것이 협력이라면, 협력이 얼마나 조화를 이루는지 결정하는 것은 객체이다.
▶️ 결국, 협력의 품질을 결정하는 것은 "객체" 이다.

객체가 가져야할 두 가지 덕목

  1. 객체는 충분히 "협력적" 이어야 한다.
    다른 객체의 요청에 "귀를 기울임" + 적극적으로 도움 요청을 하는 "열린 마음"
    ➡️ 전지전능한 객체 X
  2. 객체는 "자율적" 이어야 한다.

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

객체

객체는 상태와 행동을 함께 지닌 실체이다.

객체의 자율성

  • 객체의 내부와 외부를 명확하게 구분하는 것에서 나온다.
    객체의 사적인 부분은 객체 스스로 관리, 외부에서 간섭 못하도록 차단해야 함.
  • 다른 객체가 무엇을 수행하는 지 알 수 있음.
    WHAT ➡️ O
  • 다른 객체가 어떻게 수행하는 지 알 수 없음.
    HOW ➡️ X

객체의 자율성이란,
자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동할 수 있음을 의미한다.

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

협력과 메시지

객체지향의 세계에서 협력은 메시지를 전송하는 객체와 메시지를 수신하는 객체 사이의 관계로 구성된다.

메서드와 자율성

메서드

객체가 수신된 메시지를 처리하는 방법

자율성

객체지향 프로그래밍절차지향 프로그래밍
메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다.프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정한다.

외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.
➡️ 캡슐화(encapsulation) 개념과 관련이 깊다.


객체지향의 본질

  • 객체지향이란 시스템을 상호작용하는 "자율적인 객체들의 공동체"로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 "상태와 행위"를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 "협력"한다.
    각 객체는 협력 내에서 정해진 "역할"을 수행하며 역할은 관련된 "책임"의 집합이다.
  • 객체는 다른 객체와 협력하기 위해 메시지를 전송하고,
    "메시지"를 수신한 객체는 메시지를 처리하는 데 적합한 "메서드"를 자율적으로 선택한다.

객체를 지향하라

코드를 담는 클래스의 관점 X ➡️ 메시지를 주고 받는 객체의 관점으로 사고의 중심을 전환하는 것 O

어떤 클래스가 필요한가? X ➡️ 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는 가? O

profile
https://github.com/Dingadung

0개의 댓글