콘텐츠로 이동

2025 02 26

2025-02-26

모나드

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