Alan Kay 


"OOP to me means only messaging, 

    local retention, and protection 

    and hiding of state-process, 

    and extreme late-binding of all things. 


객체는 상대 객체를 신경쓰지 않고 

자유롭게 메세지를 전달할 수 있어야 함

그래서 최대한 늦은 시점에 바인딩하는 것이 OOP의 근본임


데 클래스 기반 정적 타입 언어는 정반대라서

상대 객체의 타입을 모르면 동작은 커녕 컴파일도 안됨


별 수 없이 런타임에 이뤄지는 선택을 

개발할 때 정해주고 런타임에 따른 객체생성, 동작도 구현해 줌

그래서 런타임에 메세지 전달이 가능하게 하는

타입 구조를 만드는 꼼수(디자인 패턴)가 중요해짐


그러다 보니 프로그램에 비즈니스 로직 보다

런타임에 따라 동작이 가능하게 하는 코드가 더 길어지는 경우도 생겨 버림

비즈니스 로직 클래스는 1-2개인데 구조 때문에 만든 클래스가 3-4개 되어버림


그 불필요한 삽질이 익숙해지고

장황한 코드가 없으면 허전하고

꼼수로 구조를 만드는게 우월하게 느껴지기 시작하면

프로그래밍 시작하는 초보들에게 "디자인 패턴"을 공부하라고 훈수를 두게 됨


그것이 C++, JAVA 개발자