---
id: [[P-Reinforce|P-Reinforce]]-AI-BRANDED-TYPES
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.99
tags: [TypeScript, Branded Types, Nominal Typing, Type Safety]
last_reinforced: 2026-04-20
---

# [[Branded-Types|Branded-Types]] (브랜디드 타입)

## 📌 한 줄 통찰 (The Karpathy Summary)
> "본질적으로 같은 `string`이라도, 유저 ID와 주문 ID는 엄격히 구분되어야 한다." 타입스크립트에 가짜 딱지를 붙여 '이름 기반 타입 시스템(Nominal Typing)'을 흉내 내는 고수의 기술이다.

## 📖 구조화된 지식 (Synthesized Content)
- **Problem: [[Structural Typing|Structural Typing]]**:
    - 타입스크립트는 구조가 같으면 같은 타입으로 본다. `type UserId = string; type PostId = string;`일 때, 둘을 바꿔 써도 컴파일러는 잡지 못한다.
- **[[Solution|Solution]]: Intersecting with Unique Tag**:
    - `type UserId = string & { __brand: "UserId" };` 처럼 실제 데이터에는 없지만 타입 세계에만 존재하는 고유 속성을 추가한다.
- **Type Guards**:
    - 단순 캐스팅(`as UserId`)보다는 검증 함수를 거쳐야만 해당 타입을 얻을 수 있게 설계하여 데이터 무결성을 보장한다.

## ⚠️ 모순 및 업데이트 (RL Update)
- 런타임에는 이 '낙인(Brand)'이 사라진다. 따라서 브랜디드 타입은 오직 컴파일 타임의 실수 방지용이다. 시스템이 매우 거대해져서 ID 값들이 혼동될 우려가 있는 엔터프라이즈급 프로젝트에서 그 가치가 증명된다.

## 🔗 지식 연결 (Graph)
- Related: [[TypeScript_Type_Safety|TypeScript_Type_Safety]] , [[Branded-Types-for-Nominal-Typing|Branded-Types-for-Nominal-Typing]]
- Foundation: [[Clean-Architecture-TypeScript|Clean-Architecture-TypeScript]]
