Search Results for 'OO'

1 POSTS

  1. 2006.10.12 클래스 기반 & 프로토타입 기반 객체 지향 언어 1
예전에 KLDP에 Io Language를 언급하면서 프로토타입 기반의 객체지향(OO) 언어에 대한 질문이 올라온 적이 있었습니다.

여기에 대해 설명을 달았었는데, 다시 정리하자면 객체 지향(Object-Oriented)을 프로그래밍 언어로 구현하는 방법에는 크게 두 가지 큰 줄기가 있습니다. 첫 번째가 C++, 자바, C# 등이 공통적으로 쓰고 있는 클래스 기반의 객체지향 언어이고, 또 다른 방식으로 자바 스크립트나 Io 언어 등이 사용하는 프로토타입 방식의 객체 지향 언어가 있습니다.

클래스 기반 OO의 경우 클래스가 객체를 찍어내는 틀 역할을 합니다. 객체는 클래스라는 틀에서 붕어빵을 찍듯이 하나씩 찍어내는 개념이죠. C++, 자바 등에 익숙한 사람이라면 new 연산자를 이용해서 클래스로부터 객체를 생성하는 과정을 이해하실 겁니다.

반면에 프로토타입 기반의 언어는 이런 개념을 차용하지 않았습니다. 클래스라는 틀의 존재를 상정치 않고(classless object model이라고도 불립니다), 곧바로 시스템에 여러 종류의 객체가 존재하게 됩니다. 프로토타입 기반의 객체 지향 언어는 이렇게 이미 존재하는 객체를 직접 사용하거나, 클론(clone)해서 사용합니다. 필요에 따라 클론한 객체에 추가적인 기능을 구현(일종의 inheritance)을 하기도 합니다.

현재는 클래스 기반의 OO가 대세이기 때문에 "객체 지향 = 클래스 기반"이라는 등식이 생겼지만, 실제로는 프로토타입 기반의 OO도 여러 언어에서 사용되고 있습니다. 현재 개발자들에게 가장 익숙한 프로토타입 OO 언어는 아마 JavaScript일 것입니다.

University of Washington의 Washington Advanced Systems for Programming에 있는 Craig Chambers 교수가 연구했던 프로토타입 기반 객체 지향 언어인 Cecil 프로젝트를 보시면, 프로토타입 기반 OO로 우리가 알고 있는 OO의 기본 개념들을 어떻게 구현하는지 힌트를 얻을 수 있으실 겁니다. 다만 현재 국내 개발자들 사이에서 인지도가 높은 Io 언어는 어떤 차별성이 있는지 잘 모르겠네요.