ES6에 도입된 클래스란 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 미리 변수와 메서드를 정의하여 찍어낼 수 있게끔 해주는 일종의 틀, 설계도라고 볼 수 있다.
class 클래스명{
constructor(인자1,인자2,...)
this.인자1 = 인자1;
this.인자2 = 인자2;
}
메서드명() {
실행 코드 ;
} // 메서드 또한 클래스에 포함시킬 수 있다.
const 객체명 = new 클래스명(인자1,인자2);
클래스는 class
키워드를 사용하여 생성할 수 있다.
기본적으로 constructor
라는 생성자 함수로 객체를 초기화 한다.
내부에 메서드를 정의할 수 있다.
생성된 클래스로 객체를 생성할 때에는 new
키워드를 사용한다.
언더 스코어는 Private 속성을 띄우고 싶을 때 사용한다.
클래스에는 Getter와 Setter가 있는데 this
로 인해 무한루프에 빠지게 된다.
인스턴스 내에서만 해당 변수를 사용하기 위해 사용한다.
class TV {
constructor(name, price) {
this._name = name;
this._price = price;
}
get name() {
return this._name;
}
get price() {
return this._price;
}
set name(value) {
if (typeof value !== 'string') {
throw new Error("문자열 형식이 아님");
} else {
this._name = value;
}
}
set price(value) {
if (typeof value !== 'number') {
throw new Error("숫자가 아님");
} else {
this._price = value;
}
}
}
const smart1 = new TV("smartTV", 250);
smart1.price = 300;
console.log(smart1); // TV { _name: "smartTV", _price: 250 }
smart1.price = "hehe"; // throw new Error("숫자가 아님");
getter는 원하는 값을 얻기 위할 때 호출되어 사용되고, setter는 값을 변경할 때 검수용으로 사용된다.
class TV {
constructor(name, price) {
this._name = name;
this._price = price;
}
}
class NewTV extends TV{
constructor(name,price,inch){
super(name,price);
this._inch = inch;
}
}
const tv1 = new NewTV("goodTV",150,50);
console.log(tv1) // NewTV { _name: 'goodTV', _price: 150, _inch: 50 }
상속은 다른 클래스의 기능을 물려받을 수 있다.
상속해주는 class를 super class 라고 부르며,
super
키워드를 사용하여 받아올 수 있다.
메서드를 오버라이딩하여 사용할 수 있다.
class Calc {
static add(a, b) {
return a+b;
}
static sub(a, b) {
return a-b;
}
}
console.log(Calc.add(10, 10)); // 20
console.log(Calc.sub(20, 10)); // 10
static은 인스턴스에서 호출할 수 없으며, 클래스 이름으로 호출이 가능하다.
복제할 필요가 없는 데이터를 만들 때 사용된다.