협력하는 객체들의 공동체


객체지향의 목표는 실세계를 모방하는 것이 아니라, 새로운 세계를 창조하는 것. 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라, 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것


협력하는 사람들

  1. 커피 공화국의 아침
  2. 카페테리어에서 커피를 주문하고 받는 과정에는 손님, 캐시어, 바리스타 사이의 암묵적인 협력 관계가 존재
  3. 커피 주문이라는 협력에 참여하는 모든 사람들은 각자 맡은 바 역할과 책임을 다하고 있음
  4. 요청과 응답으로 구성된 협력
  5. 사람들은 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공해줄 수 있는 사람에게 도움을 요청
  6. 요청은 연쇄적으로 발생
  7. 요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공, 즉 요청에 응답
  8. 우리는 요청과 응답을 통해 다른 사람과 협력하여 문제를 해결
  9. 역할과 책임
  10. 역할은 협력 안에서 차지하는 책임이나 임무를 의미
  11. 특정한 역할은 특정한 책임을 암시
  12. 사람들은 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행

    • 여러 사람이 동일한 역할을 수행할 수 있음
    • 역할은 대체 가능성을 의미
    • 책임을 수행하는 방법은 자율적으로 선택할 수 있음(다형성)
    • 한 사람이 동시에 여러 역할을 수행할 수 있음

역할, 책임, 협력

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

    • 사람: 객체
    • 에이전트의 요청: 메시지
    • 에이전트가 요청을 처리하는 방법: 메서드
  2. 역할과 책임을 수행하며 협력하는 객체들

    • 협력에 참여하는 각 개인은 책임을 수행하기 위해 다른 사람에게 도움을 요청하기도 하며, 이를 통해 연쇄적인 요청과 응답으로 구성되는 협력 관계가 완성
    • 애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행
    • 적절한 객체에게 적절한 책임을 할당해야 함
    • 역할은 관련성 높은 책임의 집합

협력 속에 사는 객체

협력 공동체의 일원으로서 객체

  1. 객체는 충분히 ‘협력적’이어야 함

    • 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이며, 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정함
  2. 객체는 충분히 ‘자율적’이어야 함

    • 객체들은 공동의 목표를 달성하기 위해 협력에 참여하지만 자신의 행동을 스스로 결정하고 책임짐

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

  1. 객체는 협력에 참여하기 위해 어떤 행동을 해야 하고, 그 행동을 하는 데 필요한 상태도 함께 지니고 있음
  2. 객체는 객체의 내부와 외부를 명확하게 구분하여 자율성을 갖춤
  3. 객체지향 개발에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장

협력과 메시지

  1. 객체지향의 세계에서는 오직 한 가지 의사소통 수단인 ‘메시지’를 이용
  2. 객체는 협력을 위해 다른 객체에게 메시지를 전송하고 다른 객체로부터 메시지를 수신 함

메서드와 자율성

  1. 메서드(객체가 수신된 메시지를 처리하는 방법)
  2. 어떤 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 특정 메서드가 실행
  3. 메시지와 메서드의 분리는 객체들 간의 자율성을 증진시킴(객체는 메시지에 응답하기 위해 자신만의 자율적인 방법을 택할 수 있음) cf) 캡슐화

객체지향의 본질

  1. 객체를 지향

    • 클래스는 객체지향의 핵심을 이루는 중심 개념은 아님
    • 지나치게 클래스를 강조하는 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시키는 문제가 있음
    • 객체지향 설계를 위해서는 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환해야 함
    • 객체의 역할, 책임, 협력에 집중

참고