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

KIM KYUBIN·2022년 6월 1일
0

OOP

목록 보기
1/7

객체지향의 사실과 오해 - 조영호 저

협력하는 객체들의 공동체

🔵 객체지향의 목표는 실세계를 모방하는 것이 아니다.
➡️ 오히려 새로운 세계를 창조하는 것이다.

협력하는 사람들

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

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

🔵 요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공한다.
➡️ 즉, 다른 사람의 요청에 응답(response)한다.

🔵 요청과 응답을 통해 다른 사람과 협력(collaboration)할 수 있는 능력은 인간으로 하여금 거대하고 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있게 만든다.

역할과 책임

🔵 사람들은 다른 사람과 협력하는 과정 속에서 특정한 역할(role)을 부여받는다.

🔵 특정한 역할은 특정한 책임(responsibility)을 암시한다.

역할, 책임, 협력

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

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

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

🔵 시스템은 역할책임을 수행하는 객체로 분할되고 시스템의 기능은 객체 간의 연쇄적인 요청응답의 흐름으로 구성된 협력으로 구현된다.

🔵 객체지향 설계라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다.

🔵 객체의 역할

  1. 여러 객체가 동일한 역할을 수행할 수 있다.
  2. 역할은 대체 가능성을 의미한다.
  3. 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
    🧩 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력
    ➡️ 다형성(polymorphism)
  4. 하나의 객체가 동시에 여러 역할을 수행할 수 있다.

협력 속에 사는 객체

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

🔵 객체가 갖춰야 할 덕목

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

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

🔵 흔히 객체를 상태(state)행동(behavior)을 함께 지닌 실체라고 정의한다.
➡️ 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다는 것을 의미한다.

🔵 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로 나온다.
➡️ 객체의 사적인 부분은 객체 스스로 관리하고 외부에서 일체 간섭할 수 없도록 차단해야 하며, 객체의 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야 한다.

🔵 객체지향에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장한다.

협력과 메시지

🔵 풍부한 메커니즘을 이용해 요청하고 응답할 수 있는 인간들의 세계와 달리 객체지향의 세계에서는 오직 한 가지 의사소통 수단만이 존재한다. ➡️ 메시지

🔵 한 객체가 다른 객체에게 요청하는 것 ➡️ 메시지를 전송한다

🔵 다른 객체로부터 요청을 받는 것 ➡️ 메시지를 수신한다

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

메서드와 자율성

🔵 수신자는 먼저 수신된 메시지를 이해할 수 있는지 여부를 판단한 후 미리 정해진 자신만의 방법에 따라 메시지를 처리한다. ➡️ 객체가 수신된 메시지를 처리하는 방법을 메서드(method)라고 부른다.

🔵 메서드는 클래스 안에 포함된 함수 또는 프로시저를 통해 구현된다.
➡️ 어떤 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 특정 메서드가 실행된다.

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

객체지향의 본질

객체를 지향하라

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

profile
상상을 현실로 만들기 위해 노력하는 개발자

0개의 댓글