순수 함수적 상태 (2)

Jason Kim·2020년 5월 9일
0

fp in scala with TypeScript

목록 보기
14/17

이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습하는 과정을 정리하고 있습니다.

상태 동작을 위한 더 나은 API

어떤 형식 A에 대해 RNG => (A, RNG) 형식을 사용해서 하나의 RNG 상태를 다른 RNG 상태로 변환한다. A의 생성은 어떤 RNG에 의존하고 그것을 사용하여 생성한다. 또한 RNG를 다른 동작이 이후에 사용할 수 있는 새로운 상태로 전이하는 프로그램이다.

이런 종류의 함수를 상태 동작(state action), 상태 전이(state transition)라고 부른다. 조합기(combinator)를 이용해서 조합하면 한 동작에서 다른 동작으로 상태를 자동으로 넘겨줄 수 있다.

이런 동작들을 조합하되 상태들을 명시적으로 전달하지 않고 자동으로 처리하게 작성해 나가다 보면 일정의 영역 국한 언어(domain-specific language, DSL)에 도달하게 된다.

연습문제 6.6

https://github.com/JsonKim/fpinscala-with-typescript/commit/f44cf2cc29a2b8ea5deb3dbe2a79c90683d52bdf

연습문제 6.7

https://github.com/JsonKim/fpinscala-with-typescript/commit/ff9265255c5673afa6fc5510da8c5051fe1a6d65

  • unit
    • 전달된 상태를 사용하지 않고 입력된 값과 함께 돌려준다.
  • map
    • 상태는 변경하지 않고 전달된 상태로 계산된 결과만 변경해준다.
  • map2
    • 두 상태 동작 ra, rb의 결과를 이항 함수를 통해 조합하고 새 동작을 돌려준다.
  • flatMap
    • 상태 동작의 결과에 의존하는 다른 상태 동작을 연결시킬 수 있다. 이런 특성 때문에 결괏값 A에 기초에서 다음 동작을 선택할 수 있다. flatMap의 다른 이름이 bind, chain인 이유는 이 때문인 듯.

unit과 flatMap이 있으면 map, map2를 만들 수 있으므로 이 두 함수가 더 기초적인 연산자이다.

연습문제 6.8

https://github.com/JsonKim/fpinscala-with-typescript/commit/33c81eb4145f17b731d5117e06f29830bf1e23bb

연습문제 6.9

https://github.com/JsonKim/fpinscala-with-typescript/commit/6f69c2977e809d662e46bf7d355ef601668f689b

이러한 함수들을 사용해서 프로그램을 작성하면 상태가 사용 후 파괴되는 것을 걱정할 필요가 없어 실패 상황을 신뢰성 있게 재현할 수 있다.

0개의 댓글