티스토리 뷰

객체 지향과 인지 능력

인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라보기 때문에 객체 지향 패러다임은 직관적이고 이해하기 쉽다. 이러한 객체 지향은 실존하고 구체적인 개념뿐만 아니라 추상적인 개념도 포함되게 된다. 예를 들어 과거의 결제 내역과 지금 진행 중인 결제 내역을 구분하는 것은 어렵지 않은 일이다.

 

객체를 세분화시키는 행위는 복잡성을 줄여 이해를 높이고자 하는 것이다.

객체, 그리고 이상한 나라

작가는 객체를 설명하기 위해 이상한 나라의 앨리스 이야기를 예를 들어 설명하고 있다.

 

앨리스는 아름다운 정원에 들어가기 위해 자신의 키를 변화시켜야 하는데 변화는 앨리스의 행동 때문에 발생한다. 글을 읽으며 나도 모르게 앨리스의 키는 멤버변수가 될 수 있을 것이고, 키를 변화시키는 행동은 메서드로 표현할 수 있을 것이라는 생각을 가지게 되었다.

 

아직도 클래스의 개념을 벗어나지 못했다.

 

객체의 관점으로 설명하면 앨리스 객체를 다음과 같이 정리할 수 있다.

  • 앨리스의 상태(키, 위치)는 앨리스의 행동으로 인해 변화한다.
  • 앨리스의 키가 작은 경우 커지는 행동을 결정하고, 키가 큰 경우 작아지는 행동을 결정하는 것으로 보아 상태로 인해 행동이 변화할 수 있다.
  • 행동으로 인해 상태 변화가 달라지기 때문에 행동의 순서가 중요하다.
  • 앨리스의 상태가 어떻게 변하든 앨리스는 앨리스로 식별 가능하다.

객체, 그리고 소프트웨어 나라

하나의 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떠한 것이라도 객체가 될 수 있다.

 

객체는 상태, 행동, 식별자로 나타낼 수 있다.

상태

어떤 행동의 결과는 과거의 어떤 행동에 의존하고 있다. 하지만 과거의 행동으로 행동의 결과를 판단하는 것은 매우 어려운 일이고 행동의 결과를 쉽게 예측하기 위해 상태라는 개념을 도입했다.

 

객체로 나타내기 어려운 것들은 단순한 값으로 인식된다. 이러한 값과 객체 간의 관계를 통해 모든 상태를 표현할 수 있다. 이때 객체의 상태를 구성하는 모든 특징들을 프로퍼티(property)라고 한다. 프로퍼티는 변경이 잘 발생하지 않기 때문에 정적이고 프로퍼티 값(property value)는 쉽게 변하기에 동적이다.

 

객체와 객체 간의 의미 있는 관계를 링크라고 한다. 링크가 존재해야만 메시지를 주고받을 수 있다. 객체를 구성하는 단순한 값은 속성(attribute)이라고 한다.

행동

객체는 자율적이며 상태가 저절로 변하지 않기 때문에 객체의 상태를 변화시키는 것은 객체의 자발적 행동뿐이다. 객체의 행동에 의해 객체의 상태가 변하는 것은 부수 효과(side effect)를 초래한다. 따라서 다음과 같이 정의할 수 있다.

  • 객체의 행동은 상태의 영향을 받는다.
  • 객체의 행동은 상태의 영향을 준다.

행동의 부수 효과는 다음과 같다.

  • 객체의 상태를 변화시킨다.
  • 행동 과정 중 협력하는 객체에게 메시지를 보낸다.

객체의 행동을 유발하는 것은 외부로부터 전달된 메시지이지만 객체 상태의 변경은 자율적으로 결정한다. 메시지를 보낸 객체는 해당 객체의 상태가 변하는 것을 전혀 알지 못한다. 이러한 캡슐화는 객체의 자율성을 높이게 되고 협력이 유연하고 간결해진다.

식별자

객체가 식별 가능하다는 의미는 다른 객체와 구분 가능한 프로퍼티가 존재한다는 의미이다. 이 프로퍼티가 식별자이며 모든 객체는 식별자를 가진다. 상태를 통해 같은지 확인하는 것은 동등성이고, 식별자를 통해 같은지 확인하는 것은 동일성을 의미한다.

 

객체 지향 언어에서는 객체의 의미가 모호해질 수 있는데 식별자를 지니는 객체를 참조 객체(reference object), 엔티티(entity)라고 하며 식별자를 가지지 않는 값은 값 객체(value object)라고 한다.

기계로서의 객체

일반적으로 객체의 상태를 조회하는 작업을 쿼리(query)라고 하며, 객체의 상태를 변경하는 작업을 명령(command)이라고 한다.

행동이 상태를 결정한다

상태에 집중하게 되면 다음과 같은 문제가 발생할 수 있다.

  • 상태가 노출되어 캡슐화를 저해시킬 수 있다.
  • 객체를 협력자가 아닌 고립된 섬으로 만든다.
  • 협력이 줄어들기에 재사용성도 줄어든다.

은유와 객체

객체 지향을 현실 세계의 추상화라고 하는데 그 안에는 현실 세계를 모방해서 단순화한다는 의미가 숨어 있다. 하지만 단순 모방이 아니다! 현실 세계와 달리 객체는 자율적으로 동작한다. 다시 말해서 현실 세계에서 수동적인 존재가 소프트웨어 세계에서 능동적일 수 있다. 현실 세계보다 더 많은 일을 하는 특징을 의인화라고 한다.

 

그렇다고 유사성이 아예 없는 것인가? 그렇지 않다! 의미 일부는 전달되고 있고 이를 은유라고 한다. 이러한 은유를 통해 표현적 차이, 의미적 차이를 바탕으로 구조를 쉽게 이해할 수 있다. 이러한 이유로 인해 현실 세계의 도메인을 소프트웨어에 적용해야 한다.

'도서 > 객체지향의 사실과 오해' 카테고리의 다른 글

객체 지도  (0) 2022.08.04
책임과 메시지  (0) 2022.07.29
역할, 책임, 협력  (0) 2022.07.20
타입과 추상화  (0) 2022.06.18
협력하는 객체들의 공동체  (0) 2022.06.16
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
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
Total
Today
Yesterday