[[call]] [[constructor]] 생성자 함수

agnusdei·2023년 7월 10일
0
post-custom-banner

[[call]]과 [[constructor]]은 자바스크립트의 내장된 특수한 함수입니다. 이 두 함수는 객체 지향 프로그래밍에서 클래스와 인스턴스 생성에 사용됩니다. 각각의 역할과 동작 방식을 살펴보겠습니다.

  1. [[call]]:

    • [[call]]은 함수를 호출하는 특수한 메소드입니다.
    • 모든 함수 객체는 내부적으로 [[call]] 메소드를 갖고 있으며, 함수를 호출할 때 사용됩니다.
    • 함수 호출 시 사용되는 일반적인 호출 방식은 함수명(arguments) 형태이지만, 내부적으로는 함수명.[[call]](this, arguments)와 같이 동작합니다.
    • 함수 호출 시에는 함수 내부의 코드 블록이 실행되고, 함수에서 반환된 값이 호출한 부분으로 전달됩니다.
    • 함수의 인자(argument)는 호출 시에 전달되며, 함수 내부에서 인자의 값을 사용할 수 있습니다.
  2. [[constructor]]:

    • [[constructor]]은 객체를 생성하는데 사용되는 특수한 메소드입니다.
    • 클래스를 정의하고 해당 클래스로부터 인스턴스를 생성할 때 사용됩니다.
    • 클래스의 생성자(constructor) 메소드로서 동작하며, 객체를 초기화하고 생성된 인스턴스를 반환합니다.
    • 클래스 내부에서 constructor(arguments) 형태로 호출하면 내부적으로 new 클래스명(arguments)와 같이 동작합니다.
    • [[constructor]] 내부에서는 주로 객체의 초기 상태를 설정하거나 인스턴스 변수를 초기화하는 코드가 작성됩니다.
    • 생성자 함수 내부에서는 일반 함수처럼 코드 블록이 실행되고, 생성된 객체 인스턴스가 반환됩니다.

예시를 통해 이해를 도울 수 있습니다.

// 클래스 정의
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  sayHello() {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
  }
}

// 인스턴스 생성
const john = new Person("John", 25);

// 메소드 호출
john.sayHello(); // 출력: Hello, my name is John and I'm 25 years old.

위의 예시에서 [[constructor]]Person 클래스의 생성자 역할을 합니다. new Person("John", 25) 구문을 통해 인스턴스 john을 생성하고, [[constructor]] 메소드 내부에서 this.namethis.age에 전달된 값이 할당됩니다.

[[call]]은 클래스가 아닌 일반 함수 객체에서 사용됩니다. 함수 호출 시에 해당 함수 객체의 [[call]] 메소드가 호출되며, 함수 내부의 코드 블록이 실행됩니다.

// 일반 함수 객체
function greet(name) {
  console.log(`Hello, ${name}!`);
}

// 함수 호출
greet("Alice"); // 출력: Hello, Alice!

위의 예시에서 [[call]]greet 함수 객체의 호출에 사용됩니다. greet("Alice") 구문을 통해 [[call]] 메소드가 호출되고, 함수 내부의 코드 블록이 실행되어 "Hello, Alice!"가 출력됩니다.

요약하자면, [[call]]은 함수 객체의 호출을 처리하는 메소드로서 함수의 코드 블록을 실행하고 값을 반환합니다. 반면 [[constructor]]는 클래스의 생성자 역할로서 객체를 초기화하고 인스턴스를 반환합니다.

post-custom-banner

0개의 댓글