프론트엔드 개발 · 중급
TypeScript에서 여러 타입 중 특정 타입의 값을 안전하게 처리하기 위해 사용하는 타입 가드(Type Guards)의 종류와 각각의 사용 사례를 설명해 주세요.
힌트 · `typeof`, `instanceof`, `in` 연산자와 사용자 정의 타입 가드를 활용하여 런타임에 타입을 확인하고 범위를 좁히는 방법을 설명합니다.
typeofinstanceofin 연산자사용자 정의 타입 가드타입 좁히기
모범답안
타입스크립트에서 타입 가드는 여러 타입이 섞여 있을 때 특정 타입의 값을 안전하게 다루기 위해 사용합니다. 런타임에 타입을 확인하고 범위를 좁혀서 타입 에러를 방지하죠.
가장 기본적인 건 typeof 연산자입니다. 원시 타입(string, number, boolean 등)을 구분할 때 유용합니다. 예를 들어 typeof x === 'string'처럼 사용해서 문자열인 경우에만 특정 로직을 실행할 수 있습니다.
instanceof 연산자는 클래스의 인스턴스를 확인할 때 씁니다. x instanceof MyClass처럼 사용해서 특정 클래스의 인스턴스인 경우에만 해당 클래스의 메서드를 호출할 수 있습니다.
in 연산자는 객체에 특정 프로퍼티가 있는지 확인할 때 사용합니다. 'name' in x처럼 사용해서 객체 x에 'name' 프로퍼티가 있는 경우에만 접근할 수 있습니다.
마지막으로 사용자 정의 타입 가드를 만들 수도 있습니다. x is MyType 형태의 반환 타입을 가지는 함수를 만들어서 복잡한 타입 조건을 검사할 수 있습니다. 이를 통해 타입 체커에게 특정 조건 하에서 변수의 타입을 알려줄 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 TypeScript 면접 질문
- 'type' 별칭(Type Alias)은 무엇이며, 'interface'와 비교했을 때 어떤 상황에서 'type' 별칭을 사용하는 것이 더 적합한가요?
- TypeScript에서 함수에 타입을 정의하는 방법은 무엇이며, 매개변수와 반환 값에 타입을 명시하는 이유를 설명해주세요.
- 'enum' 타입은 무엇이며, TypeScript에서 'enum'을 사용하는 주된 목적과 간단한 예시를 들어 설명해주세요.
- 공통된 속성을 가진 여러 인터페이스를 조합하여 판별된 유니언(Discriminated Unions)을 구성하는 방법과 이를 통해 얻을 수 있는 타입 안정성의 이점에 대해 설명해 주세요.
- TypeScript에서 제네릭(Generics)을 사용하는 주요 목적은 무엇이며, 제네릭 제약 조건(Generic Constraints)은 언제, 왜 필요한지 구체적인 코드 예시와 함께 설명해 주세요.
- TypeScript의 내장 유틸리티 타입 중 `Partial<T>`, `Pick<T, K>`, `Omit<T, K>` 각각의 역할과 실제 프로젝트에서 어떤 상황에 유용하게 활용될 수 있는지 설명해 주세요.