JS는 프로토타입 기반 객체지향 프로그래밍을 지원한다.
그렇다면 JS는 클래스 기반 OOP와 비교해서 무엇이 다른 걸까?
프로그램을 명령어 또는 함수의 목록으로 보는 전통적인 명령형 프로그래밍의 절차 지향적 관점에서 벗어나 여러 개의 독립적 단위, 즉 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 (모던 자바스크립트 Deep Dive, 이웅모)
OOP (Object-Oriented Programming) is an approach in programming in which data is encapsulated within objects and the object itself is operated on, rather than its component parts. JavaScript is heavily object-oriented. It follows a prototype-based model (as opposed to class-based). (MDN)
Park
, Kim
은 사람
이라는 공통적인 특징으로 표현할 수 있다.Dog
, Cat
은 동물
이라는 공통적인 특징을 표현할 수 있다.즉, OOP는 현실의 사물을 공통적인 특징으로 묶어 인식할 수 있는 것처럼 프로그래밍의 요소들을
객체
로 인식하고추상화
와구체화
를 통해 기술한다.
instance
)를 만들어 낸다.설계도
역할을 하게된다.instance
)를 생성하기 위해 class
로부터 sub-class
를 만들어 나간다. (계층적)클래스 기반 언어는 객체를
설계도(class)
와실체(instance)
2가지 형태로 인식한다.
객체 리터럴
, Object.create
, 생성자 함수
, Class
등의 문법을 통해 객체를 만들어 낸다.프로토타입
을 통해 구현한다.JS는 객체를 설계도(
class
)와 실체(instance
)로 구분하지 않는다.
JS는 객체의 추상화와 구체화 방식이 훨씬 더 유연하다.
클래스 기반 언어는 자신의 상태와 동작을 물려준다.(inheritance)
JS는 프로타입-체인을 통해 상위 객체의 속성을 위임(delegation)받아 재사용하게 된다.
Class
와 Instance
로 구분하지만 JS는 동일한 객체(Object)로 부터 객체(Object)를 생성한다.