클래스는 주로 인스턴스를 만들어주는 역할을 한다. 이렇게 공통적인 행위나 상태를 클래스로 작성하는 것을 추상화라고도 한다. 이 클래스를 상속받은 하위 클래스들은 각자 자신의 역할에 맞는 행위를 따로 정의 가능하며, 부모의 메소드를 오버라이딩 하여 자식 클래스에 맞게 사용할 수 있다.
class Person{
name; //js에서는 없어도 상관없음(strict 모드라면 필요)
age; //js에서는 없어도 상관없음(strict 모드라면 필요)
constructor(name, age){
this.name = name;
this.age = age;
console.log("생성되었습니다.");
}
}
const juhyeok = new Person("juhyeok", '27');
자바스크립트는 프로토타입 기반 언어이며, 모든 객체가 속성을 상속받기 위해서 프로토타입 객체(__proto__
)를 가진다. 상위 프로토타입 객체로부터 메소드와 속성을 상속받는 것을 프로토타입 체인이라 한다. 우리가 객체나 배열을 만들고 해당하는 api를 사용할 수 있는 것도 상위 프로토타입에 메소드들이 정의되어 있기 때문이다.
const user = { name : "capt", age: 30};
const admin = {};
admin.__proto__ = user; // admin.__proto__ = { name : "capt", age: 30}
admin.role = "admin";
console.log(admin) // { role : "admin"}
console.log(admin.__proto__) // { name : "capt", age: 30}
프로토타입을 활용하여 class기능을 구현한 것이다.
class Person {
name: string;
age: number;
constructor(name: string, age:number) {
this.name = name;
this.age = age;
}
}
const capt = new Person('Steve', 100);