October 22, 2021
클래스는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀로, 객체를 정의하기 위한 상태(멤버 변수)와 메서드(함수)로 구성된다.
실무에선 사용자나 물건같이 동일한 종류의 객체를 여러 개 생성해야 하는 경우가 잦습니다.
이럴 때 new 연산자와 생성자 함수에서 배운 new function
을 사용할 수 있습니다.
여기에 더하여 모던 자바스크립트에 도입된 클래스(class)
라는 문법을 사용하면 객체 지향 프로그래밍에서 사용되는 다양한 기능을 자바스크립트에서도 사용할 수 있습니다.
class User {
constructor(name) {
this.name = name;
}
sayHi() {
alert(this.name);
}
}
// 사용법:
let user = new User("John");
user.sayHi();
new User("John")
를 호출하면 다음과 같은 일이 일어납니다.
constructor
가 자동으로 실행됩니다. 이때 인수 "John"
이 this.name
에 할당됩니다.이런 과정을 거친 후에 user.sayHi()
같은 객체 메서드를 호출할 수 있습니다.
어떤 사람들은 class
라는 키워드 없이도 클래스 역할을 하는 함수를 선언할 수 있기 때문에 클래스
는 '편의 문법’에 불과하다고 이야기합니다. 참고로 기능은 동일하나 기존 문법을 쉽게 읽을 수 있게 만든 문법을 편의 문법(syntactic sugar, 문법 설탕)이라고 합니다.
// class User와 동일한 기능을 하는 순수 함수를 만들어보겠습니다.
// 1. 생성자 함수를 만듭니다.
function User(name) {
this.name = name;
}
// 모든 함수의 프로토타입은 'constructor' 프로퍼티를 기본으로 갖고 있기 때문에
// constructor 프로퍼티를 명시적으로 만들 필요가 없습니다.
// 2. prototype에 메서드를 추가합니다.
User.prototype.sayHi = function() {
alert(this.name);
};
// 사용법:
let user = new User("John");
user.sayHi();
아래와 같은 기본문법을 사용해 클래스를 만들 수 있습니다.
class MyClass {
prop = value; // 프로퍼티
constructor(...) { // 생성자 메서드
// ...
}
method(...) {} // 메서드
get something(...) {} // getter 메서드
set something(...) {} // setter 메서드
[Symbol.iterator]() {} // 계산된 이름(computed name)을 사용해 만드는 메서드 (심볼)
// ...
}
MyClass
는 constructor
의 코드를 본문으로 갖는 함수입니다. MyClass
에서 정의한 일반 메서드나 getter, setter는 MyClass.prototype
에 쓰입니다.