JavaScript

JavaScript 핵심 개념 이해하기 : 프로토타입, this 바인딩 정리 2(철학적 관점 간단 정리)

Chrysans 2025. 6. 10. 15:46
728x90
반응형

 

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

 

728x90
반응형