방금 하스켈 학교에서 객체지향 vs 함수형 떡밥이 n번째로 돌았는데, 나는 그냥 객체지향 = 상속(서브타이핑) 이라고 생각한다. 객체지향에서 상속을 빼면 뭐 남는게 없다. 그래서 객체지향이란 단어를 의미있게 사용하려면 상속이랑 동치시켜 사용할수 밖에 없다고 본다.

근데 상속은 코드를 합성하는 수많은 방법중 하나일 뿐이다. Java같은 언어는 그 수많은 방법중 딱 하나 상속만을 언어 자체에서 지원하는거고, 거기서 벗어나는 다른 유용한 추상화들은 죄다 디자인 패턴이라고 퉁쳐서 부른다. 그래서 객체지향 vs 함수형(= 상속 vs 함수형)은, 나에겐 Monoid vs 타입클래스 같은 비교처럼 들린다. 좌변과 우변이 체급이 안 맞아서 대결이 불성립한다.

@bglbgl gwyng 저는 반대로 상속을 빼놓고도 객체지향을 이야기할 수 있고, 더 나아가서는 응당 그래야 한다고 생각합니다. 상속은 객체지향 프로그래밍을 추구하는 프로그래밍 언어들이 자주 채택한 구현 기법 그 이상 그 이하도 아니지요. 중요한 것은 복잡계를 객체로 모델링하고, 또 그 복잡계를 적절히 조합해 복잡도를 제어하는 일입니다. 객체지향은 객체와 그것들의 협력에 대한 이야기가 되어야 하지 그 외에 어떤 구현 디테일에 대한 이야기가 되어서는 안 된다고 생각해요.

2