범주 이론(Category Theory)은 수학적 구조와 그 사이의 관계를 추상적으로 연구하는 분야다. 함수형 프로그래밍에서 모나드, 함자, 자연 변환 등의 개념적 기반을 제공한다.
범주(Category)의 정의
범주 C는 다음으로 구성:
Ob(C) : 대상(Object)들의 모임
Mor(C): 사상(Morphism/Arrow)들의 모임
각 사상 f: A → B 에 대해:
- 합성: g ∘ f (f 후 g)
- 항등 사상: id_A : A → A
법칙:
결합법칙: (h ∘ g) ∘ f = h ∘ (g ∘ f)
항등법칙: id_B ∘ f = f = f ∘ id_A
프로그래밍에서의 범주
haskell
-- Hask 범주: Haskell 타입과 함수
-- 대상: 타입 (Int, String, ...)
-- 사상: 함수 (a -> b)
-- 합성: (.)
-- 항등: id
(.) :: (b -> c) -> (a -> b) -> (a -> c)
(g . f) x = g (f x)
-- 법칙 확인
(h . g) . f == h . (g . f) -- 결합법칙
id . f == f -- 왼쪽 항등
f . id == f -- 오른쪽 항등
함자(Functor)
범주 사이의 구조 보존 매핑.
haskell
class Functor f where
fmap :: (a -> b) -> f a -> f b
-- 함자 법칙:
-- fmap id = id
-- fmap (g . f) = fmap g . fmap f
-- 예: Maybe 함자
fmap (+1) (Just 3) -- Just 4
fmap (+1) Nothing -- Nothing
함자 사이의 사상.
haskell
-- α : F ⇒ G
-- 자연 변환 조건: α_B ∘ F(f) = G(f) ∘ α_A
-- 예: safeHead :: [a] -> Maybe a
safeHead :: [a] -> Maybe a
safeHead [] = Nothing
safeHead (x:_) = Just x
모나드와 범주 이론
모나드 = 자기 함자 범주 위의 모노이드
모나드 T의 구조:
η : Id → T (unit/return)
μ : T∘T → T (join/flatten)
법칙:
μ ∘ Tη = id_T = μ ∘ ηT (단위원)
μ ∘ μT = μ ∘ Tμ (결합)
관련 개념