카테고리 없음

TypeScript 21강: Type Alias와 Interface 차이점 완벽 비교

mystory55776 2025. 5. 21. 21:33

Type Alias와 Interface의 개념 이해하기

TypeScript에서는 객체, 함수, 배열 등 다양한 구조의 타입을 정의할 수 있습니다. 이때 사용되는 대표적인 도구가 Type AliasInterface입니다. 이 둘은 유사한 기능을 제공하지만, 상황에 따라 어느 쪽을 사용하는 것이 더 적절할 수 있습니다. 본 글에서는 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 AliasInterface는 각각의 장점과 특징을 가지고 있으며, 올바른 상황에 맞춰 사용하는 것이 중요합니다. 인터페이스는 객체 지향 설계에 적합하고, 타입 별칭은 고급 타입 조합에 강력한 유연성을 제공합니다. 이 두 도구를 잘 활용하면 유지보수성과 가독성이 높은 타입 안전 코드를 작성할 수 있습니다.