본문 바로가기
TechBooks

[Programming] 객체지향의 사실과 오해 #2장

by 꿈나무 김땡땡 2020. 6. 30.

책 소개

제목 : 객체 지향의 사실과 오해

저자 : 조영호

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=60550259

 

객체지향의 사실과 오해

위키북스 IT Leaders 시리즈 23권. 객체지향이란 무엇인가? 이 책은 이 질문에 대한 답을 찾기 위해 노력하고 있는 모든 개발자를 위한 책이다.

www.aladin.co.kr

 

2장. 이상한 나라의 객체

"객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화 하는 문제다."
- 레베카 워프스브록

 

객체 지향과 인지 능력

  • 인간이 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물인다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적 사물까지도 객체로 인식할 수 있게 한다.
  • 객체란 인간이 분명하게 인지, 구별할 수 있는 물리적 또는 개념적 경계를 지닌 어떤 것이다.

앨리스 객체

  • 앨릭스가 물을 마시면 키가 작아진다고 하자.
  • 앨리스에게는 '행동(Behavior) / 상태(State) / 식별자(Identity)'가 있다.
  • 물을 마시는 행동이 앨리스의 상태(키)를 변화 시킨다.
  • 앨리스의 특징
    1. 앨리스는 상태를 가지며, 상태는 변경 가능하다.
    2. 앨리스의 행동이 상태를 변경 시킨다.
      (행동의 결과는 상태에 의존적이며, 행동의 순서가 결과에 영향을 미친다.)
    3. 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다.

1. 상태

  • 상태를 이용하면 과거 모든 행동 이력을 설명하지 않아도 행동의 결과를 예측/설명할 수 있다.
  • Property : 객체의 상태를 구성하는 모든 특징. dynamic
  • Property Value : 객체가 갖는 값. static
  • Link : 객체와 객체 사이의 의미 있는 연결. 객체-객체 사이에 링크가 존재해야만 요청을 보내고 받을 수 있다.

2. 행동

  • 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다.
  • 행동 내에서 협력하는 다른 객체에 '메시지'를 전송할 수 있다.
    • 단, 메시지(요청)에 반응할지는 메시지를 받은 객체가 자율적으로 결정한다. >> 상태 캡슐화와 관련
  • 상태 캡슐화 : 객체는 상태를 캡슐 안에 검춰둔 채 외부로 노출하지 않는다.
    객체가 외부에 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동 뿐이다.

3. 식별자

  • 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.
  • 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.

 

기계로서의 객체

  • Query (쿼리) : 객체의 상태 조회
  • Command (명령) : 객체의 상태 변경
  • 객체에 접근할 수 있는 유일한 방법은 객체가 제공하는 행동 뿐이다.
    객체 내부를 열어서 상태에 직접 접근하지 않는다. (객체의 캡슐화)
  • 각 객체는 메시지 전송을 통해 협력한다. (link가 선행 되어야 한다.)

 

행동이 상태를 결정한다.

상태를 먼저 결정하고 행동을 나중에 결정한다면?

  1. 상태를 먼저 결정하면 캡슐화가 저해된다.
  2. 객체를 협력자가 아닌 고립된 섬으로 만든다.
  3. 객체의 재사용성이 저하된다.

 

  • 객체지향 설계는 애플리케이션에 필요한 협력 -> 협력에 필요한 행동 -> 행동을 수행할 객체 선택 하는 방식으로 수행된다.
  • 협력 안에서 객체의 행동은 결국 객체가 협력에 참여하며 완수하는 책임을 의미 -> 어떤 책임이 필요한가를 결정하는 과정이 핵심
  • 책임-주도 설계(Responsibility-Driven Design, RDD) : 협력이라는 문맥 안에서 객체의 행동을 생각하도록 도와 응집도 높고 재사용 가능한 객체를 만든다.

 

 

 

 

댓글