TypeScript에서 interface와 type의 차이점

1. 핵심 개념 비교

  • interface 객체 타입(함수, 클래스, 인덱스 서명 등)을 기술하는 데 최적화됨. 구조적 형식(Shape) 정의에 중점을 두며, OOP 환경에서 유연하게 확장 가능.
  • type 복잡한 타입 연산이나 추상화를 위한 타입 별칭으로, 다양한 타입(공용 타입, 튜플, 원시 값 등)을 표현 가능. 기능적으로 더 넓은 범위를 지원.

2. 기능적 차이점

특성 interface type
선언 통합 동일 이름으로 추가 가능 동일 이름 시 오류 발생
상속 방식 extends 키워드 사용 & 연산자로 교차 타입 생성
구현 지원 클래스 직접 구현 가능 객체 타입만 구현 가능
공용 타입 불가능 가능 (예: `type ID = string
매핑/조건 타입 불가능 가능 (예: keyof, 조건 타입)
함수 타입 호출 서명 정의 가능 화살표 함수 문법 지원 (예: () => void)

3. 실습 예제

타입 확장

// interface 상속
interface Person {
  name: string;
}
interface Student extends Person {
  studentId: number;
}

// type 교차 타입
type Person = { name: string };
type Student = Person & { studentId: number };

공용 타입 정의

// type 활용
type Identifier = string | number;
// interface로는 직접 정의 불가

선언 통합

// interface 자동 통합
interface User { name: string; }
interface User { age: number; }
const user: User = { name: "John", age: 25 }; // 통합 성공

// type 중복 오류
type User = { name: string };
type User = { age: number }; // 오류 발생

복잡한 타입 연산

// type의 매핑 타입 지원
type Properties = "name" | "age";
type Profile = {
  [K in Properties]: string; // 매핑 구조
};

// interface에서는 해당 기능 제한

4. 사용 패턴 가이드

  • interface 적합 시나리오

  • 객체 구조 정의 (선언 통합 필요 시)

  • 클래스 구현 (implements 키워드 사용 시)

  • 외부 라이브러리 확장 (새로운 속성 추가)

  • type 적합 시나리오

  • 복합 타입 설계 (공용 타입, 튜플 등)

  • 고급 타입 연산 (매핑, 조건 타입 등)

  • 일회성 타입 별칭 정의

5. 비교 요약

분야 interface type
설계 목적 객체 구조 기술 (OOP 중심) 모든 타입 대상 별칭 제공
유연성 제한적 (객체 구조에 집중) 다양한 타입 처리 가능
확장 방법 선언 통합, extends 교차 타입, 조건 타입
적용 영역 공용 API, 클래스 구현 복합 타입, 임시 타입

실제 개발 시: 객체 타입 정의는 두 방식 모두 가능하나, 명확한 구조 관리를 위해 interface를 우선적으로 사용하고, 복잡한 타입 로직에는 type을 보조적으로 활용하는 것이 좋습니다.

태그: TypeScript Interface type 타입_별칭 객체_타입

6월 10일 01:06에 게시됨