TypeScript 21강: Type Alias와 Interface 차이점 완벽 비교
Type Alias와 Interface의 개념 이해하기
TypeScript에서는 객체, 함수, 배열 등 다양한 구조의 타입을 정의할 수 있습니다. 이때 사용되는 대표적인 도구가 Type Alias와 Interface입니다. 이 둘은 유사한 기능을 제공하지만, 상황에 따라 어느 쪽을 사용하는 것이 더 적절할 수 있습니다. 본 글에서는 Type Alias와 Interface의 차이점과 용도에 대해 깊이 있게 비교해보겠습니다.
Type Alias란 무엇인가?
Type Alias는 `type` 키워드를 사용해 타입에 이름을 붙여주는 기능입니다. 기본 타입, 유니언 타입, 튜플 등 다양한 타입을 표현할 수 있으며, 매우 유연한 방식입니다.
type User = {
name: string;
age: number;
};
Type Alias는 복잡한 타입을 간단하게 재사용할 수 있게 해줍니다. 예를 들어, 유니언 타입이나 튜플 타입도 타입 별칭으로 정의할 수 있습니다.
type Status = 'success' | 'error' | 'loading';
type Point = [number, number];
Interface란 무엇인가?
Interface는 객체의 구조를 정의할 때 사용되는 키워드입니다. 객체 지향 프로그래밍 스타일에 더 가깝고, 클래스와의 호환성이 좋습니다.
interface User {
name: string;
age: number;
}
Interface는 확장과 구현이 가능한 구조이기 때문에, 클래스 기반 설계에 잘 맞습니다. 아래처럼 다른 인터페이스를 상속받아 새로운 인터페이스를 만들 수 있습니다.
interface Person {
name: string;
}
interface Employee extends Person {
employeeId: number;
}
Type Alias와 Interface의 주요 차이점
두 문법은 비슷한 목적을 가지지만, 다음과 같은 차이점이 존재합니다:
항목 | Type Alias | Interface |
---|---|---|
확장성 (확장/합성) | 교차 타입(& ) 사용 |
extends 로 상속 |
유니언/튜플 지원 | 지원됨 | 지원되지 않음 |
재정의/병합 | 불가 | 가능 (Declaration Merging) |
클래스 구현 | 불가 | 가능 |
사용 방식 | 간결하고 유연한 타입 정의 | 객체 구조 정의 및 확장성 |
Type Alias를 사용하기 좋은 경우
Type Alias는 다음과 같은 상황에서 더 적합합니다:
- 유니언 타입, 튜플 타입 등 복합적인 타입을 정의할 때
- 간단한 타입 구조를 빠르게 정의하고 싶을 때
- 조건부 타입 또는 매핑된 타입을 사용할 때
type ApiResponse = 'success' | 'error';
type Coordinate = [number, number];
Interface를 사용하기 좋은 경우
Interface는 다음과 같은 경우에 더 유리합니다:
- 클래스와 함께 사용해 구조를 구현하고 싶을 때
- 확장이 자주 일어나는 객체 타입을 다룰 때
- 다른 라이브러리나 프레임워크와의 호환성이 중요한 경우 (예: React Props 정의)
interface Props {
title: string;
}
const Header = (props: Props) => {
return <h1>{props.title}</h1>;
}
Declaration Merging: Interface만 가능한 기능
Declaration Merging은 같은 이름의 interface를 여러 번 선언하면 자동으로 병합되는 기능으로, Type Alias에는 없는 강력한 기능입니다.
interface User {
name: string;
}
interface User {
age: number;
}
// 결과적으로 아래와 같이 병합됨
// interface User {
// name: string;
// age: number;
// }
이 기능은 외부 라이브러리의 타입을 확장하거나 보완할 때 매우 유용합니다.
정리: 언제 어떤 걸 사용할까?
TypeScript 공식 문서에 따르면, 객체 구조를 정의할 때는 interface를 기본으로 사용하고, 유니언 타입이나 고급 타입 구성이 필요할 때 type을 사용하는 것이 권장됩니다.
- interface: 클래스, 객체 구조 정의, 확장성이 필요한 경우
- type: 유연한 타입 조합, 유니언/튜플/조건부 타입이 필요한 경우
결론
TypeScript에서 Type Alias
와 Interface
는 각각의 장점과 특징을 가지고 있으며, 올바른 상황에 맞춰 사용하는 것이 중요합니다. 인터페이스는 객체 지향 설계에 적합하고, 타입 별칭은 고급 타입 조합에 강력한 유연성을 제공합니다. 이 두 도구를 잘 활용하면 유지보수성과 가독성이 높은 타입 안전 코드를 작성할 수 있습니다.