22a8d23eabc236a14e81d2b628f1766561d53d



Object의 특징은 무엇인가?


OOP에서 오브젝트의 특징은 무엇인가?



3da8d23eabc236a14e81d2b628f17c6fd1f619

객체 분해를 어떻게 하고 여기서 객체에 행동이 들어간다고 함


Object의 근본 개념은


State,Behavior,Identity 


라고 할 수 있음. 상태(속성), 행동(연산or 메서드), 식별(식별자, 메모리 주소등등)





3da8d23eb79c28a8699fe8b115ef046ca6b6bf4ae3

즉 붕어빵에서 인스턴스 어쩌고는 잘못됨


애초에 캡슐화 설명도 못하고, 객체에 대해서 잘못됨


클래스:오브젝트 =붕어빵틀:붕어빵은 왜 잘못된거냐?



3da8d23eb69c28a8699fe8b115ef046ea0f1bd6b
1.우선 객체가 가지는 아이덴티티를 무시하는 설명이다..




3da8d23eb19c28a8699fe8b115ef04681c47e508





3da8d23eb09c28a8699fe8b115ef046583c754cb

부치 책은 꽃들의 관계를 이야기한다.


그럼 붕어빵 틀과 붕어빵은 잘맞는 비유일까?


아니다


1. 우선 객체가 가지는 식별성을 언급할 수 없다.


- >진짜 맞는 비유가 될려면 붕어빵틀에서 찍어 나오되 


'독립적인 행동을 가지고'

'식별 번호를 가지고 있고'

'상태가 변한다는 것을 가진다'


라는 것을 설명하지 못한다. 


우선 객체는 - 시간과 공간 안에서 동적으로 존재한다.

상태와 행동은 변하며, 객체는 클래스의 틀을 벗어나서 독립적인 상태와 행동을 가져야한다.


이게 기본이다.

그래도 이 독립적인 행동은 어떻게 식는다. 차갑게 변한다 등 붕어빵의 뜨거움 여부로 어떻게 판단한다 하자.


그럼에도 문제가 생긴다.


2. 클래스의 역할을 지나치게 단순화한다


-클래스의 중요한 역할 중 메서드 기능 제공을 한다 떠나서, 캡슐화를 제공하는데, 이는 인터페이스를 통한 데이터 보호의 개념을 어떤것도 설명하지 못한다.


붕어빵틀에 팥붕 슈붕이 들어가서 타입의 정의 자체는 설명할 수 있다.


문제는 객체의 핵심적인 것 중 하나는 다른 객체와의 상호작용인데, 그 상호작용에 대해서 어떤 것도 설명하지 못한다


이게 메세징이고, 이게 객체가 다른 것과 구분되는 특성이다.


그렇기때문에 잘못된 것이다.


이는 나만이 지적하는게 아니다.


붕어빵과 붕어빵틀의 비유는 일부분의 측면을 보여주는 것은 효과적이다.


하지만 이걸로 모든걸 설명하는게 문제인거지.




38a4d274abc236a14e81d2b628f1756da54fedab


찾아보니 다른 한국 서적에서도 저 비유가 잘못됐다는 걸 설명하고 있다.


너네는 원본 프로그래밍을 배우는거냐?


한국식 재창조된 프로그래밍을 배우는거냐?