2025 02 26
2025-02-26
모나드
- 개요
- 함수형 프로그래밍에서 계산을 추상화하고, 체이닝(연결)하기 위한 디자인 패턴
- 모나드에서는 어떤 값 + 계산의 컨텍스트를 함께 다룸
- 여러 계산은 순차적으로 연결할 수 있도록 도와줌
- 모나드 특성
- 순수 값의 래핑
- 일반 값을 모나드 컨텍스트에 넣어줌.
- ex) Scala
Option에서 Some(5)
map
- 모나드 내부의 값 꺼내 함수 적용하고, 다시 모나드 형태로 감싸줌
- ex)
Some(5).map(_ + 1) => Some(6)
flatMap
- 모나드 내부의 값 꺼내서, 그 값을 이용해 새로운 모나드를 생성하는 함수에 넘겨줌
- 과정에서 중첩된 모나드에 대해 flatten
- 강점
- 이렇게 감싸면, 에러처리/비동기 계산/DB 작업 등의 부수효과 -> 순차적으로 안전히 연결 가능
- 계산의 순서를 정의하고, 그 계산 과정에서 발생하는 부수효과들을 관리하게 해줌
- DBIO
- Slick에서 제공하는 모나드. DB와의 I/O 작업 추상화하여 표현
- DB와 상호작용 lazy evaluation으로 감싸서 안전하게 조합될 수 있도록
map, flatMap 제공
- 순차체인, 병렬 처리 가능.
- DB 커넥션 통해 실행될 때 까지 실행 X