Taking baby-developer steps

[객체지향의 사실과 오해] 2. 이상한 나라의 객체 -1 객체는 상태를 가진다. 본문

CS 지식/객체지향

[객체지향의 사실과 오해] 2. 이상한 나라의 객체 -1 객체는 상태를 가진다.

Surin Lee 2023. 10. 25. 23:02

이번 장은 "이상한 나라의 앨리스"이야기의 한 부분을 인용해, 해당 부분에서 "앨리스"라는 객체가 지닌 "상태"와 "행동"이 어떻게 연관되어있고 의존적인지를 이해시켜준다. 이 앨리스 비유에서 가지는 앨리스의 특징은 다음과 같다.

  • 앨리스는 상태(키 120cm)를 가지며 상태는 변경 가능하다.
  • 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다.(이야기 속 버섯 베어물기, 물마시기, 케이크 먹기)
    • 행동의 결과(물마시기)는 상태에 의존적(원래 키(120이라는 상태)에서 0.5배가 된다)이며 상태를 이용해 서술할 수 있다.
    • 행동의 순서가 결과에 영향을 미친다.(앨리스가 여러가지의 문을 거쳐서 정원에 도착하는데, 각 문의 크기가 제각각이라 각 문의 크기에 알맞은 상태가 되려면 행동의 순서가 중요하다)
  • 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다.

위 앨리스의 특징들은 객체의 중요한 공통점과 몇가지가 유사하다.


 

사람은 태어난 지 얼마 안 된 시점 부터 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지한다.

하나의 단위로 인식할 수 있고 다른 사물과 구분할 수 있는 모든 것들이 모여 객체의 스펙트럼을 형성한다.

물리적 객체(자동체, 전봇대, 장미)와 개념적 객체(어제의 입금내역과 오늘의 출금내역, 어제의 주문 내역 등)를 쉽게 각각 구분할 수 있다.객체지향 패러다임의 목적은 현실세계의 모방이 아닌, 현실 세계 기반으로 새로운 세계를 창조하는 것이다.

인지 능력 안에서 개수를 셀수 있고, 다른 사물과 구분 되며, 생성 시점을 알 수 있고, 독립적인 하나의 단위로 인식할 수 있는 모든 사물은 객체다.

 

객체의 다양한 특성을 효과적으로 설명하기 위해, 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는게 좋다.

이 책에서는 객체를 다음과 같이 정의한다,

  • 객체는 식별 가능한 개체 또는 사물이다.
  • 구체적 사물(자동차, 찻잔)일 수 있고, 추상적 개념(어제의 주문, 오늘의 날씨차트)일 수도 있다.
  • 변경가능한 상태, 특징적인 행동, 구별가능한 식별자를 가진다.
  • 객체는 저장된 상태와 실행 가능한 코드로 구현된다.

- 상태는 왜 필요한가?

 객체가 주변 환경과 상호작용에 어떻게 반응하는 가가 그 시점까지 객체에 어떤 일이 발생했느냐에 좌우된다. 어떤 행동의 결과는 과거 어떤 행동들이 일어났었느냐에 의존한다. ("파인애플을 먹기" 전에 "껍질을 깠느냐"에 따라 행동(파인애플 먹기)의 만족도가 달라지듯이) 그러나, 현재 발생한 행동의 결과를 보기 위해 과거에 발생한 모든 행동의 이력을 보는 것은 번거롭고 복잡하다.  

 상태를 이용하면 과거 모든 행동 이력을 보지 않고도 행동의 결과를 쉽게 예측, 설명 할 수 있다. 앨리스가 이전에 어떤 행동을 했는지를 다 살펴보지 않아도, 현재 키(상태)와 문의 높이(상태) 2가지만 알면 "문을 통과한다"(행동)의 성공 여부를 알 수 있다. 상태를 이용하면 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

 

- 상태와 프로퍼티

 그러나 세상에 존재하는 모든 것들이 객체인 것은 아니다(충격!). 분명하게 인식 할 수 있으나, 객체의 영역에 포함시킬 수 없는 것들도 존재한다. 앨리스의 '키'나 '위치'는 객체가 아니다. 문이 열려있는지 '여부'나 토끼가 달려가는 '속도' 역시 객체가 아니다. 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓 처럼 단순한 값들은 그 자체로 독립적인 의미를 가지기보다는 다른 객체의 특성을 표현하는 데 사용된다.

 때로는 객체를 사용해 다른 객체의 상태를 표현해야 할 때도 있다. 모든 객체의 상태는 단순한 값(키 120)과 객체의 조합(음료 객체 : 양 500ml)으로 표현 할 수 있다. 객체의 상태를 구성하는 모든 특징을 프로퍼티(property)라고 한다. 일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 정적이다. 반면 프로퍼티 값(property value)은 시간이 흐름에 따라 변경되기 때문에 동적이다. 앨리스가 마시면 음료객체의 양(value)는 줄어든다.

 혹은 앨리스가 더이상 음료가 필요없어서 버릴 수도 있다. 객체와 객체 사이의 의미 있는 연결을 링크(link)라고 한다. 객체 사이에 링크가 존재해야만 요청을 보내고 받을 수 있다. 즉, 객체의 링크를 통해서만 메시지를 주고받을 수 있다. 링크는 한 객체가 다른 객체의 식별자를 알고 있는 것으로 표현된다.

 링크와는 달리, 객체를 구성하는 단순한 값은 속성(attribute)이라고 한다. 앨리스의 키나 위치는 단순한 값으로 표현 되기에 속성이다.

이 책에서는 객체의 '상태(status)'를 다음과 같이 정의한다.

  •  상태는 특정 시점에 객체가 가지고 있는 '정보'의 '집합'이다. 객체의 구조적 특징을 표현한다.
  •  객체의 상태정적인 프로퍼티(변경되지 않고 고정되는 값)동적인 프로퍼티 값(시간의 흐름에 따라 변경되는 값)으로 구성된다.
  • 객체의 프로퍼티단순한 값(속성, attribute)과 링크(다른 객체를 참조하는 값)로 구분될 수 있다.

객체는 자율적이다. 그러므로 서로 다른 객체가 직접적으로 접근 및 상태를 변경할 수 없다. 자율적인 객체는 스스로 자신의 상태를 책임져야한다. ->따라서 객체가 다른 객체에게 영향을 주기 위해(간접적으로 상태를 변경) "행동"한다. 

------------------------------------------------------------------------------------

 2장에서는 많은 사람들에게 친숙한 루이스 캐롤의 "이상한 나라의 앨리스"의 이야기와 삽화가 나온다. 이 생생한 비유들을 통해 저자는 독자가 최대한 이미지를 그려가며 "객체"의 개념과 구성 요소들(상태, 행동, 식별자)을 이해할 수 있게 도왔다. 

 생각보다 한장 한장 생각할 거리들이 많아 다른 책에 비해 페이지가 금방 넘어가는 책은 아닌것 같다. 오히려 책 분량 자체는 300페이지가 안되서 짧다고 생각했지만 정말 알짜배기 내용들로 한 페이지 한페이지가 담겨있다는 것을 느꼈다. 

욕심 내지 않고 천천히 곱씹어 가면서 내용을 정리하기 위해 2장에서의 내용을 나누어 읽고 정리하며 포스팅을 이어가려고 한다.

솔직히 지난 1장을 읽고서, 협력을 위한 객체(클래스가 아닌!)를 조금이나마 이해했고, 코드에 적용해 봤을 때 꽤나 만족스러웠다. 이 책을 읽으며 현재 진행하고 있는 자바 배우기용 프로젝트에서 "객체"에 대한 고민이 깊어지고 있음을 느꼈다.

 

 

Comments