---
id: P-REINFORCE-AUTO-D05100
category: "10_Wiki/💡 Topics/Programming & Language"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 브랜디드 타입(Branded Types)"
---

# [[브랜디드 타입(Branded Types)|브랜디드 타입(Branded Types)]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> 지식 요약 정보 추출 중...

## 📖 구조화된 지식 (Synthesized Content)
* **등장 배경 및 원리**
  타입스크립트는 객체나 값의 형태(구조)에 기반하여 호환성을 판단하는 구조적 타이핑을 사용합니다. 이는 매우 유연하지만, `string`이나 `number`와 같은 기본 타입으로 모든 것을 표현하려는 '기본 타입에의 집착(Primitive Obsession)' 문제를 야기할 수 있습니다. 브랜디드 타입은 컴파일 타임에만 존재하는 `__brand` 속성이나 `unique symbol`을 타입에 교집합으로 엮어 고유한 표식을 부여함으로써 이 문제를 해결합니다.

* **주요 활용 사례**
  * **브랜디드 문자열(Branded Strings)**: XSS 공격을 방지하기 위해 사용자 입력 문자열과 검증된(Sanitized) 문자열을 구분하거나, URL과 IP 주소를 구별할 때 사용됩니다. 특히 도메인 기반 설계(DDD)에서 데이터베이스의 서로 다른 엔티티 ID(예: `UserId`와 `OrderId`)를 엄격히 분리하여 엉뚱한 식별자가 전달되는 실수를 방지합니다.
  * **브랜디드 숫자(Branded Numbers)**: 양수(Positive), 음수, 0이 아닌 수(NonZero)와 같이 특정한 특성을 가진 숫자를 표현하거나, USD와 EUR 같은 각기 다른 통화(Currency) 단위를 구분해 잘못된 연산을 방지하는 데 쓰입니다.

* **브랜디드 값의 생성 및 검증**
  브랜디드 타입의 가상 속성은 런타임에는 존재하지 않으므로, 값을 생성할 때 타입스크립트에게 해당 값이 브랜디드 타입임을 단언해주어야 합니다.
  * **`as` 단언(Type Assertions)**: 빠르고 간단하지만, 잘못된 값(예: `-1 as Positive`)을 단언할 위험이 있습니다.
  * **타입 조건자(Type Predicates) 및 타입 단언 함수(Assertion Functions)**: 런타임 유효성 검사 로직을 거친 후 올바른 경우에만 브랜디드 타입으로 취급되도록 안전하게 반환합니다.

* **브랜드의 강도(Variations)**
  * **Weak Brand** (`type T = string & { __brand: 'T' }`): 기본 타입으로의 암시적 변환은 허용되어 사용이 쉽지만, 엄격함은 상대적으로 떨어집니다.
  * **Strong Brand** (`type T = (string & { __brand: 'T' }) | { __brand: 'T' }`): 명시적인 캐스팅 없이는 기본 타입과 호환되지 않아 더 높은 수준의 격리를 보장합니다.
  * **Super Brand**: 외부 유출을 철저히 차단하기 위해 기본 타입과의 연관성을 끊어내고 가상의 속성만으로 구성된 가장 엄격한 타입입니다.

* **생태계 및 라이브러리 지원**
  브랜디드 패턴의 활용을 돕기 위해 `ts-brand`, `Effect TS`, `utility-types`, `taghiro` 등의 다양한 커뮤니티 라이브러리가 존재합니다. 또한 런타임 유효성 검사 라이브러리인 `Zod`의 `.brand()` 메서드와 결합하여 사용할 경우, 런타임 검증과 컴파일 타임의 브랜디드 타입을 완벽하게 연동할 수 있습니다.

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

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[구조적 타이핑(Structural Typing)|구조적 타이핑(Structural Typing)]], [[명목적 타이핑(Nominal Typing)|명목적 타이핑(Nominal Typing)]], [[기본 타입에의 집착(Primitive Obsession)|기본 타입에의 집착(Primitive Obsession)]], [[타입 조건자(Type Predicates)|타입 조건자(Type Predicates)]]
- **Projects/Contexts:** [[도메인 기반 설계(DDD)의 식별자 분리|도메인 기반 설계(DDD)의 식별자 분리]], [[Zod 런타임 유효성 검사 통합|Zod 런타임 유효성 검사 통합]], [[Effect TS 및 ts-brand 라이브러리 활용|Effect TS 및 ts-brand 라이브러리 활용]]
- **Contradictions/Notes:** 브랜디드 타입은 훌륭한 타입 안정성을 제공하지만, 코드의 개념적 복잡성을 증가시킨다는 단점이 있습니다. 소스 자료에서는 브랜디드 타입을 무분별하게 도입하기 전에 유니온(Unions) 타입, 열거형(Enums), 템플릿 리터럴 타입(Template Literal Types)과 같은 더 단순한 대안으로 문제를 해결할 수 있는지 먼저 고려할 것을 권장합니다. 또한, 서로 다른 브랜디드 숫자 타입 간의 이항 연산(더하기 등)을 수행할 때는 타입 에러가 발생하지 않으므로 사용 시 주의가 필요합니다.

---
*Last updated: 2026-04-18*
- Raw Source: 00_Raw/2026-04-20/브랜디드 타입(Branded Types).md
---
