읽은 책 정리/객체지향의 사실과 오해

02 이상한 나라의 객체

포포015 2021. 9. 11. 18:05

두번째 장은 이상한 나라의 앨리스의 관한 내용으로 이야기를 써 내려간다.

 

앨리스는 정원으로 통하는 문을 통과하기에 적당한 상태로,

자신의 키를 변화 시키는 '음료를 마셔라' 라는 행동으로 키가 변한다

 

* 앨리스의 상태를 결정하는것은 행동이지만, 행동의 결과를 결정하는것은 상태다.

//(행동간 순서가 중요하다는것을 의미 EX) 앨리스 키가 작아진다 -> 문의 크기에 맞다 통과된다.)

 

  • 앨리스는 상태를 가지며, 상태 변경 가능하다.
  • 상태를 변경시키는것은 앨리스의 행동이다
  • 앨리스는 어떤 상태에 있더라도 유일하게 식별이 가능하다.

 

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

(상태를 이용하면 과거에 얽매이지 않고, 현재를 기반으로 객체의 행동방식을 이해할수있다.)

예를 들자면, 비행기 탑승 가능 여부는 항공권의 발권상태를 보고 예측할수있다

상태를 이용하면, 과거의 모든 행동 이력을 설명하지 않고도 행동 결과를 쉽게 예측하고 설명할수있다.

 

단순한 값들은 그자체로 독립적인 의미를 가지기보단, 다른 객체의 특성을 표현하는데 사용된다.

예를 들자면, 숫자, 문자열, 양 ,속도, 시간, 날짜, 참/거짓과 같은 앨리스의 위치는 문자열로 표현할수있다.

(단순한 값은 객체가 아니지만, 객체의 상태를 표현하기 위한 중요한수단이다.)

 

객체와 객체 사이 의미 있는 연결을 링크 라고한다.

(링크는 객체가, 다른객체를 참조할수 있다는것을 의미하며 일반적으로

이것을 한 객체가 다른객체의 식별자를 알고 있는것으료 표현된다.)

 

객체는 자율적인 존재라는 점을 명심

(객체지향 세계에서 객체는 다른객체의 상태에 직접적으로 접근할수도, 상태를 변경할수도없다.)

자율적인 객체는 스스로 자신의 상태를 책임져야한다.

(외부에서 접근이 필요하다면 객체 내부에서 외부에서 접근해서 상태를 변경할수있는 방법을마련해야한다.)

객체는 스스로 행동에 의해서만 상태가 변경되는것을 보장함으로써 객체의 자율성을 유지한다.

(객체의 상태는 저절로 바뀌지않는다, 객체가 취하는 행동으로 인해 자신의 상태를 변경시킨다.)

객체는 수신된 메시지에 따라 적절히 행동하면서 협력에 참여하고, 그결과로 자신의 상태를 변경한다.

 

객체는 상태를 캡슐안에 감쳐둔채 외부로 노출시키지않는다.

(객체가 외부로 노출하는것은 행동뿐이며, 외부에서 객체에 접근할수 있는 유일한 방법역시 행동뿐이다.)

객체의 행동을 유발하는것은 외부로부터 전달된 메시지지만, 객체의 상태를 변경할지 여부는 객체 스스로 결정한다

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

 

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

 

식별자

값과 객체의 가장 큰 차이점은, 값은 식별자가 존재하지않고 객체는 식별자를 가진다.

(값은 오직 상태만을 이용해 동등성을 판단하기때문에 인스턴스를 구별하기 위한 별도의 식별자를 필요로 하지않는다.)

인스턴스를 구별하기 위한 별도의 식별자를 필요로 하지않는다.

예로들자면, 1과 1은 같다, 보자마자 동등하기때문에  식별자가 필요하지않다

 

객체는 어린시절의 나와 현재의 나는 키,몸무게,나이,등등 달라졌지만 동일하게 '나' 자신이다.

(상태와 무관하게 식별할수 있는 식별자를 가진 객체이다. && 두 객체의 상태가 달라도 식별자가 같다면 같은객체이다.)

 

정리

협력에 참여하는 훌륭한 객체를 만들기 위해선, 상태가 아니라 행동에 초점을 맞추자.

(응집도를 올리고, 결합도를 낮추자. 그렇게하면 재사용성이 높아지는 객체가 탄생한다.)

 

* 객체의 상태는 자기 자신의 내부에서만 상태를 변경하고 외부에는 행동만 노출시켜서,

객체 본인 자체가 값을 변경하고 어떻게 변경할진 본인이 판단하고 변경할수 있게 코드를 작성하자.

(외부에서 주구장창 setter를 쓰지말자..) 

 

* 행동이 상태를 결정한다. 

'읽은 책 정리 > 객체지향의 사실과 오해' 카테고리의 다른 글

06 객체 지도  (0) 2021.09.15
05 책임과 메시지  (1) 2021.09.15
04 역할, 책임, 협력  (0) 2021.09.15
03 타입과 추상화  (0) 2021.09.12
01 협력하는 객체들의 공동체  (0) 2021.09.10