(Typescript) 타입 선언 방법 정리 2편, 인터페이스란? 타입 별칭과의 차이
이전 포스팅에서 다양한 타입 선언 방법에 대해서 포스팅했다.
그중에서 타입 별칭이라는 선언 방법이 있었는데, 이 타입 별칭이라는 선언 방법이 인터페이스 선언 방법과 상당히 유사하다.
인터페이스와 타입별칭은 사용 방법도, 생김새도 비슷하지만 약간의 차이점이 있다.
이번 포스팅에서는 둘의 차이점을 정리한다.
먼저 타입 별칭이 무엇인지 궁금하다면 하단 포스팅을 참고하면 된다.
(Typescript) 타입스크립트, 타입 선언 방법 정리 1편
타입스크립트에서는 타입을 선언할 수 있는 방법이 다양하다. 워낙 다양하다 보니 타입을 선언하는 방법이 헷갈리기에 해당 포스팅으로 정리하고자 한다. 기본 타입 정의자바스크립트의
lemu-devblog.tistory.com
1. 인터페이스는 객체 타입만 정의할 수 있다.
인터페이스는 객체 타입을 묘사하는데 특화된 선언 방법이다.
즉 객체만 선언할 수 있고 그 외의 타입은 선언할 수 없다.
사용방법은 타입별칭으로 객체를 선언하는 것과 유사하다.
타입별칭은 객체 타입뿐만이 아니라 다양한 타입을 정의할 수 있다.
//인터페이스를 사용한 객체 타입 정의
interface Human{
name: string;
age: number;
job: string;
}
//타입별칭을 사용한 객체 타입 정의
type Human = {
name: string;
age: number;
job: string;
}
2. 인터페이스는 확장이 가능하다.
인터페이스는 extend 키워드를 사용해 확장이 가능하다.
타입 별칭도 확장이 가능하지만 인터섹션(&)을 사용해야 하므로
확장은 인터페이스가 더 편리하다.
interface Human{
name: string;
age: number;
job: string;
}
//extends 키워드를 활용해 확장
interface Doctor extends Human{
field: string;
}
type Human = {
name: string;
age: number;
job: string;
}
//&를 사용해 확장
type Doctor = Human & {
field: string;
}
3. 인터페이스는 선언 병합이 가능하다.
동일한 이름의 인터페이스가 여려변 선언되면 이는 병합된다.
하지만 타입별칭은 불가능하다.
interface Human{
name: string;
}
interface Human{
age: number;
}
interface Human{
job: string;
}
결론
결론적으로 객체의 타입을 정의할 때에는 인터페이스를 사용하는 것이 더 편리하다.
인터페이스는 타입별칭이 제공하지 않는 extend(확장) 기능과 병합기능을 제공하기 때문이다.
타입별칭 (Type Alies) | 인터페이스(interface) | |
선언 가능 타입 | 모든 타입 | 객체 |
확장 | &을 활용해 확장 | extends 키워드로 확장 |
병합 | 불가능 | 가능 |