---
id: P-REINFORCE-AUTO-328E4F
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 타입 가드 (Type Predicates)"
---

# [[타입 가드 (Type Predicates)]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> 타입 가드(Type Predicates)는 런타임에 반환되는 불리언(boolean) 값을 기반으로 TypeScript의 타입 시스템이 매개변수의 타입을 더 구체적으로 좁힐 수(Narrowing) 있도록 돕는 함수입니다 [1]. 주로 유니언 타입이나 알 수 없는 데이터를 다룰 때 변수가 특정 타입 구조를 만족하는지 검증하기 위해 사용됩니다 [2, 3]. 다만 TypeScript 컴파일러는 타입 가드 내부의 검증 로직이 정확한지까지는 확인하지 않으므로, 개발자 스스로 로직의 정확성을 보장해야 합니다 [1].

## 📖 구조화된 지식 (Synthesized Content)
- **기본 개념과 역할:** 타입 가드 함수는 런타임에는 불리언 값을 반환하지만, 타입 시스템에게는 반환 결과를 바탕으로 타입 좁히기(Type narrowing)를 적용해야 함을 알려주는 역할을 합니다 [1]. `unknown` 변수를 분석하거나 유니언 타입 중에서 특정 타입을 구별할 때, 데이터의 타입을 확신할 수 있게 해주는 안전한 도구로 활용됩니다 [2, 3].
- **사용 문법과 동작:** 커스텀 타입 가드 함수를 정의할 때는 반환 타입 위치에 `is` 키워드(예: `value is Positive`)를 사용하는 특수한 문법을 적용합니다 [1-3]. `if` 조건문 내에서 이 함수를 호출하여 `true`가 반환되면, TypeScript는 해당 조건 블록 내에서 값이 타입 가드가 보장하는 구체적인 타입임을 인지하게 됩니다 [1]. 커스텀 함수 외에도 `typeof`나 `instanceof`, `in` 연산자 역시 타입 가드로 동작하여 자동으로 타입을 좁혀줍니다 [3, 4].
- **Branded Types 생성 및 단언 함수와의 결합:** 브랜디드 타입(Branded Types)처럼 구조적으로 동일하지만 의미가 다른 타입을 명시할 때, 불안전한 `as` 단언(assertion) 대신 타입 가드 함수를 사용하여 유효성을 검증하는 것이 더 안전한 접근법입니다 [1, 5]. 또한 `if` 래퍼(wrapper)를 작성해야 하는 단점을 보완하기 위해, 값이 일치하지 않으면 에러를 던지는 타입 단언 함수(Assertion Functions)와 결합하여 사용하기도 합니다 [6].
- **한계점 및 주의사항:** 타입 가드는 코드 상에서 조건문 래퍼(`if` 구문 등)를 요구하기 때문에 `as` 단언에 비해 작성 공간을 더 차지하고 런타임 로직이 추가된다는 단점이 있습니다 [6]. 무엇보다 TypeScript는 타입 가드의 내부 로직이 실제로 해당 타입의 의도와 정확히 일치하는지를 검사하지 않고 전적으로 코드 작성자에게 책임을 맡기기 때문에, 논리적 오류가 있을 경우 타입 안전성을 위협할 수 있습니다 [1].

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Type Narrowing]], [[Branded Types]], [[Union Types]]
- **Projects/Contexts:** [[알 수 없는 외부 데이터 검증 (unknown types)]], [[유니언 타입 식별 및 상태 분기 처리]]
- **Contradictions/Notes:** 브랜디드 타입 등의 값을 강제할 때 타입 가드가 `as` 단언에 비해 "종종 더 안전한 방법"으로 소개되기도 하나 [5], 정작 컴파일러가 타입 가드의 내부 구현 로직을 검증해 주지 않기 때문에 본질적으로는 `as` 단언보다 훨씬 더 타입에 안전하다고 볼 수는 없다는 주의 사항이 함께 언급됩니다 [1].

---
*Last updated: 2026-04-18*
- Raw Source: [[00_Raw/2026-04-20/타입 가드 (Type Predicates).md]]
---
