프론트엔드 개발 · 중급
TypeScript에서 타입 별칭(Type Aliases)과 인터페이스(Interfaces)는 모두 객체 타입을 정의하는 데 사용됩니다. 두 가지의 주요 차이점은 무엇이며, 각각 어떤 상황에서 더 적합한지 설명해 주세요.
힌트 · 인터페이스는 선언적 병합(Declaration Merging)이 가능하며 주로 객체 타입을 정의하는 데 사용되고, 타입 별칭은 유니언/인터섹션 타입, 원시 타입 등 더 다양한 타입에 대한 별칭을 정의할 수 있습니다.
선언 병합유니온 타입원시 타입구현extends/implements
모범답안
TypeScript에서 타입 별칭과 인터페이스는 객체 타입을 정의하는 데 사용될 수 있지만, 몇 가지 중요한 차이점이 있습니다.
가장 큰 차이점은 인터페이스는 "선언 병합(Declaration Merging)"이 가능하다는 점입니다. 같은 이름의 인터페이스가 여러 번 선언되면 컴파일러가 이를 자동으로 병합합니다. 반면, 타입 별칭은 같은 이름으로 여러 번 선언할 수 없습니다.
또한, 타입 별칭은 객체 타입뿐만 아니라 유니온 타입, 인터섹션 타입, 원시 타입 등 더 넓은 범위의 타입에 대한 별칭을 정의할 수 있습니다. 예를 들어 type StringOrNumber = string | number; 와 같이 사용할 수 있습니다.
일반적으로 객체 타입을 정의하고 확장 가능성이 높다면 인터페이스를 사용하는 것이 좋습니다. 클래스에서 implements 키워드를 사용하여 인터페이스를 구현할 수도 있습니다. 반면, 유니온 타입이나 튜플 타입 등 복잡한 타입을 정의하거나, 단순히 기존 타입을 더 명확하게 표현하고 싶을 때는 타입 별칭이 더 적합합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 TypeScript 면접 질문
- TypeScript에서 제네릭(Generics)을 사용하는 주요 목적은 무엇이며, 제네릭 제약 조건(Generic Constraints)은 언제, 왜 필요한지 구체적인 코드 예시와 함께 설명해 주세요.
- TypeScript의 내장 유틸리티 타입 중 `Partial<T>`, `Pick<T, K>`, `Omit<T, K>` 각각의 역할과 실제 프로젝트에서 어떤 상황에 유용하게 활용될 수 있는지 설명해 주세요.
- JavaScript 라이브러리를 TypeScript 프로젝트에서 사용해야 할 때 `.d.ts` 선언 파일이 어떤 역할을 하는지 설명하고, 직접 선언 파일을 작성해야 하는 경우와 기존 선언 파일을 활용하는 방법을 비교하여 설명해 주세요.
- TypeScript의 데코레이터(Decorators)는 무엇이며, 클래스, 메서드, 속성 데코레이터의 기본적인 사용 목적과 실제 애플리케이션에서 어떤 방식으로 활용될 수 있는지 예시를 들어 설명해 주세요.
- 복잡한 비동기 데이터 처리 로직에서, 특정 조건에 따라 반환 타입이 동적으로 결정되는 함수를 TypeScript로 어떻게 안전하게 모델링하고 구현할 수 있을까요? 특히, 제네릭과 조건부 타입을 활용하여 Union Type을 분해하고 재구성하는 고급 기법을 설명해주세요.
- 서드파티 라이브러리(예: `express` 또는 `lodash`)의 타입 정의가 불완전하거나, 애플리케이션 특정 요구사항에 맞춰 기존 타입을 확장해야 할 때, TypeScript에서 안전하고 모듈화된 방식으로 이를 처리하는 방법을 설명해주세요. 특히, 전역 선언 확장과 모듈 확장 간의 차이점 및 사용 시나리오를 비교하여 설명해주세요.