본문 바로가기
  • 1+1=3
독서/개발관련

[객체지향의 사실과 오해] 2장 - 이상한 나라의 객체

by 여스 2021. 12. 23.
반응형

39 ~71페이지까지 읽음.

 

 

이상한 나라의 앨리스에서 앨리스가 어떤 음료를 바시거나 케이크를 먹거나 하면 키가 커지거나 목이 길어지거나 한다.

즉, 앨리스가 하는 행동에 따라 앨리스의 상태가 변하게 된다. 다시 말하면, 앨리스가 한 행동의 결과는 앨리스의 상태의존적이다.

 

객체는 무엇인가

객체는 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 효과적이다. 

 

상태

비행기 탑승여부는 과거에 항공권을 발권하는 행위가 발생했는지 여부에 따라 달라진다.

즉 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.

그러나 과거에 어떤 행동을 했는지 기억하기란 쉽지 않다. 따라서 비행기표를 보고 알 수 있다.

즉, 항공권의 발권 상태를 보고 비행기탑승여부를 알 수 있다. 

즉, 상태를 이용하면 객체의 행동방식을 이해할 수 있다.

 

다시 정리: 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.

여기서, 정적, 동적이란??? 앨리스란 객체가 있고, 키, 위치란 프로퍼티가 있다. 키는 변하지 않지만, 위치는 앨리스가 이동하면 바뀐다. 

암튼 중요한 건, 객체지향의 기본사상은 상태와 상태를 조작하기 위한 행동을 하나의 단위로 묶는것.

 

행동

객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다.

앨리스가 케이크를 먹는 행위를 하면, 키가 변하게 됨. 

 

-협력과 행동

또한, 객체는 협력에 참여하는 과정에서 자기 자신의 상태뿐 아니라 다른 객체의 상태 변경도 유발한다.

앨리스가 음료를 마시면, 키가 작아지는 동시에 마신만큼 음료수란 객체의 양도 준다.

즉, 객체의 행동은 객체 자신의 행동을 변경시키면서, 행동 내에서 협력하는 다른 객체에 대한 메시지도 전송한다.

 

-상태 캡슐화

현실세계에서 음료수는 스스로 양을 줄일 수 없지만, 객체지향에서 음료 양을 줄이는 것은 음료수 객체 자기 자신이어야 한다. 객체는 능동적이어야 하니까! 여기서 음료 양이 얼마나 줄어들지는 음료수객체 자기가 결정할 사항이며, 앨리스는 음료수에게 '나 음료수 마셨으니까 음료수 요청줄어들거라 믿고 요청'을 할 뿐이다. 

따라서, 앨리스는 얼마나 음료가 줄어들지 모르게 된다. 음료수객체는 상태를 외부에 노출시키지 않는다. 이렇게 협력에 참여하는 객체들의 자율성이 높아질수록 협력이 단순화되고 유연해진다. 이것이 캡슐화의 이유이다.

 

-식별자

9살짜리 남자 키130센치 라는 특성을 가지고 있는 남자아이 두명이 있다. 둘은 다른 아이다.

식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티이다.

컴터에선 객체와 값 모두 클래스로부터 탄생되기에, 둘을 구분하기 위해 객체는 참조객채(reference object) 또는 엔티티(entity)라 하고, 값 객체(value object)는 식별자를 가지지 않는 값을 가리킨다.

 

행동이 상태를 결정한다

객체의 행동은 객체가 협력에 참여하는 유일한 방법이다. 따라서 객체가 적합한지를 결정하는 것은 그 객체의 상태가 아니라 행동이다.

객체지향 설계는 앱에서 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행된다. 협력 안에서 객체의 행동은 결국 객체가 협력에 참여하면서 완수해야 할 책임을 의미한다. 따라서 어떤 책임이 필요한가를 결정하는 과정이 전체 설계를 주도해야 한다.(= 책임주도 설계)

반응형

댓글