● 타입, 인터페이스의 차이
타입스크립트를 공부하면서 왜 interface가 필요할까에 대한 질문이 생겼다.
interface Person {
name: string;
age: number;
greet(phrase: string): void;
}
let user1: Person = {
name: "daeun",
age: 19,
greet(phrase: string) {
console.log(phrase + " " + this.name);
},
};
user1.greet("Hi There");
위와 같이 Interface로 객체의 틀을 잡아줄 순 있지만,
type Person {
name: string;
age: number;
greet(phrase: string): void;
}
let user1: Person = {
name: "daeun",
age: 19,
greet(phrase: string) {
console.log(phrase + " " + this.name);
},
};
user1.greet("Hi There");
type으로 써도 정상적으로 컴파일된다. 왜 그럼 쓸까?
해답을 알아보기 전에 내가 생각했던 이유는
- interface는 '객체'만 구조화할 수 있기 때문이라고 생각했다.
+ 추가적인 이유는 클래스가 생성하는 인스턴스의 구조를 명확히 할 수 있기 때문이다.
interface Greetable {
name: string;
greet(phrase: string): void;
}
class Person implements Greetable {
name: string;
age = 19;
constructor(n: string) {
this.name = n;
}
greet(phrase: string) {
console.log(phrase + " " + this.name);
}
}
let user1 = new Person("daeun");
user1.greet("Hi There");
console.log(user1);
이러면 user1이라는 인스턴스는 interface를 준수하는 객체가 된다.