728x90

11 모나드

11-1 모나드 이해하기

  • 모나드(Monad)
    • 수학의 '카테고리 이론(category theory)'이라는 분야에서 사용하는 용어
    • 프로그래밍에서 모나드는 일종의 '코드 설계 패턴(design pattern)'으로 몇 개의 인터페이스를 구현한 클래스
  • 타입 클래스(type class)
    class Monad<T> {
      constructor(public value: T) {}
      static of<U>(value: U): Monad<U> { return new Monad<U>(value) }
      map<U>(fn: (x: T) => U): Monad<U> { return new Monad<U>(fn(this.value)) }
    }
  • 어떤 클래스가 다음 네 가지 조건을 모두 만족한다면 그 클래스는 모나드
    • 펑터(Functor) : map이라는 인스턴스 메서드를 가지는 클래스
    • 어플라이(Apply) : 펑터이면서 ap라는 인스턴스 메서드를 가지는 클래스
    • 애플리커티브(Applicative) : 어플라이이면서 of라는 클래스 메서드를 가지는 클래스
    • 체인(Chain) : 애플리커티브이면서 chain이라는 메서드를 가지는 클래스
  • 모나드 룰(Monad raw)
    • 어떤 클래스의 이름이 M이고 이 클래스의 인스턴스를 m이라고 할 때
      모나드는 애플리커티브와 체인의 기능을 가지고 있고 다음의 두 가지 법칙을 만족하게 구현한 클래스
      구  분 의  미
      왼쪽 법칙(left identity) M.of(a).chain(f) == f(a)
      오른쪽 법칙(right identity) m.chain(M.of) == m

11-2 Identity 모나드 이해와 구현

  • 값 컨테이너(value container) : 타입 T를 가지는 값의 컨테이너
  • identity
    • 함수형 프로그래밍에서 identity는 항상 다음처럼 구현하는 특별한 의미의 함수
      const identity = <T>(value: T): T => value
    • 카테고리 이론에서 자신의 타입에서 다른 타입으로 갔다가 돌아올 때 값이 변경되지 않는 카테고리를 의미

 

 

11-3 Maybe 모나드 이해와 구현

  • Maybe 모나드
    • Maybe는 오류일 때와 정상적일 때를 모두 고려하면서도 사용하는 쪽 코드를 간결하게 작성할 수 있게 함
    • 데이터의 유무에 따라 코드가 적절하게 동작하도록 설계
    • Maybe 그 자체가 모나드가 아니라, Maybe가 제공하는 Just<T>Nothing 타입이 모나드
      export class Maybe<T> {
        static Just<U>(value: U) { return new Just<U>(value) }
        static Nothing = new Nothing
      }
    • 코드의 안정성을 함수형 방식으로 보장하기 위한 목적으로 설계

11-4 Validation 모나드 이해와 구현

  • Validation 모나드
    • 데이터는 있는데 그 데이터가 유효한지를 판단하는 용도로 설계
    • SuccessFailure 두 가지 모나드로 구성

11-5 IO 모나드 이해와 구현

  • IO 모나드 
    • 여러 개의 파일 입출력을 선언형 프로그래밍 방식으로 작성할 수 있게 고안
출처 : Do it! 타입스크립트 프로그래밍
 

Do it! 타입스크립트 프로그래밍

‘타입스크립트’를 배우는 김에 ‘함수형 프로그래밍’까지 정주행하자!10만 건의 빅데이터 처리와 API 서버 & 리액트 웹 개발까지!이 책은 ES6 자바스크립트를 경험한 독자가 타입스크립트를

book.naver.com

728x90