JavaScript 핵심 개념 이해하기 : 프로토타입, 실행 컨텍스트, this 바인딩 정리 2(철학적 관점 간단 정리)
자바스크립트 프로토타입이란?
자바스크립트 프로토타입(JavaScript Prototype)은 객체 간 속성과 메서드를 공유하는 메커니즘입니다. Java나 C++의 클래스 기반 상속과 달리, JavaScript는 기존 객체를 참조하여 새로운 객체를 만드는 프로토타입 기반 상속을 사용합니다.
프로토타입 체인의 핵심 개념
프로토타입 체인은 객체가 다른 객체의 속성에 접근할 수 있게 해주는 연결 구조입니다. 이는 마치 가족 구성원들이 서로 다른 특징을 공유하는 것과 비슷합니다.
클래스 기반 vs 프로토타입 기반 비교
클래스 기반 모델의 특징
클래스 기반 언어(Java, C++)는 다음과 같은 특징을 가집니다:
- 설계도 방식: 클래스를 먼저 정의하고 인스턴스 생성
- 고정된 구조: 컴파일 타임에 상속 관계 결정
- 명확한 계층: 부모-자식 관계가 엄격하게 정의됨
프로토타입 기반 모델의 특징
프로토타입 기반 언어(JavaScript)는 다음과 같은 특징을 보입니다:
- 참조 방식: 기존 객체를 참조하여 새 객체 생성
- 동적 구조: 런타임에 객체 구조 변경 가능
- 유연한 관계: 객체 간 연결이 유동적
철학적 관점에서 본 유사점
플라톤과 아리스토텔레스: 클래스 기반과의 유사성
클래스 기반 프로그래밍을 철학적으로 분석해보면, 플라톤의 이데아론과 놀라운 유사점을 발견할 수 있습니다.
플라톤의 이데아론과 클래스 시스템
- 완벽한 본질 존재: 플라톤은 모든 것에 완벽한 '이데아'가 존재한다고 봤습니다
- 복사본 개념: 현실 객체들은 이데아의 불완전한 복사본
- 클래스 = 이데아: 클래스가 객체의 완벽한 정의 역할
- 인스턴스 = 현실 객체: 각 인스턴스는 클래스의 구현체
아리스토텔레스의 분류법과 상속 구조
- 체계적 분류: 속(큰 범주) + 종차(구별 특징) = 완전한 정의
- 계층적 구조: 상위 클래스에서 하위 클래스로 내려가는 체계
- 명확한 기준: 각 객체가 어느 범주에 속하는지 명확히 정의
비트겐슈타인의 가족유사성: 프로토타입과의 연결점
루드비히 비트겐슈타인의 철학은 자바스크립트 프로토타입 시스템과 흥미로운 유사점을 보입니다.
가족유사성 이론의 핵심
비트겐슈타인은 "게임"이라는 개념을 통해 기존 분류법에 의문을 제기했습니다:
- 체스: 체크메이트로 승부 결정 ✓
- 축구: 골 많이 넣는 팀이 승리 ✓
- 심즈 게임: 승부? 단순히 가상 생활 ✗
- 가위바위보: 운에 의존 ✗
모든 게임이 공유하는 완벽한 공통점은 없지만, 연쇄적인 유사성으로 연결됩니다.
의미사용이론과 JavaScript
비트겐슈타인의 "언어의 의미는 사용 맥락에 달려있다"는 주장은 JavaScript의 핵심 특징과 일치합니다:
// "돈다"의 다양한 의미 (맥락에 따른 변화)
"지구가 돈다" // → 자전/공전
"돌았나?" // → 미쳤다
"엔진이 돈다" // → 작동하다
"소문이 돈다" // → 퍼지다
엘리너 로쉬의 프로토타입 이론
엘리너 로쉬(Eleanor Rosch)의 인지심리학 연구는 JavaScript 프로토타입 시스템과 직접적인 유사성을 보입니다.
등급 구조(Graded Structure)
로쉬는 범주 내에서도 중심(원형)과 주변이 존재한다고 증명했습니다:
'새' 범주의 등급 구조:
- 중심부: 참새, 비둘기 (전형적인 새)
- 중간층: 오리, 까마귀 (덜 전형적)
- 외곽: 펭귄, 타조 (비전형적이지만 여전히 새)
JavaScript 프로토타입 체인:
- 중심부: 원형 객체의 직접 속성
- 중간층: 프로토타입 체인 중간 단계
- 외곽: 체인 끝단의 Object.prototype
JavaScript this의 맥락 의존성
JavaScript의 this 키워드는 비트겐슈타인의 의미사용이론과 비유 했을때 유사한 점이 있습니다.
this의 맥락별 의미 변화
const person = {
name: "Alice",
greet() { return `Hello, I'm ${this.name}`; }
};
// 1. 메서드 호출: this = person
person.greet(); // "Hello, I'm Alice"
// 2. 함수 호출: this = window/undefined
const greetFunc = person.greet;
greetFunc(); // "Hello, I'm undefined"
// 3. 명시적 바인딩: this = 지정된 객체
greetFunc.call({name: "Bob"}); // "Hello, I'm Bob"
철학적 의미
- 고정된 본질 없음: this는 미리 정해진 의미가 없음
- 맥락 의존적: 호출 방식에 따라 완전히 다른 의미
- 동적 결정: 런타임에 맥락에 따라 의미 결정
내용 정리
https://covelope.tistory.com/entry/Javascript-core-concepts-prototype-execution-context-this
JavaScript 핵심 개념 이해하기 : 프로토타입, 실행 컨텍스트, this 바인딩 정리 1
JavaScript를 배우면서 가장 어려운 개념을 꼽으라면 단연 프로토타입, this, 그리고 실행 컨텍스트라고 말할 수 있을 거 같습니다. 우연히 좋은 내용에 글을 보고 이해한 내용을 정리하도록 하겠습
covelope.tistory.com
'JavaScript' 카테고리의 다른 글
[JS] 웹 스토리지(LocalStorage / Sesstion Storage) 활용 및 차이 feat.cookie (1) | 2025.04.16 |
---|---|
JavaScript[generator] - 제너레이터와 비동기 제너레이터 (1) | 2025.04.09 |
자바스크립트 엔진의 주요 구성 요소 (0) | 2025.03.31 |
CommonJS와 ES Modules: 자바스크립트 모듈 시스템 (0) | 2025.03.10 |
[javascript] - 자바스크립트 함수에 대해서 아는대로 설명해주세요. (1) | 2025.03.07 |