모나드란?
- 함수형 프로그래밍에서 자주 등장하는 디자인 패턴 중 하나이다.
- 일련의 연산 과정들을 감싸주는 컨테이너 혹은 래퍼이며, 예측 가능하고 구성 가능한 방식으로 이 단계들을 함께 연결(chaining) 하는 방법을 제공한다.
- 사이드 이펙트를 핸들링하거나, 불확실한 상태를 이용한 연산, 비동기 연산 등 평범하게 동기적으로 흘러가지 않는 연산을 처리할 때 코드가 복잡해지기 쉬운데, 이를 간단히 처리할 수 있게 해준다.
- 자바스크립트의
Promise
객체, 자바의Optional
객체의 역할과 같다.- 코드의 작성 시점에는 내부의 결과를 모르는데도 결과의 케이스에 따른 로직을 작성할 수 있다.
Promise
객체는 비동기 연산을 캡슐화하고 체이닝한다.Optional
객체는 있을지 없을지 모르는 값에 대한 연산을 캡슐화하고 체이닝한다.
Javascript Promise
객체의 예제
new Promise((resolve, reject) => {
setTimeout(() => {
resolve("One second has passed");
}, 1000);
})
.then((resolvedMessage) => console.log(resolvedMessage))
.catch((error) => console.error(`Error occured in async job: ${error}`));
fetch("someAPI") // 결과 값으로 Promise 객체를 반환한다.
.then((response) => response.json())
.then((json) => console.log(json))
.catch((error) => console.error(`Error occured in async job: ${error}`));
- 위의 코드들은 언제 불러올 수 있을지 모르는 비동기 값에 대한 로직을 처리하고 있다.
- 해당 작업이 실패했을 때에도 간단히
catch()
메서드에 넘기는 콜백 함수를 통해 동작 정의가 가능하다.
반응형