"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 모나드 디자인 패턴 이해하기

모나드 디자인 패턴 이해하기

2024-08-01에 게시됨
검색:868

Understanding the Monad Design Pattern

모나드는 부작용을 관리하고 깔끔하고 구성 가능한 코드를 유지하는 데 도움이 되는 함수형 프로그래밍의 강력한 개념입니다.

이 게시물에서는 실패하거나 null/정의되지 않음을 반환할 수 있는 작업을 처리하는 데 사용되는 JavaScript를 사용하는 Maybe 모나드 디자인 패턴을 살펴보겠습니다.

모나드란 무엇입니까?

간단히 말하면 모나드는 값을 래핑하고, 연산을 연결하고, 부작용을 일관된 방식으로 처리할 수 있는 디자인 패턴입니다.

Maybe 모나드는 널 검사로 코드를 어지럽히지 않고 널 또는 정의되지 않은 값을 처리하는 데 특히 유용합니다.

Maybe 모나드 구현하기

이 모나드는 값을 래핑하고 해당 값이 존재하는 경우 해당 값에 함수를 적용하는 방법을 제공합니다.

// Maybe Monad Implementation
class Maybe {
    constructor(value) {
        this.value = value;
    }

    static of(value) {
        return new Maybe(value);
    }

    isNothing() {
        return this.value === null || this.value === undefined;
    }

    map(fn) {
        return this.isNothing() ? Maybe.of(null) : Maybe.of(fn(this.value));
    }

    getOrElse(defaultValue) {
        return this.isNothing() ? defaultValue : this.value;
    }
}

어쩌면 모나드 사용하기

나눗셈을 수행하지만 0으로 나누기를 처리해야 하는 함수를 생각해 보겠습니다.

const safeDivide = (numerator, denominator) => {
    return denominator === 0 ? Maybe.of(null) : Maybe.of(numerator / denominator);
};

const result = Maybe.of(10)
    .map(x => x * 2) // 20
    .map(x => x   1) // 21
    .map(x => safeDivide(x, 0)) // Maybe(null)
    .getOrElse('Division by zero');

console.log(result); // Output: Division by zero

Maybe 모나드는 각 중간 값을 래핑하여 값이 null이 아니거나 정의되지 않은 경우에만 변환을 적용합니다.

safeDivide 함수는 Maybe 모나드를 반환하여 0으로 나누기를 안전하게 처리합니다.

Maybe 모나드 사용의 이점

  1. 합성 가능성: Null 검사에 대한 걱정 없이 여러 작업을 깔끔하게 연결합니다.
  2. 가독성: 반복적인 null 검사를 피하여 코드를 단순화합니다.
  3. 안전: 잠재적인 null 또는 정의되지 않은 값을 적절하게 처리하여 런타임 오류를 줄입니다.

결론

Maybe 모나드는 JavaScript에서 null 또는 정의되지 않은 값을 관리하기 위한 강력한 도구입니다. 모나드에 값을 래핑하면 작업을 안전하게 연결하고 더 깔끔하고 읽기 쉬운 코드를 유지할 수 있습니다. 모나드에 대한 이러한 간단한 접근 방식은 JavaScript의 함수형 프로그래밍 툴킷을 크게 향상시킬 수 있습니다.

더 많은 기술적 통찰력과 실습 튜토리얼을 보려면 rmauro.dev를 방문하세요. 즐거운 코딩하세요!

릴리스 선언문 이 글은 https://dev.to/rmaurodev/understanding-the-monad-design-pattern-1d9e?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3