처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.05.19 68

Haskell의 Profunctor Equipment: 추상화의 끝판왕을 들여다보기

Hacker News 원문 보기

갑자기 무슨 이야기인가요?

범주론(Category Theory)을 프로그래밍에 접목하는 걸로 유명한 Bartosz Milewski가 또 하나의 흥미로운 글을 발표했어요. 이번 주제는 Profunctor Equipment라는, 이름만 들어도 머리가 지끈해지는 개념인데요. Haskell을 깊게 파본 분이라면 한 번쯤 들어봤을 Lens, Prism, Optics 같은 라이브러리의 밑바닥에 깔린 수학적 구조가 바로 이 Profunctor라는 친구거든요.

쉽게 말하면 Profunctor는 "양쪽으로 변환 가능한 함수"라고 생각하면 됩니다. 일반 함수가 a -> b처럼 한 방향으로만 흐른다면, Profunctor는 입력 쪽에서도 받아들이고 출력 쪽에서도 내보내는 양방향 통로 같은 거예요. 그리고 "Equipment"는 여기에 추가적인 구조 — 즉 데이터를 자르고 붙이고 변형하는 데 필요한 도구 세트 — 를 얹은 형태입니다.

왜 이게 중요하냐면

프로그래밍에서 우리는 항상 데이터 구조의 일부분만 다루고 싶을 때가 있어요. 예를 들어 거대한 JSON 객체에서 특정 필드 하나만 읽고 쓰고 싶다거나, 리스트 안의 특정 조건에 맞는 원소만 골라서 업데이트하고 싶다거나. 이런 "부분 접근" 패턴을 일반화한 게 Optics(렌즈, 프리즘, 트래버설 등)인데요. 이게 왜 그렇게 깔끔하게 작동하는지에 대한 수학적 설명이 바로 Profunctor예요.

Milewski는 이번 글에서 Equipment라는 개념을 통해 "두 카테고리 사이의 관계" 를 다루는 법을 보여줘요. 한 카테고리는 객체와 함수로 이루어진 보통의 세계, 다른 한 카테고리는 그 위에 얹힌 Profunctor들의 세계인 거죠. 그리고 이 둘이 서로 어떻게 상호작용하는지를 명확하게 표현하는 도구가 Equipment입니다. 이게 뭐냐면, 마치 1층에 일반 함수들이 살고 2층에 Profunctor들이 사는 빌딩이 있는데, 둘 사이를 오가는 엘리베이터와 계단을 정확하게 정의한 거라고 보면 돼요.

코드로 보면 어떤 느낌이냐면

Haskell에서는 이런 식으로 표현됩니다. Profunctor p라는 타입 클래스가 있고, 거기엔 dimap :: (a' -> a) -> (b -> b') -> p a b -> p a' b'라는 함수가 정의돼 있어요. 입력 쪽은 거꾸로(contravariant), 출력 쪽은 똑바로(covariant) 변환할 수 있다는 의미예요. Equipment는 여기에 더해서 "두 Profunctor를 합성하는 방법", "하나를 다른 하나로 끌어올리는 방법" 같은 추가 연산을 제공합니다.

실제로 lens 라이브러리에서 Lens s a = forall p f. (Strong p, Functor f) => p a (f a) -> p s (f s) 같은 시그니처를 본 적이 있다면, 그게 다 이 Profunctor 기반 정의예요. 처음 보면 외계어 같지만, 일단 이해하고 나면 "아, 모든 종류의 부분 접근이 이 하나의 패턴으로 통일되는구나" 하는 깨달음이 오죠.

업계 맥락에서 보면

이런 고급 추상화는 Haskell 커뮤니티뿐 아니라 Scala의 Cats, PureScript, 심지어 Rust의 일부 라이브러리에도 영향을 주고 있어요. Scala의 Monocle 라이브러리도 Profunctor 기반 Optics를 채택했고, Java나 Kotlin 진영에서도 Arrow 같은 함수형 라이브러리에서 비슷한 시도를 하고 있습니다. 즉 "데이터의 부분에 접근하는 통합된 방법" 이라는 아이디어는 언어를 가리지 않고 퍼지고 있어요.

한국 개발자에게는

솔직히 말해서 당장 실무에 가져다 쓰는 개념은 아니에요. 하지만 함수형 프로그래밍이나 타입 시스템에 관심이 있다면, 이런 글 하나를 천천히 곱씹어 보는 게 큰 도움이 됩니다. 추상화의 끝을 보고 나면, 평소에 쓰던 React의 컴포넌트 합성이나 TypeScript의 제네릭 같은 것도 다르게 보이거든요. "왜 이렇게 설계됐지?"에 대한 답이 보이기 시작해요.

마무리

Profunctor Equipment는 데이터 접근과 변환을 가장 일반적인 형태로 표현하는 수학적 도구예요. 당신이 가장 어렵게 느꼈던 추상 개념은 무엇이었고, 그걸 이해했을 때 코드 보는 눈이 어떻게 달라졌나요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.