핵심 요약
- 타입스크립트의 유니온 타입과 OCaml의 합(Sum) 타입은 널(null) 안전성을 다루는 방식에서 겉모습은 비슷하지만 근본 원리가 다릅니다.
- 유니온 타입은 합집합 개념으로 조건문 검사를 통한 '타입 정제'를 쓰는 반면, 합 타입은 라벨이 붙은 데이터 구조를 '패턴 매칭'으로 분해합니다.
- 현대 언어들의 널 추적 구현 원리와 타입 시스템의 수학적·실무적 차이를 명확히 짚어줍니다.
요약 함수형 프로그래밍의 주요 기능들이 최근 타입스크립트(TypeScript), 러스트(Rust), 스칼라(Scala) 등 주류 언어에 활발히 도입되고 있습니다. 그중에서도 널 포인터 예외로 인한 런타임 오류를 방지하고 컴파일 타임에 안전성을 확보하는 '널 추적(Null-tracking)'이 대표적인 기능으로 꼽힙니다.
글쓴이에 따르면 현대 언어들의 널 추적 방식은 크게 '유니온 타입(Union type)'과 '합 타입(Sum type)'의 두 가지 접근법으로 나뉩니다. 두 방식 모두 문법적으로는 파이프 기호(|)를 사용하는 경우가 많아 겉보기에는 비슷해 보이지만, 실제 내부 동작과 개념적 토대는 완전히 다릅니다.
타입스크립트가 채택한 유니온 타입은 집합론에 기초합니다. 예를 들어 'string | null'은 문자열 집합과 널 집합의 합집합(A ∪ B)으로 정의됩니다. 이 방식에서는 조건문(if-branch) 내에서 특정 값(예: === null)을 검사하면 컴파일러가 해당 스코프 안에서 변수의 타입을 더 구체적인 하위 집합으로 좁혀주는 '타입 정제(Type refinement)'를 거쳐 널을 처리합니다.
반면 OCaml 같은 ML 계열 언어는 대수적 데이터 타입(ADT)인 합 타입(Sum type, A + B)을 통해 널을 다룹니다. OCaml의 'option' 타입처럼 각 원소에는 고유한 라벨(예: Some 또는 None)이 붙어 있으며, 컴파일러의 특별한 문법 추론 대신 '패턴 매칭(Pattern-matching)'을 통해 명시적으로 래핑된 값을 꺼내 써야 합니다. 즉, 유니온 타입이 집합의 포함 관계와 타입 좁히기에 의존한다면, 합 타입은 고유 태그가 붙은 상자 구조를 패턴 매칭으로 분기 처리한다는 본질적인 차이가 있습니다.
Sponsored · 광고