솔직히, 아직도 javascript의 prototype이 잘 이해가 안된다.

wjdskagjs1·2020년 4월 1일
0

javascript

목록 보기
3/3

오늘은 만우절이니 뇌피셜로 범벅된 포스팅을 하겠다. ^_^:;

javascript의 prototype은 사실 뭔가에 비유해서 설명하기가 쉽지 않다.(작성자가 클래스 기반 언어를 먼저 배워서 그런 지도 모르겠다. ^_^:;)
그래서 먼저 클래스와 인스턴스에 대해 간단히 설명하고 javascript의 프로토타입 방식과 비교해서 설명하는 방식으로 정리하고자 한다.

클래스는 붕어빵 틀, 인스턴스는 붕어빵에 비유할 수 있다.
(우리는 흔히 객체지향을 처음 배울 때 이 비유를 자주 접한다. 하지만 이는 틀린 설명이다. 지금은 설명을 간단히 하기 위해 틀린 설명을 했으며, 이 비유는 클래스에 관한 단편적인 비유에 지나지 않는다. 이에 대해 좀 더 관심이 있다면 '객체지향의 사실과 오해'를 읽어보자.)

이 비유를 토대로 prototype을 설명하자면.
prototype은 클래스와 인스턴스의 관계에 대한 시점을 역전시킨 개념이다.
보통 클래스 기반 언어로 프로그래밍을 할 때 우리는 클래스를 먼저 정의를 하고 그 클래스라는 틀에 맞는 인스턴스를 만든다.
하지만 우리는 javascript, prototype 기반 언어로 프로그래밍을 할 때!
인스턴스(객체)를 먼저 만든다. 그리고 prototype을 나중에 수정할 수 있다.
그렇게 수정한 prototype은 다른 복제품(clone)에도 영향을 준다.

뜬금없지만.
닭과 달걀, 뭐가 먼저일까?
class 기반 언어에서는 닭이 달걀보다 먼저이다.
prototype 기반 언어에서는 달걀이 닭보다 먼저이다.

진화론적인 관점에서 닭이 달걀보다 먼저인게 맞다!
하지만, 프로그래밍의 세계에서 달걀이 닭보다 먼저인 방식을 창조해낸 프로그래머가 있었다.
와!
이쯤되면 javascript를 설계한 브랜든 아이크의 뇌구조가 궁금해진다.

그래서, 이게 과연 좋은 걸까?!

장단점이 있다.
클래스 기반 방식으로 프로그래밍을 한다면 프로토타입 방식으로 프로그래밍 할 때보다 정확성, 안전성, 예측성이 조금 더 보장될 것이다. 인스턴스들은 클래스라는 주어진 방식대로만 동작할 테니까. 부수효과(side effect)를 방지하는 측면에선 클래스 기반 체계가 더 나을 것같기도 하다.

프로토타입 방식으로 프로그래밍을 한다면 클래스 기반 방식으로 프로그래밍을 할 때보다 정확성, 안전성, 예측성이 떨어질 것이다. 누군가 임의로 prototype에 접근해서 프로퍼티나 메소드를 수정한다고 생각해보자. 음... 위험하다.
대신에 프로그래머의 역량에 따라 무척이나 유연한 프로그래밍이 가능하다는 장점을 가지고 있다는 의미이기도 하다.

여러분의 생각은 어떤가?

profile
노드 마스터가 되는 그 날 까지

0개의 댓글