전체 목록
TypeScriptEasy#130

type과 interface의 차이와 선택 기준을 설명해주세요.

#TS#type#interface#타입설계

답변 포인트

확장 방식과 표현 가능한 타입 범위를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

interface는 객체 계약과 확장, 선언 병합에 자연스럽고 type은 union, tuple, mapped type 등 더 넓은 표현이 가능합니다. 팀 컨벤션과 표현하려는 타입의 성격에 맞춰 선택합니다.

interface는 객체 계약과 확장, 선언 병합에 자연스럽고 type은 union, tuple, mapped type 등 더 넓은 표현이 가능합니다. 팀 컨벤션과 표현하려는 타입의 성격에 맞춰 선택합니다.

핵심 개념

핵심 기준은 확장 방식과 표현 가능한 타입 범위입니다. 이 개념은 단순한 용어가 아니라, 실제 코드나 시스템에서 반복적으로 생기는 문제를 다루기 위해 등장했습니다.

TypeScript는 런타임 전에 실수를 발견하고 코드의 의도를 타입으로 문서화하기 위해 사용합니다. 좋은 타입은 자동완성, 리팩터링, 협업 안정성을 높여줍니다.

동작 흐름

  1. 먼저 어떤 문제가 있는지 확인합니다.
  2. 이 개념이 그 문제를 어떤 기준으로 나누거나 해결하는지 봅니다.
  3. 실제 코드에서는 입력, 상태, 실행 순서, 비용이 어떻게 바뀌는지 확인합니다.
  4. 마지막으로 한계와 부작용을 함께 점검합니다.

실제 예시

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

type UserRole = "admin" | "member" | "guest";
type UserWithRole = User & { role: UserRole };

interface는 객체 계약을 확장하기 좋고, type은 union이나 조합 타입에 강합니다. 팀 컨벤션을 정해 일관되게 쓰는 것이 중요합니다.

실무에서 주의할 점

  • 타입 단언으로 오류를 덮기보다 타입을 좁히는 코드를 먼저 고려합니다.
  • 런타임 검증이 필요한 외부 입력은 타입만으로 안전해지지 않습니다.
  • 공개 타입은 너무 구체적이어도, 너무 느슨해도 유지보수가 어려워집니다.

함께 연결해서 보면 좋은 키워드

TS, type, interface, 타입설계

정리

한 줄로 정리하면, interface는 객체 계약과 확장, 선언 병합에 자연스럽고 type은 union, tuple, mapped type 등 더 넓은 표현이 가능합니다. 팀 컨벤션과 표현하려는 타입의 성격에 맞춰 선택합니다. 실무에서는 개념을 적용하는 조건과 적용하지 않았을 때 생기는 문제까지 함께 이해하는 것이 중요합니다.

type과 interface의 공통점과 차이

둘 다 객체 타입을 표현할 수 있지만 확장 방식과 표현 범위가 다릅니다.

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

type UserId = string;
type ApiResult<T> = { ok: true; data: T } | { ok: false; error: Error };

선택 기준

상황추천
객체 모델, public APIinterface
유니온/튜플/조건부 타입type
선언 병합이 필요한 라이브러리 확장interface
복잡한 타입 조합type

확장 방식

TypeScript
interface Admin extends User {
  role: 'admin';
}

type Admin2 = User & { role: 'admin' };

대부분의 애플리케이션 코드에서는 팀 컨벤션이 더 중요합니다. “객체는 interface, 조합은 type”처럼 단순한 규칙을 두면 일관성을 유지하기 쉽습니다.

관련 질문

같은 카테고리/태그 기준