책/객체지향의 사실과 오해

2. 이상한 나라의 객체

jhg0406 2022. 2. 22. 11:13

선요약

행동이 상태를 결정(객체를 바라볼때 상태가 아닌 행동에 초점을 맞추자)

객체지향은 현실 세계의 모방이 아닌 은유

(현실의 수동적인 객체는 소프트웨어에서 능동적인 객체로 변함. 객체를 의인화해서 소프트웨어 세상에 녹여내자) 

 

 

객체지향의 사실과 오해

ch2. 이상한 나라의 객체(p39-71)

객체는 상태를 가진다.

상태를 이용하면 과거의 여러 행동을 고려하지 않고 결과를 알 수 있다.

(ex. 몸무게가 밥을 먹어 10kg 늘었다, 운동을 해서 -5kg 빠졌다..... 와 같은 과거 행동을 추적하지 않고 몸무게라는 상태를 보고 현재 몸무게를 알 수 있음)

상태는 단순한 값(ex. 키, 몸무게)와 객체(ex. 음료수)의 조합이다.

 

객체의 상태를 변경하는 것은 객체의 행동이다.

객체의 행동은 상태에 영향을 받는다.(ex. 몸무게가 ~이상이면 밥을 덜 먹는다.)

객체의 행동은 상태를 변경시킨다.(ex. 밥을 덜 먹으면 몸무게가 ~kg 줄어든다.)

객체의 행동으로 인해 발생하는 결과는 아래 두 가지 관점으로 설명할 수 있다.

1. 객체 자신의 상태 변경

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

 

객체는 식별자를 이용해 구별된다. 모든 객체는 식별자를 가진다.

객체는 상태가 변하기 때문에 동등성으로 구분할 수 없다.(ex. 키와 몸무게가 완전히 일치하는 사람이라도 다른 사람일 수 있음)

객체의 구분은 동일성으로 판단한다.(ex. 어제보다 오늘 몸무게가 2kg 늘었더라도 어제의 나와 오늘의 나는 같은 사람)

(동등성(equality): 상태를 이용해 두 값이 같은지 판단할 수 있는 성질)

(동일성(identical): 식별자를 기반으로 객체가 같은지 판단)

 

객체는 상태가 아닌 행동에 초점을 맞춰 바라봐야 한다.

상태를 중심으로 객체를 바라보면(상태를 먼저 결정하고 행동을 나중에 결정) 설계에 나쁜 영향을 끼친다.

1. 캡슐화가 저해됨

2. 객체를 협력자가 아닌 고립된 섬으로 만듦

3. 객체의 재사용성이 저하됨

(그렇다고 한다..)

 

객체는 다른 객체와 협력하기 위해 존재함. 행동은 객체가 협력할 수 있게하는 유일한 방법

따라서 객체가 적합한지 결정하는 것은 행동

1. 애플리케이션에 필요한 협력을 생각

2. 협력에 참여하는 데 필요한 행동을 생각

3. 행동을 수행할 객체를 선택

4. 행동을 수행하는데 필요한 상태를 결정

"행동이 상태를 결정"

 

객체지향 세계는 현실 세계의 은유이다.

잘못 알고있는 사실: "객체지향은 현실 세계의 모방"

그렇다면 현실의 객체와 소프트웨어의 객체 사이의 가장 큰 차이점은?

-> 현실에서 수동적인 존재가 소프트웨어에선 능동적인 존재로 변함

(ex. 현실에서 사람에 의해 수동적으로 양이 줄어드는 음료수는 소프트웨어 세상에선 능동적으로 자기 양을 줄임)

우리는 모든 객체를 "의인화"해서 소프트웨어 객체로 녹여내야 한다.

이런 점에서 현실 세계와 객체지향 세계 사이의 관계는 모방이 아닌 은유이다.