철학과 자바스크립트, 프로토타입
프로토타입은 자바스크립트를 공부하기 시작하면서부터 접하게되는 개념인데 참 어렵다. 그러한 개념에 대해 설명한 정말 재밌고 굉장히 인상깊은 아티클이 있어 남겨둔다.
글 쓴 분은 자바스크립트의 프로토타입, 그리고 클래스 기반 언어에서 사용하는 클래스에 대해 철학에서 출발하여 설명한다.
자칫 어려우려나 싶을 수 있는데 지금까지 읽은 프로토타입, 클래스 등에 대한 설명 중 가장 이해에 도움이 되었다.
간략히 철학자-이론-프로그래밍언어 의 흐름으로 정리해보면 플라톤-이데아-클래스, 비트겐슈타인-프로토타입-프로토타입으로 볼 수 있다.
글은 프로토타입을 설명하지만 그 설명을 돕기 위한 클래스의 설명도 굉장히 좋았다. 특히 이데아에서 출발한 클래스(분류)가 개념과 실체를 구분하기 때문에 추상적인 의자를 이야기할 때는 ‘Chair’ 라고 하고, 실체의 의자를 이야기할 때는 ‘a chair’, ‘the chair’, ‘the chair’ 라고 한다는 것이 굉장히 인상깊었다. 예를 보면 더 좋은데,
class Chair {
...
}Chair myChair = new Chair()
와 같은 식인 것이다. Chair
는 추상적인 개념인 것이고, 그것을 실체로 만들기 위해 new
키워드를 사용한 것.
의례히 넘어가던 것을 철학의 개념에서 설명을 들으니 굉장히 신기했다. 철학의 개념이 생각보다 더 언어에 녹아있구나 싶어서 놀라웠던 것 같기도 하다.
그리고 프로토타입이란 개념이 분류(Classification) 이론을 정면으로 반박하여 나온 이론이고, 그렇기 때문에 프로토타입은 ‘클래스’의 다른 구현이 아닌, 완전히 새로운 인식하에 만들어진 이론이라는 것을 설명하고 있다.
비트겐슈타인이 주장한 프로토타입과 의미사용이론, 가족유사성을 설명하고 프로토타입 기반 언어인 자바스크립트가 위의 개념을 구현하는 것을 예를 통해 보여준다.
예를 들면 프로토타입은 이미 존재하는 사물을 통해 범주화하기 때문에 함수(추상)가 아닌 인스턴스(실체)를 프로토타입으로 설정한다는 것, 그리고 프로토타입과 공유하는 특징이 있지만 그와 같거나 다른 속성들을 통해 원형(프로토타입)에 가까워지거나 멀어지는 등의 과정들에 대한 설명 등의 예가 이해에 도움이 된다.
그리고 프로토타입 이론과 함께 의미사용이론, 가족유사성에서 중요한 어휘, 문맥, 전형적 특징, 범주 등을 자바스크립트에서 어떻게 녹여내고 있는지를 설명하고 그 과정에서 프로토타입, 어휘적 범위(lexical scope), this 등이 등장하게 되었고, 왜, 어떻게 역할을 하는지 설명한다.
아직 다 이해했다고 하기는 어려운데 전혀 새로운 접근으로 이해를 시도해 갈 수 있을 것 같아서 즐겁다.
자바스크립트 그리고 프로그래밍 언어에 더 재미를 느끼게 됐고, 이런 흥미로운 탐구를 해 나가고 싶다.