Prototyped-based Programming

Posted 2006. 12. 25. 20:02
우리가 객체지향 프로그래밍 언어(object-oriented programming language)라고 부르는 언어 패러다임은 크게 1) 클래스 기반과 2) 프로토타입 기반의 언어로 양분할 수 있습니다. 클래스 기반 객체지향언어는 C++, 스몰토크, 자바, 루비처럼 클래스를 통해 현실 세계를 모델링하고, 클래스에서 객체(인스턴스)를 찍어내서 프로그래밍하는 모델을 말합니다. 반대로 프로토타입 기반의 언어에는 자바스크립트(JavaScript)가 있는데, 별도의 클래스 없이 이미 존재하는 객체를 클론(clone)해서 프로그램을 작성하는 방법입니다.

프로토타입 기반 언어에 대한 일반적인 비판은 동적 타이핑 언어에 대한 비판과 닮아 있습니다. 정확성(correctness), 안전성(safety), 예측성(predictability), 효율성(efficiency) 등이 떨어진다는 것입니다. [위키피디아 참고] 클래스 기반 객체지향언어에서 클래스는 외부 세계를 모델링(modeling)하는 방법일 뿐만 아니라 프로그램의 정확성을 확인할 수 있는 타입(type)이기 때문입니다. 쉽게 풀어서, 루비의 Array 클래스가 sort라는 메쏘드를 가지고 있다는 사실 자체가 클래스 사용자와 클래스 사이의 계약이 되기 때문입니다. 반대로 프로토타입 기반 언어에서는 클래스가 없기 때문에 이런 계약 관계를 쉽게 알아보기 힘들게 됩니다.

빠른 프로토타이핑(prototyping)과 개발 속도를 위해서 정적 타입 시스템(static type system)이라는 안전망을 포기한 스크립트 언어가 대부분 클래스기반 객체지향언어라는 점은 약간 의아합니다. 상업적으로 유일하게 성공한 프로토타입 언어인 자바스크립트를 제외하면, 프로토타입 언어는 Self, Cecil, Io 등 연구용 언어가 대부분이기 때문입니다. 자바스크립트의 표준인 EcmaScript조차 클래스 기반 언어로 전환을 이야기하고 있다고 합니다.

저는 개인적으로 파이썬 루비 같은 범용적 스크립트 언어면서 프로토타입에 기반한 언어가 대두하지 않을까 하는 생각을 해보기도 합니다. 동적 타이핑(dynamic typing)이라고 하지만 실제로는 타입 시스템이 없는 것이나 마찬가지인 스크립트 언어에서 굳이 클래스 기반 언어를 고집할 이유가 없기 때문입니다. 물론 객체지향 모델링 방법이나 베스트 프랙티스 등이 모두 클래스 기반 언어를 중심으로 논의되어 왔고, 기존 개발자들이 프로토타입 기반 객체지향 언어에 익숙하지 않다는 문제점이 있기는 합니다. 하지만 현재의 스크립트스러움을 극단으로 몰고 가려면 클래스 보다는 오히려 프로토타입이 아닐까요?