클래스는 객체를 생성하기 위한 템플릿이라고 생각하면 된다.
클래스를 선언하기 위해서는 클래스의 이름 앞에 class 키워드를 사용한다.
클래스를 선언할때 암묵적인 규칙으로 클래스명은 대문자로 시작하며 일반명사로 만든다.
class Character{
constructor(name){
this.name=name;
this.level=1;
}
attack(){
console.log(`${this.name}가 공격합니다.`);
}
}
생성자 메서드는 클래스로 생성된 객체를 생성하고 초기화하기 위한 메서드이다.
생성자 메서드는 클래스안에서 한 개만 존재할 수 있으며 return 값을 만들지 않는다.
생성자의 인자(argument)를 정의할때는 this를 사용해야한다.
constructor(name){
this.name=name;
this.level=1;
}
해당 클래스에서 작동하는 기능들을 사용하기 위한 메서드
생성자의 인자를 사용하기 위해서는 this를 사용해야한다.
attack(){
console.log(`${this.name}가 공격합니다.`);
}
부모 클래스에서 자식 클래스로 부모 클래스의 속성과 메서드를 물려주는 과정을 상속이라고 한다.
JS에서는 extends 와 super 키워드를 사용하여 상속을 구현할 수 있다.
class Job extends Character{
constructor(name, job){
super(name);
this.job=job;
}
info(){
console.log(`${this.name}의 레벨은 ${this.level}이며 ${this.job}으로 전직하였습니다.`);
}
}
클래스의 속성과 메서드를 담고 있는 객체
즉 클래스로 만든 객체가 인스턴스라고 생각하면 된다.
인스턴스를 만들 때에는 new 키워드를 사용한다.
이렇게 생성된 인스턴스는 class의 고유한 속성과 메서드를 갖게 된다.
let ryu=new Character("ryu");
// expected output : {name:"ryu", level:1}
ryu.attack();
// expected output : ryu가 공격합니다.
let warriorRyu=new Job(ryu.name, "warrior");
// expected output : {name:"ryu", level:1, job:"warrior"}
warriorRyu.attack();
// expected output : ryu가 공격합니다.
warriorRyu.info();
// expected output : ryu의 레벨은 1이며 warrior으로 전직하였습니다.