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

Byung Seon Kang·2022년 7월 13일

시너지를 생각하라. 전체는 부분의 합보다 크다. - Stephen R.Covey

1. 객체란 무엇인가?


  • 일반적인 정의 : 행동(behavior)과 상태(state)를 가진 실체
  • 차후 행동 + 상태 + 식별자를 가진 실체로 정의한다.

2. 객체지향


객체 지향에서 가장 중요한 3가지 개념
1)협력 : 요청과 응답으로 이루어짐. 해결해줄 수 있는 객체에 요청하고 요청받은 객체는 그 업무를 수행하고 응답하는 형태
2)역할 : 역할은 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미.
3)책임 : 역할에 의해 암시된다.

중요 특징

  • 여러 객체가 동일한 역할을 수행 가능.
    • 즉, 역할은 대체 가능성을 의미. 어떤 객체가 수행하든 문제가 없음.
  • 책임을 수행하는 방법은 자율적으로 선택할 수 있음.
  • 한 사람이 동시에 여러 역할 수행이 가능.
    • 회사에 출근하면 사원, 집에 가면 남편, 아내의 역할을 수행하는 것처럼.

협력 속에 사는 객체

  • 객체는 충분히 협력적이어야 한다.
    • 모든 것을 하려 하는 객체는 복잡도에 의해 자멸
    • 하지만 충분히 협력적이라는 말은 객체의 명령에 따라 수동적으로 동작하는 존재가 아니다.
    • 객체는 그저 요청에 응답할 뿐이다. 어떤 식으로 응답할지는 객체 스스로가 결정.
      • 요청에 응할지 또한 객체 스스로 결정한다.
  • 즉, 객체는 충분히 자율적이어야 한다.

객체지향의 본질

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

오해1. 객체지향의 핵심은 클래스인가? -> X

핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것
중요한 것은 클래스들의 정적인 관계가 아니라 메시지를 주고받는 객체들의 동적인 관계

  • 클래스가 중요하지 않다는 것이 아님. 그저 클래스는 협력에 참여하는 객체를 만드는 데 필요한 구현 매커니즘임. 협력 구조와 책임을 식별하는 것에 비해 상대적으로 덜 중요하다는 것을 말하고 싶음.
  • 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라.

의문점

  • 메세지를 주고받는 객체의 관점과 클래스의 관점이 어떠한 차이를 보이는가.
    • 객체가 생성되고 삭제되는 것들까지 생각해보라는 의미일까?
    • 동적인 것이란 무엇인가

참고

  • 객체지향의 사실과 오해: 역할, 책임, 협력 관점에서 본 객체지향 - 조영호 지음
profile
왜 필요한지 질문하기

0개의 댓글