---
id: P-REINFORCE-AUTO-696914
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - Union Types"
---

# [[Union Types]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> Union Types는 TypeScript에서 하나의 값이 여러 타입 중 하나를 가질 수 있음을 나타내는 기능입니다 [1, 2]. 수직선(`|`) 기호를 사용하여 타입들을 연결하며(예: `string | number`), `any` 타입을 사용하는 것보다 타입 안전성을 유지하면서도 유연한 코드를 작성할 수 있게 해줍니다 [1-3]. 집합론적 관점에서는 두 개 이상의 타입 집합을 합친 합집합(Union)으로 기능합니다 [4, 5].

## 📖 구조화된 지식 (Synthesized Content)
- **기본 동작과 공통 필드 제약**: Union Types로 정의된 변수는 지정된 타입들(`A | B`) 중 하나의 값을 가질 수 있습니다 [6, 7]. 그러나 이 변수의 속성에 접근할 때, TypeScript는 타입 안전성을 위해 유니온에 속한 **모든 타입에 공통으로 존재하는 멤버에만 접근을 허용합니다** [2]. 예를 들어 `Bird | Fish` 타입의 변수라면, 런타임에 어떤 타입이 들어올지 확실하지 않으므로 두 인터페이스에 모두 정의된 메서드만 호출할 수 있습니다 [2].
- **타입 좁히기 (Type Narrowing)**: 특정 타입에만 속한 속성을 읽거나 쓰려면 먼저 변수의 타입을 좁혀야 합니다 [8]. 이를 위해 `typeof`, `instanceof`, `in` 연산자를 사용하거나, 사용자 정의 타입 가드(Custom Type Guards)를 활용하여 코드가 실행되는 분기(흐름) 내에서 정확한 타입을 추론하도록 해야 합니다 [8-10].
- **식별 가능한 유니온 (Discriminated Unions)**: Union Types를 더욱 강력하게 만드는 핵심 패턴입니다 [7, 11]. 유니온을 구성하는 각 객체 타입에 리터럴 타입의 공통 식별자 속성(예: `kind: 'circle' | 'rectangle'`)을 선언하여, 이 속성을 비교하는 것만으로 TypeScript가 올바른 타입으로 좁힐 수 있게 돕습니다 [12-14]. 이 패턴은 상태 머신을 모델링하거나 잘못된 상태의 조합을 원천적으로 막을 때 매우 효과적입니다 [15, 16].
- **완전성 검사 (Exhaustiveness Checking)**: 식별 가능한 유니온을 `switch` 문으로 분기 처리할 때, `never` 타입을 활용해 모든 분기를 안전하게 처리했는지 컴파일러에게 검사받을 수 있습니다 [17-19]. 만약 유니온 타입에 새로운 변형(Variant)이 추가되었는데 `switch` 문에서 처리하지 않았다면, `never` 타입 검사에 걸려 컴파일 에러가 발생하므로 누락을 방지할 수 있습니다 [18-20].
- **Type Brands의 대안**: 값의 종류가 미리 정해져 있는 상황이라면, 복잡한 Branded Types를 사용하는 것보다 알려진 값들을 Union Types로 구성하는 것이 값의 종류를 정확히 설명하는 데 유리할 수 있습니다 [21, 22].

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

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Intersection Types]], [[Discriminated Unions]], [[Type Narrowing]], [[Set Theory]]
- **Projects/Contexts:** [[TypeScript Type System]], [[State Management]]
- **Contradictions/Notes:** Union Types는 값의 유연성을 보장(`A` 혹은 `B` 중 하나 허용)하지만, 객체 속성에 접근할 때는 유니온의 모든 타입에 공통으로 존재하는 속성(교집합 형태)만 접근할 수 있는 엄격함이 있으므로 이를 다룰 때는 항상 타입 좁히기(Type Narrowing)가 선행되어야 합니다 [2, 8].

---
*Last updated: 2026-04-18*
- Raw Source: [[00_Raw/2026-04-20/Union Types.md]]
---
