---
id: [[P-Reinforce|P-Reinforce]]-AUTO-OTYP-001
category: Unified
confidence_score: 0.95
tags: [auto-reinforced, typescript, software-engineering, encapsulation]
last_reinforced: 2026-04-20
---

# [[Opaque-Types|Opaque-Types]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> "속을 알 수 없는 완벽한 블랙박스: 타입의 내부 구현은 숨기고 노출된 인터페이스로만 소통하게 강제하여, 코드 간의 결합도를 낮추고 안전성을 극대화하는 강력한 캡슐화 기법."

## 📖 구조화된 지식 (Synthesized Content)
오페이크 타입(Opaque Types)은 데이터의 실제 구조나 기본 타입을 외부에 노출하지 않고, 오직 특정 모듈이나 함수군을 통해서만 조작할 수 있도록 제한하는 타입 설계 방식입니다.

1.  **TypeScript에서의 구현**:
    *   완벽한 Opaque Type 지원이 기본은 아니지만, `unique symbol`이나 `Branded Types`를 활용하여 외부에서의 직접 접근을 차단함.
    ```typescript
    // 해당 모듈 밖에서는 __brand에 접근할 수 없으므로 사실상 Opaque함.
    export type Currency = number & { [[readonly|readonly]] __brand: unique symbol };
    ```
2.  **핵심 이점**:
    *   **리팩토링 유연성**: 타입의 내부 구현(예: `number`에서 `string`으로 변경)을 바꿔도 인터페이스만 유지하면 외부 코드는 수정할 필요가 없음.
    *   **잘못된 조작 방지**: `Currency` 타입끼리의 산술 연산은 허용하되, 일반 `number`와의 혼용은 차단하여 비즈니스 로직 오류를 방지.
3.  **명목적 타이핑과의 차이**:
    *   명목적 타이핑이 '이름을 붙여 구별'하는 데 집중한다면, 오페이크 타입은 '내부를 숨겨 보호'하는 데 더 큰 목적이 있음.

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌**: 이전에는 과도한 추상화가 성능 저하를 일으킨다며 경원시되기도 했으나, 현대의 컴파일러(TypeScript, Rust 등)는 런타임 오버헤드 없이 이러한 제약 조건을 적용할 수 있게 됨(Zero-cost Abstraction).
- **정책 변화(RL Update)**: 보안이 중요한 모듈(암호화 키, 세션 ID 등)에서는 원시 데이터가 실수로 로깅되거나 노출되는 것을 막기 위해 모든 내부 데이터를 오페이크 타입으로 래핑하는 보안 정책이 표준화됨.

## 🔗 지식 연결 (Graph)
- **Related**: [[Nominal-Typing-in-TypeScript|Nominal-Typing-in-TypeScript]], [[Encapsulation-and-Information-Hiding|Encapsulation-and-Information-Hiding]], Type-Theory, [[Domain-Driven Design (DDD)|Domain-Driven Design (DDD)]]
- **Modern Tech/Tools**: Flow (Opaque [[Type Alias|Type Alias]]), TypeScript [[Branding|Branding]].
---
