네, 5강에 오신 것을 환영합니다! 🖐️
많은 분들이 타입스크립트를 공부할 때 "도대체 interface랑 type이랑 뭐가 다른 거야?" 하고 가장 많이 헷갈려 하십니다. 사실 기능적으로는 90% 비슷하거든요.
하지만 미묘한 차이를 알면 상황에 딱 맞는 도구를 골라 쓸 수 있습니다. 오늘 이 논란을 아주 깔끔하게 종결시켜 드릴게요!
🚀 제5강. 객체를 정의하는 법 2 - 타입 별칭(Type Alias) vs 인터페이스
1. 타입 별칭(Type Alias): "너의 이름은..."
인터페이스가 **'정식 계약서'**라면, 타입 별칭(type)은 데이터에 **'별명(닉네임)'**을 붙여주는 것과 같습니다.
① 기본 사용법 type 키워드를 쓰고 = (등호)를 사용합니다. (변수 만드는 거랑 비슷하죠?)
// 인터페이스랑 거의 똑같아 보이죠?
type User = {
name: string;
age: number;
};
const kim: User = { name: "김코딩", age: 25 };
② 타입 별칭만 할 수 있는 것 (강력한 기능!) 인터페이스는 오직 '객체' 모양만 정의할 수 있지만, type은 모든 데이터에 별명을 붙일 수 있습니다.
// 1. 기본 타입에 별명 붙이기 (ID는 문자열이야!)
type ID = string;
// 2. 여러 타입을 묶기 (Union Type - 6강 예고!)
type Status = "success" | "error" | "loading";
const myId: ID = "user_123";
const currentStatus: Status = "success";
핵심: 단순한 데이터나, 여러 타입을 조합할 때는 type이 훨씬 편합니다.
2. 결정적 차이: "확장하는 방법"
이 부분이 면접 질문으로도 자주 나옵니다. "기존에 만든 것에 내용을 더 추가하고 싶을 때" 어떻게 할까요?
① 인터페이스: 상속(extends) 객체 지향 프로그래밍 느낌으로 extends를 써서 내용을 물려받습니다.
interface Animal {
name: string;
}
// Animal을 상속받아 size를 추가!
interface Bear extends Animal {
size: number;
}
// 결과: { name: string; size: number }
② 타입 별칭: 교차(& - Intersection) 두 가지 타입을 **'합친다'**는 느낌으로 & 기호를 씁니다.
type Animal = {
name: string;
}
// Animal과 size를 합침!
type Bear = Animal & {
size: number;
}
3. 실무 가이드: 그래서 뭘 써야 하나요?
이게 제일 중요하죠. 정답은 없지만, **실무 국룰(Convention)**은 있습니다.
- 객체(Object) 데이터를 정의할 때: 주로 **interface**를 씁니다. (확장이 편하고 에러 메시지가 좀 더 깔끔합니다.)
- 예: React 컴포넌트의 Props, API 응답 데이터 등
- 단순 타입, 유니온 타입, 튜플 등을 정의할 때: **type**을 씁니다.
- 예: type ID = string | number;
- 가장 중요한 원칙: 팀의 규칙을 따르세요! (팀에서 type만 쓰기로 했으면 type만 씁니다. 일관성이 생명입니다.)
선생님의 추천: 시작은 **interface**로 하세요. 그러다 "어? 인터페이스로는 표현이 안 되네?" 싶을 때(예: string | number) **type**으로 넘어가면 됩니다.
✍️ 5강 미니 퀴즈 & 실습
개념 정리를 위해 문제를 풀어볼까요?
문제 1. (코드 변환) 다음 인터페이스 코드를 type 별칭 문법으로 바꿔보세요.
// [Before] Interface
interface Point {
x: number;
y: number;
}
// [After] Type Alias
// 여기에 코드를 적어보세요
문제 2. (선택) 다음 중 interface로는 만들 수 없는 타입 정의는 무엇일까요?
- { name: string; age: number } (객체)
- string | number (문자열이거나 숫자 - 유니온 타입)
- { readonly id: number } (읽기 전용 속성)
✅ 정답 및 해설
- 문제 1 정답:
- 해설: interface 대신 type을 쓰고, 이름 뒤에 **= (등호)**를 붙여주면 끝입니다!
-
TypeScript
type Point = { x: number; y: number; }; - 문제 2 정답: 2번
- 해설: interface는 객체의 모양을 정의하는 설계도입니다. "A 아니면 B" 같은 **유니온 타입(|)**은 오직 **type**으로만 정의할 수 있습니다. 이것이 type이 필요한 결정적인 이유입니다.
고생하셨습니다! 👏 이제 interface와 type의 차이를 알았으니, 상황에 맞춰 골라 쓰는 센스를 갖추게 되셨습니다. Part 1 기초 체력 다지기가 거의 끝나가네요!
다음 6강에서는 방금 살짝 맛본, **"이거 아니면 저거?"**를 다루는 **유니온 타입(|)**과 **인터섹션 타입(&)**을 제대로 배워보겠습니다. 실무에서 정말 많이 쓰이는 **'유연한 코드'**의 핵심입니다.
'개발 > Typescript' 카테고리의 다른 글
| Typescript 완벽 가이드|기초부터 실전까지 한 번에 정리 - 7강 (0) | 2026.01.21 |
|---|---|
| Typescript 완벽 가이드|기초부터 실전까지 한 번에 정리 - 6강 (1) | 2026.01.21 |
| Typescript 완벽 가이드|기초부터 실전까지 한 번에 정리 - 4강 (0) | 2026.01.21 |
| Typescript 완벽 가이드|기초부터 실전까지 한 번에 정리 - 3강 (0) | 2026.01.21 |
| Typescript 완벽 가이드|기초부터 실전까지 한 번에 정리 - 2강 (0) | 2026.01.21 |