[객체지향의 사실과 오해] Chapter 1

  • 객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임이라는 설명
    • 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합
    • 하지만 유연하고 실용적인 관점에서의 객체지향 분석, 설계를 설명하기 적합하지 않다.
  • 객체 지향의 목표는 실세계를 모방하는 것이 아니다.
    • 새로운 세계를 창조하는 것이 목표
  • 그렇다면 왜 자꾸 실세계의 모방이라는 비유를 하는 것인가?
    • 상태와 행위를 캡슐화하는 소프트웨어의 객체의 자율성을 설명하는데 효과적이기 때문
    • 목표를 위해 협력하는 사람들의 관계는 메시지를 주고받으며 협력하는 객체들의 관계 설명
    • 객체지향 설계의 핵심 사상인 연결완전성 을 설명하기에 적합한 비유

협력하는 사람들

  • 커피를 시켜 먹는 과정 속에는 손님, 캐시어, 바리스타 사이의 암묵적 협력 관계가 존재
  • 손님, 캐시어, 바리스타라는 역할과 각 역할에 대한 책임이 존재

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

  • 스스로 해결하지 못하는 문제와 마주치면 문제를 해결해줄 수 있는 사람에게 도움을 요청
  • 하나의 문제를 해결하려면 다수의 역할이 필요 → 요청이 연쇄적으로 발생
    • 손님이 캐시어 에게 커피 주문 요청
    • 캐시어는 바리스타에게 커피 제조 요청
  • 요청 받은 사람은 주어진 책임을 다하여 요청에 응답
    • 바리스타는 제조한 커피를 캐시어에게 전달
    • 캐시어는 손님 주문에 응답

역할과 책임, 협력

  • 역할: 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무
    • 책임이라는 개념을 내포하는 단어
  • 특정한 역할은 특정한 책임을 암시
  • 협력에 참여하며 특정한 역할을 수행하는 객체는 역할에 적합한 책임을 수행한다.
    • 여러 객체가 동일한 역할을 수행할 수 있다.
    • 역할은 대체 가능성을 의미한다.
      • 누가 역할을 수행하든 요청자 입장에서는 상관 없다.
    • 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
      • 요청 받은 객체는 요청을 처리하는 방법을 자유롭게 선택할 수 있다.
      • 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력을 다형성 이라고 한다.
    • 한 사람이 동시에 여러 역할을 수행할 수 있다.
  • 시스템 = 역할과 책임을 수행할 수 있는 객체로 분할
  • 시스템의 기능 = 객체 간 연쇄적인 요청과 응답으 흐름으로 구성된 협력으로 구성

협력 속에 사는 객체

  • 협력에 참여하는 주체는 객체
  • 객체는 애필리케이션 기능을 구현하기 위해 존재
  • 객체의 덕목
    1. 협력적 이어야 한다.
      • 다른 객체의 요청에 응답
      • 요청에 응할지 여부도 스스로 결정 가능
    2. 자율적 이어야 한다.
      • 객체는 공동의 목표를 달성하기 위해 협력하지만 스스로 결정과 판단에 따라 행동하는 자율적인 존재
      • 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적
      • 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 자율적

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

  • 객체 = 상태와 행동을 함께 지닌 실체
  • 객체가 협력에 참여하려면 행동을 하는데 필요한 상태도 함께 지니고 있어야 한다는 것
  • 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
    • 객체는 다른 객체가 무엇을 수행하는 지만 알고 어떻게 수행하는지에 대해서는 알 수 없다.
    • 행동에 필요한 상태를 포함하는 동시에 특정한 행동을 수행하는 방법을 스스로 결정해야 함
  • 객체간의 소통 수단은 메시지
    • 한 객체가 다른 객체에게 요청하는 것 = 메시지 전송 → 송신자
    • 한 객체가 다른 객체로부터 요청을 받는 것 = 메시지 수신 → 수신자
  • 객체가 수신된 메시지를 처리하는 것은 메서드
    • 클래스 안에 포함된 함수 또는 프로시저를 통해 구현
    • 객체에 메세지를 전송 → 메시지에 대응하는 특정 메서드 실행
  • 메시지와 메서드의 분리는 객체간 자율성 증진
    • 캡슐화 개념과 관련

객체 지향의 본질

  • 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법
  • 객체 지향은 객체를 지향하는 것
    • 클래스의 구조와 메서드가 아닌 객체의 역할, 책입, 협력에 집중해야 한다.

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus