티스토리 뷰

728x90
  • 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다.
  • 협력에 참여하는 모든 객체들은 역할과 책임을 다하고 있다.
  • 객체지향의 핵심은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다.

 

역할, 책임, 협력

역할
  • 협력 안에서 차지하는 책임이나 의무를 의미한다.
  • 관련성 높은 책임의 집합이다.

 

협력
"어떤 객체도 섬이 아니다" - 워드 커닝험
  • 객체는 역할과 책임을 다하는 동시에, 다른 객체와 협력한다.
  • 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성되어 있다.
  • 협력이 얼마나 조화를 이루는지는 객체가 결정한다.
  • 협력의 품질을 결정하는 것은 객체의 품질이다.

 

객체의 역할
  1. 여러 객체가 동일한 역할을 수행할 수 있다.
    • 객체를 사용하는 다른 객체의 입장에서는, 어떤 객체가 자신의 요청에 응답하는지는 중요하지 않다. 
  2. 역할은 대체 가능성을 의미한다.
    • 대체 가능한 역할은 다형성과도 깊이 연관되어 있다.
  3. 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
    • 다른 객체의 요청을 받아서 어떻게 처리할지는 객체마다 다를 수 있으며, 자율적으로 선택한다.
  4. 하나의 객체가 동시에 여러 역할을 수행할 수 있다.

 

 

협력 속에 사는 객체

객체의 두 가지 덕목
  1. 충분히 협력적이어야 한다
    • 객체는 다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움을 요청해야 한다.
    • 다른 객체의 요청에 따라 행동하는 수동적인 존재를 의미하는 것이 아니다.
    • 다른 객체의 요청에 복종하는 것이 아닌, 응답할 뿐이다. 요청에 응답할지, 어떤 방식으로 응답할지는 객체 스스로 결정한다.
  2. 충분히 자율적이어야 한다
    • 자신의 행동을 스스로 결정하고 책임진다.
    • 다른 객체의 요청에 따르지만, 자신의 판단에 따라 결정하고 행동한다.

 

상태(state)와 행동(behavior)을 함께 지닌 자율적인 객체
  • 객체가 협력에 참여하는 과정 속에서 스스로 판단하고 결정하는 자율적인 존재가 되기 위해서는, 필요한 행동과 상태를 함께 지니고 있어야 한다.
  • 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
  • 자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동한다. 
  • 즉, 객체는 다른 객체가 '무엇(what)'을 수행하는지는 알 수 있지만 '어떻게(how)' 수행하는지는 알 수 없다.

 

협력과 메시지
  • 객체 간의 유일한 의사소통 수단을 메시지라고 한다.
  • 한 객체가 다른 객체에게 요청하는 것을 "메시지를 전송한다"고 말하고 다른 객체로부터 요청을 받는 것을 "메시지를 수신한다"고 말한다.
  • 이때 메시지를 전송하는 객체를 송신자(sender)라고 부르고 메시지를 수신하는 객체를 수신자(receiver)라고 부른다.
  • 협력은 메시지를 전송하는 객체와 메시지를 수신하는 객체 사이의 관계로 구성된다.

 

메서드와 자율성
  • 객체가 수신된 메시지를 처리하는 방법을 메서드(method)라고 부른다.
  • 메시지와 메서드의 분리는 객체들 간의 자율성을 증진시킨다.
    • ex: 바리스타에게 커피 제조를 요청한 캐시어는 커피가 제조될 것이라고 기대하지만, 커피를 제조하는 구체적인 방법에 관해서는 관여하지 않는다. 바리스타는 자신만의 자율적인 방법으로 커피를 제조한다.
  • 외부의 요청을 표현하는 메시지와 요청을 처리하는 방법인 메서드를 분리하는 것은 캡슐화(encapsulation)와도 깊이 관련되어 있다.

 

 

객체지향의 본질

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

 

클래스를 지향하는 것이 아닌, 객체를 지향하라
  • 클래스를 강조하는 프로그래밍 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시킨다.
  • 중요한 것은 어떤 클래스가 필요한가가 아닌 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.
  • 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다.
  • 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라.
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함