클래스

강한솔·2024년 6월 30일

모던 JS Deep Dive

목록 보기
12/14

클래스

class Menu {}

클래스는 class 키워드를 사용하여 정의한다. 클래스 이름은 파스칼 케이스를 사용

표현식으로 클래스를 정의할 수도 있지만 일반적이지 않다.

클래스는 함수와 마찬가지로 이름을 가질 수도 갖지 않을 수도 있다

클래스 = 표현식으로 정의 가능 = 일급 객체

호이스팅

클래스는 함수로 평가된다.

클래스 선언문으로 정의한 클래스는 함수 선언문과 같이 소스코드 평가 과정 즉, 런타임 이전에 먼저 평가되어 함수 객체를 생성한다.

이 때 클래스가 평가되어 생성된 함수 객체는 생성자 함수로써 호출할 수 있는 constructor 이다.

생성자 함수로서 호출할 수 있는 함수는 함수 정의가 평가되어 함수 객체를 시점하는 시점에 prototype도 더불어 생성된다.

프로토타입과 생성자 함수는 단독으로 존재할 수 없고 pair로 언제나 존재하기 때문이다.

단, 클래스는 정의 이전에 참조가 불가능하다.

인스턴스 생성

클래스는 기본적으로 기명으로 생성되어야 하며 변수에 할당할 때도 마찬가지이다.

new를 통해서만 인스턴스 생성이 가능하며 new 키워드가 없이는 호출할 수 없다.

메서드

클래스 몸체에는 0개 이상의 메서드만 선언할 수 있다.

정의할 수 있는 메서드로는 constructor, prototype method, static method 세 가지가 있다.

프로퍼티

인스턴스 프로퍼티는 언제나 public하다. 자바스크립트는 private 키워드와 같은 접근 제한자를 지원하지 않는다. 대신 #를 이용해서 private 필드를 정의할 수 있다. 단, prevate 필드는 반드시 클래스 몸체에 정의해야 한다.

상속

extends 키워드는 클래스뿐만 아니라 생성자 함수도 상속받을 수 있다. Construct 내부 메서드를 갖는 함수 객체로 평가될 수 있는 모든 표현식을 사용할 수 있다. 동적으로 정할 수도 있다.

0개의 댓글