4.0 KiB
4.0 KiB
id, category, confidence_score, tags, last_reinforced, github_commit
| id | category | confidence_score | tags | last_reinforced | github_commit | |
|---|---|---|---|---|---|---|
| P-REINFORCE-AUTO-94A8AB | 10_Wiki/💡 Topics/Programming & Language | 0.90 |
|
2026-04-20 | [P-Reinforce] Continuous Worker - 브랜디드 타입 |
브랜디드 타입
📌 한 줄 통찰 (The Karpathy Summary)
지식 요약 정보 추출 중...
📖 구조화된 지식 (Synthesized Content)
- 등장 배경 및 동작 원리: TypeScript의 타입 시스템은 객체의 형태가 같으면 호환을 허용하는 구조적 타이핑(덕 타이핑)을 따르기 때문에, 완전히 다른 맥락의 원시 데이터(예: 이메일과 이름)가 혼용되는 실수를 잡기 어렵습니다 [5, 6]. 이를 막기 위해 컴파일 타임에만 존재하는 고유 속성(
__brand,unique symbol등)을 원래의 타입과 교집합(&)으로 묶어 비구조적(명목적) 타입 매칭과 유사한 효과를 얻습니다 [3, 7, 8]. - 주요 활용 사례:
- 수치 데이터 보호: 일반
number타입 대신, 양수만 허용하거나 특정 통화(EUR, GBP 등), 0에서 1 사이의 퍼센트 값만을 허용하는 브랜디드 타입을 선언하여 논리적 오류를 방지합니다 [9-11]. - 문자열 제약 및 식별자: XSS 공격을 방지하기 위해 검증이 완료된 문자열(Sanitized String)을 명시하거나, 데이터베이스의 여러 식별자(UserId, OrderId, CommentId 등)가 서로 잘못 할당되는 것을 막을 때 사용됩니다 [5, 12-14].
- 수치 데이터 보호: 일반
- 생성과 브랜드 강도:
- 타입 단언(
as), 타입 가드(Type Predicates), 단언 함수(Assertion Functions) 등을 통해 런타임 검증 로직을 거친 후 일반 값을 브랜디드 타입으로 변환할 수 있습니다 [8, 15, 16]. unique symbol을 사용해 브랜드를 정의하면 모듈 간에도 고유성이 보장됩니다 [3]. 구현 방식에 따라 약한 브랜드(기본 타입으로 암시적 변환 허용), 강한 브랜드(명시적 캐스팅 필수), 슈퍼 브랜드(외부로의 변환 철저히 차단)로 분류하여 적용할 수 있습니다 [5, 17, 18].
- 타입 단언(
- 라이브러리와의 통합 및 대안:
ts-brand,Effect TS같은 커뮤니티 라이브러리를 통해 브랜디드 타입 생성을 자동화하거나 유틸리티 함수를 사용할 수 있습니다 [19, 20]. 또한, 런타임 유효성 검사 라이브러리인Zod는.brand()메서드를 지원하여 런타임 검증과 컴파일 타임의 브랜디드 타입을 통합할 수 있게 돕습니다 [21].- 브랜디드 타입은 시스템 복잡성을 증가시킬 수 있으므로, 제한된 값의 목록을 다룰 때는 유니온(Union) 타입, 열거형(Enum), 또는 템플릿 리터럴 타입 같은 대안이 더 적절할 수 있습니다 [22-25].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: 구조적 타이핑, 명목적 타이핑, Opaque Types
- Projects/Contexts: 도메인 기반 설계(DDD), 런타임 유효성 검사(Zod)
- Contradictions/Notes: TypeScript에서 공식적으로 브랜디드 타입(명목적 타이핑)을 내장 기능으로 지원하지는 않으며, 개발자가
&연산자와 가상 속성을 이용해 우회적으로 구현하는 방식입니다 [6, 8]. 또한, 이 기법은 코드의 정밀성을 높여주지만 복잡성 역시 증가시키므로, 실제 이점이 단점을 상회하는지 신중히 판단하고 대안(예: 단순 Union이나 Enum)을 사용하는 방법도 함께 고려해야 합니다 [22, 26].
Last updated: 2026-04-18
- Raw Source: 00_Raw/2026-04-20/브랜디드 타입.md