코딩기록

TS) interface와 type 의 차이 본문

프론트/리액트

TS) interface와 type 의 차이

뽀짝코딩 2025. 2. 20. 11:15
728x90

 

TypeScript에서 type과 interface는 둘 다 타입을 정의하는 역할을 하지만, 몇 가지 차이가 있음 .


1. 기본적인 차이점

type interface

용도 다양한 타입(객체, 유니온, 맵드 타입 등)을 정의할 때 사용 객체의 구조(프로퍼티와 메서드)를 정의할 때 사용
확장(상속) &(인터섹션)으로 확장 extends 키워드로 확장
중복 선언 가능 여부 ❌ 불가능 (덮어쓰기 됨) ✅ 가능 (자동으로 병합됨)
유니온 타입 지원 ✅ 가능 ❌ 불가능
맵드 타입 지원 ✅ 가능 ❌ 불가능

2. 타입 상속(확장) 방식 비교

(1) interface의 확장 (extends)

인터페이스는 extends 키워드를 사용하여 확장할 수 있음.

interface Person {
  name: string;
  age: number;
}

interface Employee extends Person {
  jobTitle: string;
}

const employee: Employee = {
  name: "Alice",
  age: 30,
  jobTitle: "Developer",
};

✅ extends를 사용하면 기존 인터페이스를 확장하여 새로운 인터페이스를 만들 수 있음


(2) type의 확장 (인터섹션 &)

type을 확장할 때는 &(인터섹션)을 사용.

type Person = {
  name: string;
  age: number;
};

type Employee = Person & {
  jobTitle: string;
};

const employee: Employee = {
  name: "Alice",
  age: 30,
  jobTitle: "Developer",
};

✅ &를 사용하여 여러 타입을 합칠 수 있음


3. 중복 선언 가능 여부

(1) interface는 자동 병합(O)

interface User {
  name: string;
}

interface User {
  age: number;
}

const user: User = {
  name: "John",
  age: 25,
}; // 정상 동작

✅ 동일한 interface 이름을 중복 선언하면 자동으로 병합됨


(2) type은 중복 선언 불가(X)

type User = {
  name: string;
};

type User = {
  age: number;
}; // ❌ 오류: 중복된 타입 선언 불가

❌ type은 같은 이름으로 두 번 선언할 수 없음


4. type만 가능한 기능

(1) 유니온 타입 사용 가능

type Status = "success" | "error" | "loading";

✅ type은 유니온 타입을 정의할 수 있지만, interface는 불가능함.


(2) 맵드 타입 사용 가능

type ReadonlyUser = {
  readonly [K in "id" | "name" | "email"]: string;
};

✅ type은 맵드 타입을 활용하여 동적으로 타입을 생성할 수 있음.


결론: 언제 type과 interface를 사용할까?

상황 추천

객체 타입 정의 interface (가독성 & 확장성 좋음)
확장(상속)해야 하는 경우 interface (extends 지원, 병합 가능)
유니온 타입, 맵드 타입이 필요할 때 type (더 유연함)
여러 타입을 합칠 때 type (& 인터섹션 사용)

요약

  • **interface**는 객체의 구조를 정의하고 확장(상속)에 강함. (extends 지원, 자동 병합)
  • **type**은 유니온, 맵드 타입, 인터섹션 등 더 유연한 타입을 정의할 수 있음.
  • 단순한 객체 타입 정의라면 interface, 다양한 타입 조합이 필요하다면 type을 사용하면 좋음! 😊

 

 

 

 

 

 

 

 

 

참고 쳇지피티, 제로베이스강의

 

 

 

반응형
Comments