개발/JavaScript, TypeScript

TypeScript에서 interface와 type 중 무엇을 사용할까?

꾸럭 2025. 2. 19. 09:58

TypeScript에서는 interface type을 모두 사용하여 객체의 구조를 정의할 수 있다. 하지만 두 가지 개념 사이에는 미묘한 차이가 있다. 이번 글에서는 interface type의 특징과 차이점, 그리고 언제 어떤 것을 사용하는 것이 더 적절한지 정리해보겠다.

interface type의 특징

interface

interface는 TypeScript에서 객체의 구조를 정의하는 기본적인 방법으로, 다음과 같은 특징을 가진다.

  • 객체의 구조를 명확하게 정의할 수 있다.
  • 선언 병합(Declaration Merging)이 가능하다.
  • implements 키워드를 사용하여 클래스에서 타입 검사를 수행할 수 있다.
  • extends 키워드를 사용해 확장할 수 있다.

type

type은 보다 범용적인 타입 정의 방식으로, 객체뿐만 아니라 다양한 타입을 정의할 때도 사용된다.

  • 유니온 타입(|) 또는 인터섹션 타입(&)을 지원한다.
  • 튜플이나 특정한 타입 조합을 정의할 수 있다.
  • 기본 타입(alias)을 정의할 때 사용할 수 있다.
  • interface처럼 선언 병합이 불가능하지만, & 연산자를 사용하면 유사한 효과를 낼 수 있다.

 

언제 interface를 사용할까?

  • 클래스에서 implements 키워드를 사용할 때이다. 다른 정적 타입 언어(Java, C# 등)에서의 interface + implements 조합과 동일한 개념이다.
  • 확장이 필요한 경우이다. type의 인터섹션(&)도 확장이 가능하지만, interface extends를 사용하는 것이 의미 전달 측면에서 더 직관적이다.
  • React 컴포넌트의 Props를 정의할 때이다. 단순 객체라면 type을 사용하는 것이 간편하지만, React 컴포넌트의 Props는 확장될 가능성이 크기 때문에 interface를 사용하는 것이 유리하다.
  • 다만 선언 병합은 지양하자. interface의 특징인 선언 병합은 코드 가독성이 떨어질 수 있으므로 피하는 것이 좋다. 필요하다면 type의 인터섹션(&)을 활용하는 것이 낫다.

 

언제 type을 사용할까?

  • 유니온(|) 또는 인터섹션(&) 타입을 사용할 경우
  • 튜플이나 특정한 타입 조합을 만들 때
  • 기본 타입(alias)을 정의할 때

 

TypeScript에 interface type이 공존하는 이유

TypeScript는 JavaScript에 정적 타입 시스템을 추가한 언어로, 다양한 프로그래밍 스타일을 지원하기 위해 interface type 두 가지 개념을 제공한다. 초기에는 interface를 기본으로 사용하도록 권장되었지만, 점차 type의 활용도가 높아지면서 개발자들은 필요에 따라 적절히 섞어서 사용하고 있다.

이론적으로는 type만 사용해도 개발이 가능하다. 그래서 일부 팀에서는 별다른 고민 없이 type만 쓰는 컨벤션을 정하기도 한다. 그러나 type만 사용한다고 해서 최선의 선택이 되는 것은 아니다.

 

다른 언어에서의 type interface의 활용

TypeScript의 interface 개념은 Java나 C# 같은 정적 타입 언어의 interface와 유사하다. 이들 언어에서도 interface를 이용해 클래스의 구조를 정의하고 강제할 수 있다. 반면, TypeScript의 type은 Go나 Scala의 타입 별칭(type alias)과 유사한 개념으로 볼 수 있다.

 

결론: interface type을 어떻게 사용할까?

내가 생각하는 현재 시점(2025년 기준)에서 가장 합리적인 선택은 다음과 같다.

  • 클래스에서 implements 키워드를 사용할 때는 interface를 쓰자.
  • 확장이 필요한 경우 interface를 사용하자.
  • React 컴포넌트의 Props를 정의할 때 interface를 쓰는 것이 좋다.
  • 그 외에는 type을 사용하는 것이 일반적으로 더 유연하고 편리하다.
  • 선언 병합은 피하자.
 

팀 컨벤션이 가장 중요하다

위의 가이드는 절대적인 정답은 아니다. 시간이 지나면서 더 나은 방법이 나올 수도 있다.

가장 중요한 것은 팀의 컨벤션을 따르는 것이다. 새로운 컨벤션을 정한다면 이 글이 참고할 만한 가치가 있겠지만, 기존의 컨벤션이 있다면 이를 유지하는 것이 팀 협업에서 더 중요하다.

사실 interface와 type을 그날 기분대로 골라 써도 휴먼 에러를 크게 유발하거나 하는 것은 아니기 때문에 이미 자리잡은 컨벤션이 있다면 그것을 지키는 것이 우선이다.

결론적으로, interface type을 적절히 조합하여 사용하고, 팀 내부의 일관성을 유지하는 것이 가장 좋은 접근 방식이다.

728x90