---
id: [[P-Reinforce|P-Reinforce]]-AI-[[Branded-Types|Branded-Types]]
category: Unified
confidence_score: 0.95
tags: [TypeScript, TypeSystem, NominalTyping, Safety]
last_reinforced: 2026-04-20
---

# [[Branded-Types-for-Nominal-Typing|Branded-Types-for-Nominal-Typing]] (브랜디드 타입을 활용한 공칭 타입화)

## 📌 한 줄 통찰 (The Karpathy Summary)
> "모양(Structure)이 같다고 같은 데이터는 아니다." 타입스크립트의 구조적 타이핑 한계를 극복하기 위해 고유한 '인장(Brand)'을 찍어 데이터의 오용을 원천 차단하는 기법이다.

## 📖 구조화된 지식 (Synthesized Content)
- **Problem [[State|State]]ment**:
    - 타입스크립트는 기본적으로 구조가 같으면 같은 타입으로 간주한다([[Structural Typing|Structural Typing]]). 예를 들어 `Email`과 `UserId`가 둘 다 `string`이라면 서로 대입되는 사고를 막을 수 없다.
- **Implementation (The Brand Tag)**:
    - 타입 정의 시 교차 타입(`&`)을 사용하여 실제로는 존재하지 않는 속성을 추가한다.
    - `type Brand<K, T> = K & { __brand: T };`
    - `type Email = Brand<string, "Email">;`
- **[[Type Casting|Type Casting]]**:
    - 데이터를 생성할 때 `as Email`과 같은 단언(Assertion)을 사용하여 브랜드를 부여한다. 이후 시스템은 이 '낙인'이 찍힌 데이터만 특정 함수로 전달될 수 있도록 보장한다.

## ⚠️ 모순 및 업데이트 (RL Update)
- 브랜디드 타입은 런타임에는 실체가 없는 '컴파일 타임 전용 장치'다. 따라서 실제 런타임 데이터 유효성 검사(Zod 등)와 병행해야 하며, 지나친 사용은 코드 가독성을 해칠 수 있음에 주의해야 한다.

## 🔗 지식 연결 (Graph)
- Related: Structural-Type-System , Type-Safety
- Tools: Zod-Runtime-Validation
