---
id: P-REINFORCE-AUTO-981211
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]. 수직선 기호(`|`)를 사용하여 각 타입을 구분하며(예: `number | string`), 함수 매개변수나 변수가 다양한 형태의 데이터를 수용해야 할 때 유용하게 쓰입니다 [1, 3]. 유니온 타입은 여러 데이터 타입의 가능성을 열어두면서도, `any` 타입을 사용하는 것보다 훨씬 더 엄격한 타입 안정성을 제공합니다 [1].

## 📖 구조화된 지식 (Synthesized Content)
- **유니온 타입의 기본 동작과 한계**: 
  유니온 타입으로 선언된 변수는 조합된 타입 중 어느 하나의 값을 가질 수 있는 유연성을 제공합니다 [2]. 그러나 유니온 타입 값의 멤버(속성이나 메서드)에 접근할 때는, 조합된 모든 타입에 공통으로 존재하는 멤버에만 접근할 수 있다는 제약이 있습니다 [1]. 예를 들어 `Bird | Fish` 타입의 경우, 두 타입 모두에 존재하는 공통 멤버만 호출 시 컴파일러에서 에러를 뱉지 않습니다 [1].
- **타입 좁히기(Type Narrowing)**:
  공통되지 않은 특정 타입 전용 속성을 안전하게 사용하려면 타입을 좁혀야 합니다 [4, 5]. `typeof`, `instanceof` 연산자, `in` 연산자, 혹은 사용자 정의 타입 가드(Type Guards) 등을 활용하여 런타임 전에 유니온 타입을 특정한 단일 타입으로 좁혀 데이터에 접근할 수 있습니다 [4, 6, 7].
- **식별 가능한 유니온(Discriminated Unions / Tagged Unions)**:
  객체 형태의 유니온에서 가장 강력하게 쓰이는 패턴입니다 [8, 9]. 조합된 객체 타입들에 공통된 리터럴 속성(예: `kind`, `type`, `status`)을 식별자(Discriminant)로 추가하여, 서로 다른 데이터 구조를 구분합니다 [10-13]. 이를 통해 `switch`나 `if` 구문에서 제어 흐름 분석을 적용해 타입을 자동으로 좁힐 수 있으며, 불가능하거나 유효하지 않은 상태를 원천적으로 차단합니다 [10, 12, 14, 15].
- **완전성 검사(Exhaustiveness Checking)**:
  식별 가능한 유니온을 처리할 때 `never` 타입을 활용해 처리되지 않은 누락 케이스가 없는지 컴파일러가 확인하도록 설정할 수 있습니다 [10, 13, 16-18]. 기존 유니온에 새로운 타입 멤버가 추가되었는데 분기 처리 로직이 업데이트되지 않았다면 즉시 컴파일 에러를 발생시켜, 예기치 않은 버그와 런타임 에러를 방지합니다 [13, 14, 18].
- **적용 사례와 장점**:
  유니온 타입은 논리적인 "OR" 관계를 모델링하므로, 단일 데이터가 다양한 폼을 가질 수 있는 API 응답 객체 처리, 라우터 상태 모델링, Redux와 같은 복잡한 상태 관리(Action 및 Reducers) 등에 최적화되어 있습니다 [14, 19-21]. 명시적이고 문서화된 구조를 통해 뛰어난 코드 자동완성과 테스트 편의성을 제공합니다 [22].

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

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Intersection Types(교집합 타입)]], [[Discriminated Unions(식별 가능한 유니온)]], [[Type Narrowing(타입 좁히기)]], [[never 타입]]
- **Projects/Contexts:** [[React State Management(리액트 상태 관리)]], [[API Response Handling(API 응답 처리)]], [[Redux Reducers(리덕스 리듀서)]]
- **Contradictions/Notes:** TypeScript에서 값을 다형적으로 수용할 수 있게 해준다는 점에서는 `any` 타입과 비슷해 보일 수 있으나, `any`는 모든 타입 체킹 제약이 풀려버리는 반면, 유니온 타입은 오직 정의된 타입들 사이에서의 가능성만 허용하기 때문에 코드의 타입 안전성을 강력하게 유지합니다 [1, 23]. 또한 값이 명확히 정해진 세트 중 하나임을 알 수 있는 경우, 별도의 클래스 계층구조나 `any`를 사용하는 것보다 유니온 타입을 사용하는 것이 훨씬 적합합니다 [1, 23, 24].

---
*Last updated: 2026-04-18*
- Raw Source: [[00_Raw/2026-04-20/유니온 타입(Union Types).md]]
---
