객체지향의 사실과 오해-5 행동

상태와 행동

Posted by Warner on September 2, 2021

객체의 행동이란?

행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.
행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.
객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.

상태와 행동

객체의 상태는 스스로 변하지 않습니다 행동에 의해서 변화됩니다.

객체의 행동에 의해서 상태가 변화된다는 것은 행동이 부수 효과(side effect)를 초래 한다는 것을 의미한다.

따라서 상태와 행동 사이에는 다음과 같은 관계가 성립된다.

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

  • 객체의 행동은 상태를 변경 시킨다.

반대로 상태라는 개념을 이용해 행동을 다음의 두가지 관점에서 서술할 수 있다.

  • 상호작용이 현재의 상태에 어떤 방식으로 의존하는가

  • 상호작용이 어떻게 현재의 상태를 변경시키는가

앨리스 이야기로 돌아가서 문을 통과하는 행동을 상태 관점에서 설명해 보자.

  • 앨리스의 가 40센티미터 이하라면 문을 통과할 수 있다.

  • 문을 통과한 후에 앨리스의 위치는 아름다운 정원으로 바뀌어야 한다.

협력과 행동

어떤 객체도 섬이 아니다. 객체는 자신에게 주어진 책임을 완수하기 위해 다른 객체를 이용하고 다른 객체에게 서비스를 제공한다.

객체의 행동은 두가지 관점에서 부수효과를 명확하게 서술해야 한다.

  • 객체 자신의 상태 변경

  • 행동 내에서 협력하는 다른 객체에 대한 메시지 전송

상태 캡슐화

현실과 객체지향세계에는 중요한 차이가 있다.

현실에서는 앨리스는 스스로 음료를 마시고 음료의 양을 변경시킨다.

객체지향세계에서는 앨리스가 음료에게 메시지를 보내고 음료 스스로가 결정해 양을 변화시킨다.

object5.PNG

메시지를 보면 앨리스에게 drinkBeverage()
음료에게 drunken(quantity)가 전달된다.
두메시지를 보고 앨리스의 키가 줄어든다거나 음료의 양이 줄어든다는 상태변경을 예상할 수있겠는가?

메시지 송신자는 수신자의 상태를 전혀 알지 못한다.

이것이 캡슐화이다.
객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출 하지 않는다.
객체가 외부로 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동 뿐이다.

결과적으로 **상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 **자율성을 높이고 협력을 단순하고 유연하게 만든다.
이것이 상태를 캡슐화해야 하는 이유다.