logo

new, 생성자, instanceof 그리고 인스턴스

Chapter 16

49 조회

0 추천

541 단어

3분 예상

2024. 08. 18. 게시

luasenvy 작성

CC BY-NC-SA 4.0

클래스 / 인스턴스

클래스는 설계도라고 생각하면 된다. 이 설계도를 이용하여 실제로 만든 구현체를 인스턴스라고 한다. 집을 짓는다 생각하면 이해하기 쉽다.

// 건물의 설계도
class Building {
  constructor(name, door) {
    this.name = name;
    this.door = door;
  }

  getDoor() {
    return this.door;
  }
}

const sweetHome = new Building("luasenvy", 1); // 실제로 건설한 건물
const nextBuilding = new Building("next", 3); // 실제로 건설한 건물
const somewhereBuilding = new Building("somewhere", 2); // 실제로 건설한 건물

집을 지으려고 설계도클래스를 작성했다고 생각해보자. 건설자constructor들은 집인스턴스을 짓고초기화 일이 있으면 같은 설계도의 집을 지으러 이동한다.

new / constructor

constructor는 생성자라고 하는데 이것도 번역이 좀 어색하다. 직역하면 또 건설자라고 나온다. 용도를 생각하면 비슷한 말이지만 굳이 번역할 필요는 없다. 그냥 클래스의 초기화 함수를 뜻하고, 국내에서는 생성자라고 알려져있기 때문에 알고만 있으면 된다.

new 키워드는 클래스로부터 새로운 인스턴스를 생성하기 위한 명령이다. 새로운 인스턴스가 생성되면서 인스턴스를 초기화 하기 위해 constructor()가 한 번 호출된다.

class Person {
  constructor() {}
}

const person = new Person();

person.constructor === Person // true

if ( person instanceof Person ) // true
  console.log(true);

자바 스크립트에서 constructor는 클래스에 포함되고 constructor를 활용하여 자신의 타입이 무엇인지 비교하는 용도로도 활용된다. 클래스와 팩토리 디자인 패턴을 보면 알 수 있는데 person 인스턴스의 __proto__가 Person 프로토타입을 바라보고 다시 Person 프로토타입의 constructor가 Person 클래스를 가리키고 있기 때문에 person.constructor는 결국 Person 클래스를 가리키고 있는 것과 같기 때문이다. instanceof를 활용해도 동일한 작동을 한다.