본문으로 건너뛰기

"monad" 태그로 연결된 4개 게시물개의 게시물이 있습니다.

모든 태그 보기

· 약 14분
Jake Son

최근에 Probability Monads from scratch in 100 lines of Haskell 글을 읽어보았는데 내용이 꽤 재밌어서 Typescript로 구현한 과정을 소개하고자 한다.

해당 글은 haskell을 사용해 확률분포를 표현하는 Monad를 만들어서 간단한 확률을 구하는 과정을 담고있다.
보통 순수 함수형 언어에서 주로 사용하는 Either, State같은 Monad 대신 언뜻 보기에는 관련이 없어보이는 확률분포 계산에 Monad를 활용하는 것이 신기했다.
그래서 나에게 조금 더 익숙한 언어인 Typescript로 구현해보았다.

모든 구현 코드는 Github에 올려두었다.

· 약 6분
Jake Son

이전 글에서는 promise 를 반환하는 함수들을 then 을 이용해 합성하는 과정을 살펴보았다.
이제 파라미터를 2개 이상 요구하는 함수가 있는 경우를 살펴보자.

· 약 10분
Jake Son

예전 node.js 의 많은 비동기 함수는 결과를 함수로 받는 콜백형태로 이루어져 있었다.
이로인해 여러 비동기 로직을 순차적으로 실행하는 코드를 보면 일명 Callback Hell 이라는 것을 볼 수 있다.

asyncA((a) => {
asyncB((b) => {
asyncC((c) => {
asyncD((d) => {
return a + b + c + d;
});
});
});
});

이후 이를 해결하는 방안으로 여러 라이브러리나 기술들이 나왔으나 지금은 주로 promiseasync/await 를 활용한다.

사실 나는 angular 를 통해 js 를 본격적으로 사용했기에 비동기 처리를 rxjsobservable 을 사용해왔다.
하지만 백엔드 개발자가 된 이후로 api 를 개발하는데 사용하는 대부분의 함수가 promise 를 반환하다보니 observable 을 활용하지 않게되었다.

promise 를 본격적으로 사용했을 때에는 이미 async/await 가 도입된 이후였고 동기적으로 보이는 코드를 작성하는데 큰 어려움 없었다.
그래서 굳이 then 이나 catch 구문을 사용할 필요가 없다고 생각했었다.
그러나 함수형 패러다임을 공부하면서 함수의 합성, 선언적인 코드, pointfree 에 대한 매력을 느꼈고 이를 then chaining 을 통해 이룰 수 있다는 것을 깨달았다.
함수형 패러다임 중 난해한 monadpromise 와 비교하면서 생각하니 이해하는데 많은 도움을 받았다.
그래서 이와 관련한 글을 작성하려고 한다.