Skip to main content

25장 클래스

25.1 클래스 정의

자바스크립트는 프로토타입 기반 객체지향 언어이다. 자바스크립트에서 클래스는 사실 함수이며 기존 프로토타입 기반 패턴을 클래스 기반 패턴처럼 사용할 수 있도록 하는 문법적 설탕이라고 할 수 있다.

조금 더 자세히 말하면 새로운 객체 생성 메커니즘으로 보는 것이 합당하다고 할 수 있다.

클래스는 class 키워드를 사용하여 정의한다. 클래스 이름은 생성자 함수와 마찬가지로 파스칼 케이스를 사용하는것이 일반적이나, 사용하지 않아도 에러가 발생하지는 않는다.

// 익명 클래스 표현식
const Person = class {};

// 기명 클래스 표현식
const Person = class MyClass {};

클래스 몸체에는 0개 이상의 메서드만 정의할 수 있다. 클래스 몸체에서 정의할 수 있는 메서드는 constructor(생성자), 프로포타입 메서드, 정적 메서드 세 가지가 있다.

const Person = class {

//생성자
constructor(name) {
this.name = name;
}

// 프로토타입 메서드
sayHi() {
console.log(`Hi! My name is ${this.name}`);
}

// 정적 메서드
static sayHello() {
console.log('Hello!');
}
};


//인스턴스 생성
const me = new Person('Son');

console.log(me.name);
me.sayHi();
Person.sayHello();

상속에 의한 클래스 확장

상속에 의한 클래스 확장은 기존 클래스를 상속받아 새로운 클래서를 확장하여 정의하는 것이다.

extends 키워드를 사용한 상속

// 생성자 함수
function Base(a) {
this.a = a;
}

// 생성자 함수를 상속받는 서브클래스
class Derived extends Base {}

const derived = new Derived(1);
console.log(derived); // Derived {a: 1}