자바스크립트에 추상 클래스가 없기 때문에 자바스크립트로 전환하면 일반 클래스가 된다
변환된 일반 클래스는 자바스크립트에서는 사용될 일이 없고 전환된 후에는 의미없는 코드에 불과함.
⇒ interface가 필요한 이유!!
// 다른 상속받는 클래스들의 표준화된 모양, 표준화된 property와 메소드를 갖도록 해주는 청사진을 만들기 위해 추상클래스 사용
// 추상클래스는 바로 인스턴스화 불가
// 자바스크립트에 추상 클래스가 없기 때문에 자바스크립트로 전환하면 일반 클래스가 된다
abstract class User {
constructor(protected firstName: string, protected lastName: string) {}
abstract sayHi(name: string): string;
abstract fullName(): string;
}
class Player extends User {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string) {
return `Hello ${name}. My name is ${this.fullName}.`;
}
}
interface는 컴파일하면 JS로 바뀌지 않고 사라진다.
⇒ 파일 사이즈를 줄일 수 있다.
interface는 오브젝트나 클래스의 모양을 묘사한다.
⇒ 클래스가 아니지만 클래스의 모양을 특정할 수 있게 해주는 간단한 방법!
문제는 인터페이스를 상속할 때는 property에 private 속성을 할당할 수 없다.
⇒ public만 가능
interface User {
firstName: string;
lastName: string;
sayHi(name: string): string;
fullName(): string;
}
class Player implements User {
constructor(public firstName: string, public lastName: string) {}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string) {
return `Hello ${name}. My name is ${this.fullName}.`;
}
}
interface User {
firstName: string;
lastName: string;
sayHi(name: string): string;
fullName(): string;
}
interface Human {
health: number;
}
class Player implements User, Human {
constructor(
public firstName: string,
public lastName: string,
public health: number
) {}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
sayHi(name: string) {
return `Hello ${name}. My name is ${this.fullName}.`;
}
}