Files
2nd/10_Wiki/Topics/Architecture/집합론(Set_Theory).md
T

73 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
category: Unified
tags: [auto-consolidated, technical-documentation]
title: [[집합론 (Set Theory)|집합론 (Set Theory]]
last_updated: 2026-05-02
---
# [[집합론 (Set Theory)|집합론 (Set Theory]]
## 📌 Brief Summary
> 집합론(Set Theory)은 객체들의 순서 없는 모임(unordered collections of objects)을 다루는 수학적 이론입니다 [1]. TypeScript의 맥락에서 집합론은 '타입(Type)'을 [[JavaScript|JavaScript]] 값들의 집합으로 이해하고 해석하는 모델로 사용됩니다 [2, 3]. 이를 통해 서브타입(subtype), 유니언(union), 인터섹션(intersection) 등의 복잡한 타입 시스템 동작 원리를 부분집합, 합집합, 교집합과 같은 수학적 집합 개념으로 명확하게 설명할 수 있습니다 [2, 4, 5].
---
> 집합론(Set Theory)은 TypeScript의 타입 시스템을 이해하는 핵심적인 철학이자 접근 방식으로, 타입을 가능한 자바스크립트 값들의 '집합'으로 간주하는 개념입니다 [1, 2]. 이 관점을 통해 타입 간의 호환성, 합집합과 교집합 연산, 그리고 타입의 서브타입(Subtype) 및 슈퍼타입(Supertype) 관계를 수학적 집합의 원리로 명확하게 설명할 수 있습니다 [2-5].
## 📖 Core Content
* **집합의 기본 개념 및 관계**
* **집합과 우주(Universe):** 집합은 중괄호(`{}`)로 표현되는 항목들의 모임이며, 요소가 하나도 없는 빈 집합(empty set)은 `∅`로 표기합니다 [1]. 존재하는 모든 가능한 값들을 포함하는 세계를 우주(universe)라고 부릅니다 [1].
* **부분집합(Subset):** 집합 A의 모든 요소가 집합 B에도 포함되어 있다면, A는 B의 부분집합이 됩니다 [6]. 빈 집합은 자기 자신을 포함한 모든 집합의 부분집합으로 간주됩니다 [6, 7].
* **집합의 핵심 연산**
* **합집합(Union, $\cup$):** 두 집합 A와 B 중 하나라도 속하는 모든 요소를 포함하는 집합입니다 [4].
* **교집합(Intersection, $\cap$):** 두 집합 A와 B 모두에 공통으로 속하는 요소들만의 집합입니다 [4].
* **차집합(Difference, $\setminus$):** 집합 A에는 속하지만 집합 B에는 속하지 않는 요소들의 집합입니다 [4].
* **TypeScript 타입 시스템과의 매핑 (Set Theory in TypeScript)**
* **타입과 값의 집합:** TypeScript의 타입은 프로그램이 생성할 수 있는 모든 JavaScript 값들의 집합으로 치환하여 생각할 수 있습니다 [2, 3]. `unknown` 타입은 모든 JS 값들의 집합(우주)이며, `never` 타입은 빈 집합(empty set, ∅)에 해당합니다 [2, 5].
* **부분집합과 할당(extends):** TypeScript에서 타입 A가 타입 B의 부분집합일 때(`A extends B`), A는 B에 할당 가능합니다 [2, 3]. 즉, 서브타입(subtype, 좁혀진 타입)은 부분집합(subset)에 해당하고, 슈퍼타입(supertype, 넓혀진 타입)은 상위집합(superset)에 해당합니다 [5, 8].
* **타입 연산자와 집합 연산의 일치:**
* 유니언 타입(`|`)은 집합의 합집합 연산자로 작동합니다 [2].
* 인터섹션 타입(`&`)은 집합의 교집합 연산자로 작동합니다 [2].
* `Exclude<A, B>` 유틸리티 타입은 유니언 타입에 한해 집합의 차집합 기능과 유사하게 동작합니다 [2, 5].
---
- **타입과 집합의 매핑 (Mapping Types to Sets)**: TypeScript에서 모든 타입은 자바스크립트 값들의 집합으로 이해될 수 있습니다 [1, 2]. 예를 들어, `string` 타입은 가능한 모든 문자열의 집합을 뜻하며, 특정 인터페이스 타입은 해당 구조를 만족하는 모든 객체의 집합입니다 [2]. 또한 `boolean``true``false` 단 두 개의 값만 포함하는 집합입니다 [5]. 세상의 모든 자바스크립트 값을 포함하는 전체 집합(Universe)은 `unknown` 타입에 해당하며, 아무런 값도 포함하지 않는 공집합(Empty Set, ∅)은 `never` 타입으로 대응됩니다 [1, 6, 7].
- **부분집합과 타입 호환성 (Subsets and Compatibility)**: 집합론에서 집합 A의 모든 요소가 집합 B에 포함될 때 A를 B의 부분집합이라고 정의합니다 [4]. 이를 TypeScript에 적용하면, 타입 A가 타입 B의 부분집합($A \subseteq B$)일 때 A는 B에 할당 가능한(assignable) 호환성을 가집니다 [2]. 즉, 서브타입(Subtype)은 부분집합(subset)으로, 슈퍼타입(Supertype)은 상위집합(superset)으로 이해할 수 있습니다 [5, 7]. 제네릭이나 조건부 타입에서 자주 사용되는 `A extends B` 문법 역시 "A가 B의 부분집합이다"라는 수학적 의미로 정확히 해석할 수 있습니다 [1, 7, 8].
- **집합 연산자 (Set [[Opera|Opera]]tors)**: TypeScript의 타입 조합 연산은 집합의 수학적 연산과 일치하게 동작합니다 [1, 7].
- **합집합(Union, )**: `|` 연산자로 표현되며, A 또는 B에 속한 모든 요소를 포함하는 집합을 만듭니다 [1, 4].
- **교집합(Intersection, ∩)**: `&` 연산자로 표현되며, A와 B 모두에 존재하는 요소를 포함하는 집합을 만듭니다 [1, 4].
- **차집합(Difference, \)**: TypeScript의 `Exclude<A, B>` 유틸리티 타입이 차집합과 근사하게 동작하여, A에는 있지만 B에는 없는 요소를 추출합니다 (단, 유니온 타입에서만 작동) [1, 4, 7].
## ⚖️ Trade-offs & Caveats
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
---
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
## 🔗 Knowledge Connections
- **Related Topics:** TypeScript TypeSystem, [[Structural Typing|Structural Typing]], Union and Intersection Types
- **Projects/Contexts:** TypeScript의 타입 연산과 조건부 타입(Conditional Types)의 동작 원리 이해 및 인터페이스 설계
- **Contradictions/Notes:** 객체(Object) 타입에 대한 `&`(인터섹션) 연산이나 `|`(유니언) 연산은 객체의 형태(Shape)를 단순히 결합하는 것이 아니라, 해당 객체 형태를 만족하는 '값들의 집합'에 대한 교집합 및 합집합 연산으로 작동합니다. 따라서 `{ name: string } & { age: number }`는 두 속성을 모두 가진 객체들의 교집합을 의미하게 됩니다 [9, 10].
---
*Last updated: 2026-04-18*
---
---
- **Related Topics:** TypeScript TypeSystem, [[Structural Typing|Structural Typing]], Union and Intersection Types
- **Projects/Contexts:** TypeScript Interface Design, Type Narrowing and Widening
- **Contradictions/Notes:** TypeScript의 `any` 타입은 집합론으로 완벽히 설명되지 않는 예외적인 존재입니다. 모든 세트를 부분집합으로 허용하면서도 동시에 스스로가 비어있을 수(`never`) 있는 '역설적인(paradoxical)' 집합으로 동작하기 때문에 일반적인 집합론의 논리를 따르지 않습니다 [7, 9].
---
*Last updated: 2026-04-18*
---