Web

type vs Interface

sungjae0309 2026. 3. 15. 21:06

들어가기에 앞서 둘의 목적과 기능이 조금씩 다르므로 개념부터 알아보자

1. type 이란?

type은 말 그대로 "타입에 이름을 붙이는 것"이다.

이게 무슨 말인가 싶을텐데 코드를 예로 들자면, 

{
  name: string
  age: number
}

이 구조를 매번 쓰기 불편하기 때문에 이 타입에 이름을 붙이면, 

type User = {
     name: string
     age: number
}

이렇게 된다. 그리고 이제 이 구조를 사용할 땐

const user: User = {
  name: "sungjae",
  age: 25
}

이렇게 사용해주면 된다. 이렇게 User 라는 이름으로 쉽게 사용할 수 있다. 

따라서 핵심은 type =  어떤 타입 구조에 이름을 붙이는 것이다. 

 

 

2. interface란?

interface는 "객체의 구조"를 정의하는 것이다.

이 객체는 어떤 속성을 가지고 있고, 그 속성은 어떤 타입이어야 한다 라고 명시하는 것이다. 

이것도 코드를 예로 들자면,

interface User {
  name: string
  age: number
}

이걸 사용하려면

const user: User = {
  name: "sungjae",
  age: 25
}

 

이렇게 사용하면 된다. 여기서 interface는
이 객체는 name(string)과 age(number)를 가져야 한다" 라는 객체 구조를 정의한 것이다. 

 

 

3. 그래서 차이점이 뭔가? 

구분 type interface
개념 타입에 이름 붙이기 객체 구조 정의
객체 타입 정의  가능 가능 
유니온 타입 정의 가능 불가능
함수 타입 정의  가능 제한적
Declaration Merge 불가능  가능 

 

차이점은 이러한데.. 유니온 타입 정의는 뭐고 Declaration Merge는 뭘까? 아래에 정리를 해봤다

 

4. 유니온 타입

유니온 타입은 여러 타입 중 하나가 될 수 있는 타입이다.

즉, 선택지를 여러 개 주고 한 개를 선택할 수 있다는 말이다. 

type에선 가능하고 interface에선 불가능하다. 

 

코드를 예로 들자면,

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

Status는 "success" 또는 "error" 또는 "loading" 중 하나가 될 수 있다. 

이걸 사용하기 위해선

let status: Status

status = "success"
status = "error"

이렇게 사용하면 되는데, 

status = "done"

이건 허용 되지 않는다. 왜냐? 선언한 Status에 "done"이 없기 때문이다. 

 

5. Declaration Merge 

Declaration Merge는 같은 이름의 선언을 합치는 TypeScript 기능이다. 

 

코드를 예로 들자면,

interface User {
  name: string
}

interface User {
  age: number
}

코드상으로는 이렇게 2개로 나뉘지만 TypeScript는 내부적으로 아래와 같이 이해한다.

interface User {
  name: string
  age: number
}

이렇게 자동으로 같은 이름의 선언을 합치는 것이 Declaration merge이다.

하지만, type은 같은 이름을 다시 선언할 수 없기 때문에 interface에서만 가능하다. 

 

type으로 코드를 예로 들자면,

type User = {
  name: string
}

type User = {
  age: number
}

이 코드는 에러가 발생하게 된다. 

 

'Web' 카테고리의 다른 글

useEffect와 Axios를 이용한 영화 API 연동 실습  (0) 2026.03.30
useState vs useReducer  (0) 2026.03.27
Open live server VS npm run dev  (0) 2026.03.25
함수형 컴포넌트, State  (0) 2026.03.17
BEM 방법론  (0) 2026.03.15