클래스의 메서드 (constructor, prototype, static)

삼안기·2023년 6월 29일
0

JAVASCRIPT

목록 보기
2/3
post-thumbnail

Constructor

인스턴스를 생성하고 초기화하기 위한 메서드이다.

class Car {
	constructor(name) {
		this.name = name;
	}
}

const myCar = new Car('tesla'); // this.name은 'tesla'

constructor 내부에 선언한 프로퍼티가 클래스가 생성한 인스턴스의 프로퍼티로 추가된다.

constructor 내부에는 return으로 값을 반환하게 되면 객체일 때는 객체가 반환되고, 원시값일 때는 this가 반환된다. this가 아닌 다른 값을 반환하게 되면 기본 동작을 훼손하는 것이기 때문에 반드시 생략한다.

프로토타입 메서드 (prototype)

생성자 함수에서는 프로토타입 메서드를 명시적으로 추가해야 인스턴스를 생성할 수 있었다면 클래스에서 프로토타입 메서드가 없어도 기본적으로 프로토타입 메서드가 된다.

class Person {
	constructor(name) {
		this.name = name;
	}

	// 프로토타입 메서드, Person.prototype.sayHi 를 명시하지 않아도 된다
	sayHi() {
		console.log(`Hi, I'm ${this.name}`);
	}
}

정적 메서드 (static)

클래스에 바인딩 되어 인스턴스를 생성하지 않아도 호출할 수 있는 메서드이다. 정적 메서드가 바인딩 된 클래스는 인스턴스 프로토타입 체인상에 존재하지 않기 때문에 인스턴스 메서드를 상속받지 않는다.

class Person {
	constructor(name) {
		this.name = name;
	}

	static sayHi() {
		console.log(`Hi`);
	}
}

프로토타입 메서드와 정적 메서드의 차이

  1. 자신이 속해있는 프로토타입 체인이 다름
  2. 정적 메서드는 클래스로 호출, 프로토타입 메서드는 인스턴스로 호출
  3. 정적 메서드는 인스턴스 메서드를 참조할 수 없지만 프로토타입 메서드는 인스턴스 프로퍼티를 참조 가능

따라서 메서드 내부에서 인스턴스 프로퍼티를 참조해야 한다면 this를 사용해야 하며, 이 경우에는 프로토타입 메서드로 정의해야한다.

profile
문제를 해결해야지

0개의 댓글