본문 바로가기
객체지향

객체지향의 사실과 오해(2-1)

by browoo97 2022. 3. 24.

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

앨리스의 이상한 나라 이야기를 통해 객체의 상태, 행동, 식별자의 개념을 설명해주었다.

상태 - 앨리스의 키, 위치

행동 - 앨리스가 음료를 마시는 행위, 위치 이동

식별자 - 상태가 달리지는 어떠한 행동을 하든 결국 앨리스.

 

상태가 필요한 이유

객체가 앞으로 어떤 반응을 하는가는 그 시점까지의 객체에 어떤 일이 발생했느냐에 따라 좌우된다. 예를 들어 비행기를 탈 때 이전에 비행기표를 예약을 했더라면 앞으로 비행기를 탈 수 있지만 예약을 하지 않았더라면 비행기에 탈 수 없을 것이다.

음료 자판기도 마찬가지이다. 자판기에 넣은 동전을 넣었냐 넣지 않았냐에 따라 음료를 뽑을 지 못 뽑을 지가 달라진다.

일반적으로 과거에 발생한 행동의 이력을 통해 현재 발생한 행동의 결과를 판단하는 방식은 복잡하고 번거로우며 이해하기 어렵다. 따라서 행동의 과정과 결과를 단순하기 기술하기 위해 상태라는 개념을 고안했다.

 

상태와 프로퍼티

상태는 키, 위치 뿐만 아니라 다른 객체와의 연결 여부로도 표현할 수 있다.

예를 들어 앨리스가 음료를 들고 있는 상태를 표현하려면 앨리스는 음료의 식별자 값을 가지고 있으면 된다. 이처럼 객체와 객체 사이의 의미 있는 연결을 링크라고 한다. 객체와 객체 사이에는 링크가 존재해야만 요청을 보내고 받을 수 있다. 결론적으로 모든 객체의 상태는 단순한 값(키,위치)과 객체의 조합으로 표현할 수 있다.

이때 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티라고 한다. 앨리스의 경우 키, 위치, 음료가 앨리스의 프로퍼티가 된다.

일반적으로 프로퍼티는 변경되지 않기 때문에 “정적”이다. 반면 프로퍼티 값은 식 나이 흐름에 따라 변경되기 때문에 “동적”이다.

객체의 프로퍼티는 단순한 값인 속성과 다른 객체를 가리키는 링크라는 두 가지 종류의 조합으로 표현할 수있다.

 

행동

객체가 취하는 행동은 객체 자신의 상태를 변경시킨다.

앨리스가 케이크를 먹는 행위는 앨리스의 키를 작게 변화시키고 케이크의 양을 줄이는 부수 효과를 야기한다.

설명한 것처럼 객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다. - 현재 객체의 상태에 따라 행동의 결과가 달라짐.

상태와 행동의 관계

  1. 객체의 행동은 상태에 영향을 받는다.
  2. 객체의 행동은 상태를 변경시킨다.

객체는 협력에 참여하는 과정에서 자기 자신의 상태뿐만 아니라 다른 객체의 상태 변경을 유발할 수도 있다.

ex) 앨리스가 음료수를 마시면 자신의 키가 작아지는 동시에 앨리스가 먹은 양만큼 음료의 양이 줄어야 한다. 이는 음료를 마시는 행동은 자기 자신뿐만 아니라 음료의 상태 변경도 유발한다.

  1. 객체 자신의 상태변경
  2. 행동 내에서 협력하는 다른 객체에 대한 메세지 전송

상태 캡슐화

현실 세계의 객체와 객체지향 세계의 객체 사이에는 중요한 차이점이 있다.

현실 속에서 앨리스는 스스로 음료를 마시는 능동적인 존재지만 음료는 스스로 아무것도 할 수 없는 수동적인 존재다.

그러나 객체지향의 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재다. 따라서 음료 객체의 양을 줄이는 것은 메세지를 전달받은 음료 자신이어야 한다.

단지 앨리스는 음료의 양이 줄어들 것이라고 믿고 음료에 요청을 전달할 뿐이다. 양을 얼마나 줄일지, 어떻게 줄일 지는 오직 음료의 역할이며, 앨리스는 알 필요도 알 수도 없다.

이것이 캡슐화가 의미하는 것이다. 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.

상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 객체의 자율성을 높인다.

객체의 자율성이 높아질수록 협력은 유연하고 간결해진다. 이것이 상태를 캡슐화해야 하는 이유다.

 

식별자

객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다. 이 프로퍼티를 식별자라고 한다. 모든 객체느는 식별자를 가지며 식별자를 이용해 객체를 구별한다. 또한 반대로 객체가 아닌 단순한 값은 식별자를 가지지 않는다는 것을 의미하기도 한다.

값은 숫자, 문자열, 날짜, 시간, 금액 등과 같이 변하지 않은 양을 모델링한다. 이 값들은 변하지 않기 때문에 불변 상태를 가진다고도 말한다. 값이 같은지 여부는 상태가 같은지를 이용해 판단한다. 값을 이용하여 두 값이 같은지 판단할 수 있는 성질을 동등성이라고 한다.

상태가 변하지 않기 때문에 가능.

하지만 객체는 시간에 따라, 행동에 따라 상태를 변경한다. 따라서 객체는 가변 상태를 가진다고도 말한다. 때문에 객체는 두 객체를 동일하거나 다르다고 판단할 수 있는 프로퍼티를 가지며 두 객체의 상태가 다르더라도 식별자가 같으면 두 객체는 같은 객체로 판단한다. 이처럼 식별자를 기반으로 판단하는 성질을 동일성이라고 한다.

 

동등성 - 상태 값으로 두 값이 같은지 판단 → 상태가 변하지 않기 때문에 가능

동일성 - 식별자를 기반으로 두 객체가 같은 객체인지 판단

 

지금까지 객체의 중요한 특성인 상태, 행동, 식별자에 관해 살펴봤다. 다음은 지금까지 살펴본 객체의 특성을 간략하게 요약한 것이다.

  1. 객체는 상태를 가지며 상태는 변경 가능하다.
  2. 객체의 상태를 변경시키는 것은 객체의 행동이다.
    • 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.
    • 행동의 순서가 실행 결과에 영향을 미친다.
  3. 객체는 어던 상태에 있더라도 유일하게 식별 가능하다.

'객체지향' 카테고리의 다른 글

객체지향의 사실과 오해(3-2)  (0) 2022.03.24
객체지향의 사실과 오해(3-1)  (0) 2022.03.24
객체지향의 사실과 오해(2-2)  (0) 2022.03.24
SOLID 객체지향 - 스프링  (0) 2022.03.24
객체지향의 사실과 오해(1)  (0) 2022.03.24

댓글