클래스란?
객체지향 언어의 class를 자바스크립트에서 사용하게 해주는 문법적 설탕이라고 할 수 있다.
하지만 클래스가 생성자 함수와 완전히 같지는 않다.
구분 | Class | 생성자 함수 |
---|---|---|
인스턴스 생성 | O | O |
super 호출 | O | X |
extends | O | X |
new 미사용 에러 | O | X |
암묵적 strict mode | O | X |
메소드[[Enumerable]] | X | O |
클래스의 정의 방법과 특징
정의 방법과 인스턴스 생성 방법은 다음과 같다.
1 | class Person {} // 클래스 선언문 |
특징:
클래스는 함수로 평가되며 일급 객체이다.
클래스는
constructor
,static
,프로토타입 메소드
를 쓸 수 있다.let, const와 마찬가지로 호이스팅이 일어나지 않는 것처럼 보인다.
클래스에서 사용하는 메서드
1. constructor
1 | class Person { |
인스턴스를 생성하고 초기화 할 때 쓰인다.
특징:
constructor는 클래스 내에 최대 한개만 쓸 수 있다. (어길시 SyntaxError 발생)
쓰지 않더라도 암묵적으로 빈 객체를 반환하게 consturctor를 사용한다.
return을 명시적으로 쓴다면 원시값은 무시, 객체는 반환한다.
2. 프로토타입 메소드
1 | class Person { |
생성자 함수처럼 prototype
을 통해 명시하지 않아도 프로토타입 메소드가 된다.
3. 정적 메소드
1 | class Person { |
인스턴스를 생성하지 않고 쓸 수 있는 메소드는 static
을 활용하여 정적 메소드로 활용하는 것이 좋다.
프로퍼티
1. 접근자 프로퍼티
1 | class Person { |
생성자 함수와 마찬가지로 접근자 함수를 사용할 수 있다.
2. Private
최신 사양의 브라우저(Chrome 74 이상)와 최신 Node.js(버전 12 이상)에서 private
한 변수를 사용할 수 있다.
1 | class Person { |
3. Static 필드
static
메소드 이외에 static 필드
는 최신 사양의 브라우저(Chrome 74 이상)와 최신 Node.js(버전 12 이상)에서 사용할 수 있다.
1 | class MyMath { |
4. 클래스 필드
클래스 필드에 변수 선언시 인스턴스 프로퍼티가 된다.
1 | class Person { |
상속에 의한 클래스 확장
생성자 함수와 달리 클래스는 다른 생성자 함수나 클래스를 상속 받아 확장할 수 있다.
1. extends
키워드
extends
사용하여 클래스나 생성자 함수를 상속받을 수 있다.
단 좌항에는 반드시 클래스가 와야 한다.
extends
는 [[Construct]] 내부 메소드를 갖는 함수 객체를 반환하는 표현식을 사용할 수 있다.
1 | function Base1() {} |
2. super
키워드
호출시(
super()
) : 수퍼 클래스(상위 클래스)의 constructor 실행반드시 constructor 안에서 호출해야 한다.
참조시 : 수퍼 클래스(상위 클래스)의 메소드 사용
축약 표현된 메소드 안에서면
super
참조 사용이 가능하다
1 | class Person { |
- 서브클래스의 정적 메소드 내에서 super 참조는 super 클래스의 정적 메소드를 가리킨다.
1 | class Person { |
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !