JS 딥 다이브) 클래스

Clear·2023년 7월 20일
0

Daily Posting

목록 보기
26/27

클래스의 메서드

constructor 메서드

  • 인스턴스를 생성하고 초기화하기 위한 특수한 메서드이다.
  • constructor문 내부에 인스턴스의 프로퍼티를 정의할 수 있다.
  • 프로퍼티의 초기값을 지정할 수 있으며, 반환문을 작성해선 안된다.
  • priavate, public, protected와 같은 접근 제한자를 지원하지 않기 때문에, 인스턴스의 프로퍼티는 public하다. (외부에서 접근가능하다.)

프로토타입 메서드

  • 인스턴스의 메서드를 정의한다.
  • 생성자 함수와 다르게 prototype에 메서드를 추가하지 않아도, 적용된다.
// Person이라는 객체 생성자 함수 내부에서
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 참조 가능, 인스턴스 초기화 가능

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

유익한 글 잘 봤습니다, 감사합니다.

답글 달기