728x90

객체지향언어가 무엇인지에 대해서는 블로그에 이미 정리해두었으니, 이에 대해선 해당 링크를 참고하면 되고, 이번에는 객체 지향 언어 내에서도 차이가 있는 class 기반 언어와 프로토타입 기반언어를 비교해 보려 한다.

 

우선 우리가 알고 있는 언어의 대부분은 객체지향언어이다. 그 중에서 Javascript를 가장 먼저 배우면서 객체지향언어에 대해 알게 되었고, 이후에 파이썬 및 다른 언어들을 공부하게 되면서 이 언어들 간의 객체 지향방식에도 약간의 차이가 있다는 것을 알게 되었다. 그런데 정확한 차이를 알지 못하던 차에, 객체지향언어에도 두가지 종류로 나뉘어질 수 있음을 알게 되었다.

 

우선 Javascript도 객체 지향언어이나, Java와는 다르게 class가 없는 프로토타입 기반 언어이다. 즉 java나 python은 class 기반 객체지향언어이다. 물론 Javascript에도 ECMA 문법의 발전으로 인해 class가 생긴듯 하지만, 특성상 class 기반언어와는 차이가 존재한다. 

JS - 프로토타입 정리

파이썬 - 객체 class 정리

 

프로토타입 기반 언어와 클래스 기반 언어의 가장 큰 차이점은 무엇일까?

이는 사실 이름에서 드러나듯이 class의 유무이다. 이 class 유무가 어떤 차이점을 지니고 있을까?

 

클래스 기반 언어는 객체의 형식이 정의된 클래스라는 개념을 가진다. 반면에 프로토타입 기반 언어는 클래스라는 개념이 없다. 객체 prototype의 위임 과정을 통해 상속의 과정이 구현된다.

 

-> 정리하면, 클래스 기반 언어는 틀 자체를 상속시킨다. 상속시킨 틀을 이용해서 객체를 생성한다. 하지만, 프로토타입 기반 언어는 객체들을 prototype으로 연결시킨다. 클래스라는 개념이 없기 때문에, 객체들을 연결 할 수 밖에 없다.

 

-> class를 통한 상속 / 프로토타입을 통한 연결이 큰 차이점이다.

 

-> 프로토 타입 언어는 prototype을 사용하여 기존 클래스 상속을 흉내낸다. 즉 클래스와 인스턴스의 차이를 두지 않는다. 이는 class 기반 언어가 어떤지에 대한 설명을 들으면 더 이해가 될 것이다.

 

-> class 기반 언어는 하나의 클래스에서 상속받은 인스턴스가 존재한다. 즉 상위클래스/하위클래스의 개념이 있다. 그러나 프로토 타입 기반 언어는 이 클래스와 인스턴스가 상위/하위 개념이 아니다.

 

class 기반 언어
프로토타입 기반 언어

 

 


 

자바스크립트는 프로토타입 기반 언어라는 특징에 더하여 동적타입 언어라는 특징도 지니고 있다. 이에 대해서는 블로그에 이미 정리해두었으니 참고(링크)

각 언어의 특성을 좀 더 잘 이해하고 내가 구현하려는 서비스에 활용한다면 더 좋지 않을까하고 생각이 들었다!

 

Reference

 

참고자료 1

참고자료 2

728x90

+ Recent posts