프로토타입 스코프와 클래스 스코프

자바스크립트에서 스코프(scope)는 변수와 함수가 접근 가능한 영역을 말합니다. 스코프는 변수의 유효 범위를 결정하고, 변수와 함수의 충돌을 방지합니다.

프로토타입 스코프(Prototype Scope)와 클래스 스코프(Class Scope)는 둘 다 스코프의 종류를 나타내는 용어입니다. 그러나 이 두 개념은 서로 다른 용도와 동작 방식을 가지고 있습니다.

프로토타입 스코프 (Prototype Scope)

프로토타입 스코프는 자바스크립트에서 객체 지향 프로그래밍의 핵심 개념인 프로토타입 체인(Prototype chain)에 기반한 스코프입니다. 이 스코프는 객체의 프로토타입 체인을 따라 변수나 함수를 찾습니다.

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log("Hello, " + this.name);
};

var john = new Person("John");
john.greet(); // Hello, John

위의 예제에서 Person이라는 생성자 함수를 정의하고, greet이라는 메서드를 Person.prototype에 추가했습니다. john이라는 객체를 생성한 후 greet 메서드를 호출하면, john 객체의 프로토타입 체인을 따라 greet 메서드를 찾아 실행합니다.

프로토타입 스코프에서 변수와 함수는 해당 객체 및 그 객체의 프로토타입 체인에 속합니다.

클래스 스코프 (Class Scope)

클래스 스코프는 최신 ECMAScript 표준(ECMAScript 2015 이상)에서 도입된 개념입니다. 클래스 스코프는 클래스와 관련된 변수와 함수를 정의하는 영역을 말합니다.

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  getArea() {
    return this.width * this.height;
  }
}

const rect = new Rectangle(10, 5);
console.log(rect.getArea()); // 50

위 예제에서 Rectangle이라는 클래스를 정의하고, constructor 메서드로 인스턴스 변수를 초기화하고, getArea 메서드로 넓이를 계산합니다. rect라는 인스턴스를 생성한 후 getArea 메서드를 호출하여 결과를 출력합니다.

클래스 스코프에서 변수와 함수는 해당 클래스에 속합니다. 이러한 변수와 함수는 클래스의 인스턴스를 통해서만 접근할 수 있습니다.

결론

프로토타입 스코프와 클래스 스코프는 자바스크립트에서 스코프의 두 가지 주요 유형입니다. 프로토타입 스코프는 객체 지향 프로그래밍에서 프로토타입 체인을 따라 변수와 함수를 찾고, 클래스 스코프는 최신 ECMAScript 표준에서 도입된 클래스와 관련된 변수와 함수를 나타냅니다. 각각의 스코프는 다른 동작 방식과 적용 범위를 가지므로, 개발자는 이러한 차이를 이해하고 적절하게 사용해야 합니다.

#프로토타입스코프 #클래스스코프