클래스의 메서드
constructor 메서드
- 인스턴스를 생성하고 초기화하기 위한 특수한 메서드이다.
- constructor문 내부에 인스턴스의 프로퍼티를 정의할 수 있다.
- 프로퍼티의 초기값을 지정할 수 있으며, 반환문을 작성해선 안된다.
- priavate, public, protected와 같은 접근 제한자를 지원하지 않기 때문에, 인스턴스의 프로퍼티는 public하다. (외부에서 접근가능하다.)
프로토타입 메서드
- 인스턴스의 메서드를 정의한다.
- 생성자 함수와 다르게 prototype에 메서드를 추가하지 않아도, 적용된다.
Person.prototype.sayHi = function(){
console.log('sayHi')
}
sayHi() {
console.log('sayHi')
}
정적(static) 메서드
- 인스턴스를 생성하지 않아도 호출할 수 있는 객체의 메서드를 정적 메서드라고 한다.
- 인스턴스로는 호출할 수 없다.
- 메서드 내부에서, this를 활용한다면 프로토타입 메서드로, 활용하지 않는다면 정적 메서드로 정의한다.
Person.sayHi();
상속에 의한 클래스 확장
- extends 키워드 : 수퍼 클래스를 상속받아, 수퍼 클래스의 속성을 확장한 서브 클래스를 정의한다.
- super 키워드
- 서브 클래스에서 사용하는 특수한 키워드
- 호출 시, 수퍼 클래스의 constructor 함수를 호출한다.
- 참조 시, 수퍼 클래스의 메서드를 호출 할 수 있다.
- 서브 클래스에서 constructor를 생략 시, 암묵적으로 부모 클래스와 동일한 constructor가 생성된다. constructor를 생략하지 않을 시, 반드시 super를 호출해야 한다.
class Base () {
constructor (a, b) {
this.a = a;
this.b = b;
}
}
class Derived extends Base {
constructor(a, b, c) {
super(a, b);
this.c = c;
}
}
const derived = new Derived(a, b, c)
- 서브 클래스는 인스턴스를 직접 생성하는 것이 아니라, 수퍼 클래스의 constructor를 통해 생성하기 때문에, super를 호출하기 전까지는 인스턴스가 생성되지 않으며, this바인딩도 할 수 없다.
- super호출 -> 수퍼 클래스에서 인스턴스 생성 후 초기화, this 바인딩(인스턴스와) -> super 호출 종료 -> 서브 클래스에서 this 참조 가능, 인스턴스 초기화 가능
유익한 글 잘 봤습니다, 감사합니다.