[TypeScript] 타입 별칭 vs 인터페이스

ttining·2025년 3월 17일

1️⃣ 타입 별칭 (type alias)

type User = {
  id: number;
  name: string;
}
  • type 키워드를 사용하여 새로운 타입을 정의
  • 객체 뿐만 아니라, 유니온 타입, 튜플, 함수 타입 등을 정의할 수 있다.

✅ 다양한 타입을 표현할 때 유용하다.

type StringOrNumber = string | number; // 유니온 타입
type Coordinates = [number, number]; // 튜플
type Callback = (value: string) => void; // 함수 타입


2️⃣ 인터페이스 (interface)

interface User {
  id: number;
  name: string;
}
  • interface 키워드를 사용하여 객체의 구조를 정의
  • 오직 객체 타입만 정의 가능 (유니온 타입, 튜플 등은 불가능)
  • extends 키워드로 확장 가능 (다른 인터페이스를 상속받을 수 있다.)

✅ 인터페이스는 확장이 쉬워서 객체지향 프로그래밍(OOP) 스타일에 적합하다.

interface Admin extends User {
  permissions: string[];
}


3️⃣ 타입 별칭 🆚 인터페이스 비교

비교 항목타입 별칭 (type alias)인터페이스 (interface)
사용 키워드typeinterface
객체 타입 정의✅ 가능✅ 가능
유니온 타입, 튜플, 함수 타입 정의✅ 가능❌ 불가능
확장 (상속) 가능 여부&(인터섹션) 사용extends 사용
중복 선언 가능 여부❌ 불가능 (덮어쓰기 됨)✅ 가능 (자동으로 병합됨)


4️⃣ 언제 타입 별칭을 사용해야 할까?

✅ 유니온 타입, 튜플, 함수 타입이 필요할 경우

type ID = string | number; // 유니온 타입
type Position = [number, number]; // 튜플 타입
type LogFn = (message: string) => void; // 함수 타입

✅ 객체 타입을 간단하게 정의할 경우

type User = {
  id: number;
  name: string;
};

✅ 인터페이스처럼 확장해야 할 필요가 없을 경우

type Point = { x: number; y: number };


5️⃣ 언제 인터페이스를 사용해야 할까?

✅ 객체 타입을 확장(상속)해야 할 경우

interface User {
  id: number;
  name: string;
}

interface Admin extends User {
  permissions: string[];
}

✅ 여러 개의 같은 인터페이스를 선언하여 병합하고 싶을 경우

interface User {
  id: number;
}

interface User {
  name: string;
}

const user: User = { id: 1, name: "ttining" }; // 자동 병합됨
  • type은 같은 이름으로 다시 선언할 경우, 오류가 발생하지만
    interface는 자동으로 병합된다.

✅ OOP 스타일로 클래스를 설계할 경우

interface Animal {
  name: string;
  makeSound(): void;
}

class Dog implements Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound(): void {
    console.log("멍멍!");
  }
}
  • interface는 클래스에서 구현할 때 유용하다.


🎯 정리

📌 타입 별칭 (type)

  • 유니온 타입, 튜플, 함수 타입을 정의할 때 사용
  • 확장이 필요 없는 간단한 객체 타입을 정의할 때 사용

📌 인터페이스 (interface)

  • 객체 지향 스타일(OOP)로 설계할 때 사용
  • 확장(상속)할 가능성이 있는 객체 타입을 정의할 때 사용
  • 같은 이름으로 타입을 병합하고 싶을 때 사용

💡 요약

  • 확장(상속)이 필요하면 interface 사용
  • 유니온 타입, 튜플, 함수 타입이 필요하면 type 사용
  • 둘 다 가능하지만 고민될 경우, interface를 우선 사용(OOP 스타일에서 더 자연스럽기 때문)
profile
내가 보려고 만든 벨로그 *'-'*

0개의 댓글