# Monad - [[함수]] - 함수 실행 시 내부에 어떤 상황이 발생하더라도 최종적으로 값을 반환하는걸 보장 - [[프로그래밍 함수]] - 함수 실행 시 내부에 어떤 처리할 수 없는 상황이 발생하면 값을 반환하지 못한채 중간에 [[Exception]]을 발생 Exception을 발생시키는 것을 [[순수 함수]] 관점에서는 [[Side Effect]]로 정의하기 때문에 Exception이 발생하는 함수를 [[비순수 함수]]로 정의합니다. 만약 [[프로그래밍 함수]]에서 Exception 발생시 중간에 멈추는 것이 아니라 해당 상태가 발생했음을 [[상태]]값으로써 결과에 함께 반환한다면 Side-Effect는 없어지게 됩니다. 프로그래밍 함수의 순수 함수화인 셈입니다. 이렇게 `상태`값과 함수 본연의 `결과`값을 함께 반환하기 위해서는 이 둘을 묶는 데이터 구조가 필요합니다. ## Monad 정의 Monad는 Unwrap(flatMap) 함수를 포함하는 Mappable 데이터 구조입니다. Monad의 Mapping 함수는 `결과`와 `상태` 모두를 갖는 데이터 구조를 반환합니다. ## Function Composition 모나드는 결과 데이터 구조가 `상태`를 갖는다는 것 뿐만 아니라 함수의 합성이 가능하다는 성질도 갖습니다. ## Refs - https://aaronryu.github.io/2019/03/24/only-one-page-for-functional-programming/