Functor, Monad in Functional Programming Fact Check

2025-09-06

Fact 0. 나는 Functor, Monad 잘 모른다. (이건 진짜 FACT)

  • 사실 잘 알고 싶지도 않다. 모르고 싶다.

Fact 1. Map 메서드가 있다고 Functor가 아니다.

  • Map에 Side Effect (Mutation)을 발생시키는 코드가 있다면, Functor Law 위반
  • Functor Laws가 지켜지고 있는 지 확인해야한다.

Fact 2. 자바에는 Monad가 없다.

  • Monad Laws를 지키지 못하는 것들이 대부분…
    • Left Identity
    • Right Identity
    • Associativity
  • 많이들 좋아하시는 Optional도 자바 메커니즘과 null-safety를 우선하여 Monad Laws를 위반한다.
  • 자바는 Side Effect를 많이 허용하여 완전한 Monad가 아니다.

Fact 3. Monad는 문맥을 표현한다는 것이 핵심.

  • 뭐 데이터를 pure한 함수를 통해 처리하고 Side Effect를 없애는 것도 중요하겠지만, 백엔드 Java 개발자인 나로서는 계산의 문맥을 타입으로 표현할 수 있는 게 제일 실용적이였다.
  • Monad는 무엇을 할지 정하고, 언제 실행할지는 나중에 결정할 수 있어야한다.

어렵다. Functional Programming을 조금이라도 찍먹하려고 하면, 어려운 수학 함수가 나와 정말정말 무섭다.

내가 어디서 이 개념을 사용해 기여를 할 수 있을 지는 더 고민해봐야겠다.