TypeScript
type 과 interface 차이점
2025년 12월 18일
목차
🟢 TypeScript: type vs interface 비교
TypeScript에서는 객체, 함수, 클래스 타입을 정의할 때 type과 interface 두 가지를 쓸 수 있어요.
둘 다 비슷하지만, 미묘한 차이가 있고 활용에 따라 장단점이 달라집니다.
1️⃣ 기본 문법
interface
interface User {
id: number;
name: string;
email?: string; // 선택 속성
}type
type User = {
id: number;
name: string;
email?: string; // 선택 속성
}기본 객체 타입 정의는 거의 동일
2️⃣ 확장 & 합치기
interface는 extends 가능
interface Person {
name: string;
}
interface Employee extends Person {
salary: number;
}type은 교차 타입(Intersection) 으로 확장
type Person = { name: string };
type Employee = Person & { salary: number }- type은
&연산자를 사용해 다른 타입과 합칠 수 있음
3️⃣ 선언 병합 (Declaration Merging)
- interface는 같은 이름으로 여러 번 선언 가능 → 자동으로 합쳐짐
interface User {
id: number;
}
interface User {
name: string;
}
// User는 { id: number; name: string }으로 병합- type은 선언 병합 불가 → 같은 이름으로 두 번 선언하면 에러
type User = { id: number };
type User = { name: string }; // ❌ 에4️⃣ 타입 표현력
- type은
primitive, union, tuple등 다양한 타입 표현 가능
type ID = number | string;
type Point = [number, number];- interface는 객체 형태의 타입만 선언 가능
5️⃣ 요약 비교
| 구분 | interface | type |
|---|---|---|
| 객체 정의 | ✅ | ✅ |
| 함수 타입 | ✅ 가능 | ✅ 가능 |
| 상속/확장 | extends 가능 | & 연산으로 가능 |
| 선언 병합 | 가능 | 불가 |
| 유니언, 튜플 등 | ❌ | ✅ |
| 장점 | 선언 병합 가능, 객체 중심 | 더 다양한 타입 표현 가능 |