window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() JavaScript의 함수형 프로그래밍 3부 - 펑터와 모나드 어쩌면 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2022-06-21
소프트웨어 개발

JavaScript의 함수형 프로그래밍 3부 - 펑터와 모나드 어쩌면

The Codest

파웰 게드

Vue.js 개발자

함수형 프로그래밍의 힘 JavaScript 기사 시리즈의 세 번째 편을 확인해 보세요. 이번에는 JavaScript 전문가가 펑터와 모나드 메이비에 대해 자세히 설명합니다.

소개

수정할 수 없는 상태로 유지하는 것은 종종 어렵습니다. 이때 데이터를 컨테이너로 감싸는 패턴이 유용합니다. 이는 값을 안전하게 보호하여 부작용을 배제하고 안전하게 처리할 수 있도록 합니다.

이 블로그에 처음 오신 분들은 The Codest 블로그의 기능 프로그래밍에 관한 지난 2편을 꼭 확인하시기 바랍니다:

  • 1부 - 소개
  • 파트 2 - 결합기

함수

복잡한 로직이 없습니다. 주요 임무는 컨텍스트를 래핑하고 외부에서 수신한 함수를 수행하는 것입니다. 값이 변경될 때마다 새 컨테이너 인스턴스가 다시 패키징되어 반환됩니다. 호출할 때 지도 메서드는 특정 작업을 수행하는 경우, 수정 불가 원칙을 유지하면서 전달된 함수가 반환한 값으로 새 컨테이너 인스턴스를 반환합니다.

선언

 const 함수자 = 값 => ({
     map: fn => Functor(fn(value)),
     체인: fn => fn(값),
     of: () => value
 });

지도 - 컨테이너에 있는 값의 상태를 변경하고 싶지만 아직 반환하고 싶지 않을 때 유용합니다.

체인 - 컨테이너 상태를 수정하지 않고 함수에 값을 전달하려는 경우에 사용됩니다. 일반적으로 지도 호출합니다.

의 - 현재 값 반환

필수 예제

const randomInt = (max) => Math.floor(Math.random() * (max + 1))

const randomNumber = randomInt(200) // 0에서 200 사이의 숫자를 반환합니다.

decrease(randomNumber) // (0과 200 사이의 숫자) - 1을 반환합니다.

선언적 예제

const randomIntWrapper = (max)=>.
함수자(max)
.map(increase) // max + 1
.map(multiplyBy(Math.random())) // Math.random() * (max + 1)
.map(Math.floor) // Math.floor(Math.random() * (max + 1))

const randomNumber = randomIntWrapper(200)

randomNumber.of() // 0에서 200 사이의 숫자를 반환합니다.
randomNumber.chain(decrease) // (0과 200 사이의 숫자) - 1을 반환합니다.

모나드

때로는 값의 새 상태를 트리거하는 함수 외에도 컨테이너에 숨겨진 추가 로직이 필요할 때가 있습니다. 이때 모나드가 유용하게 쓰이는데, 모나드는 함수. 예를 들어 값이 특정 값을 가질 때 어떤 일이 일어날지 또는 다음 작업의 경로를 결정할 수 있습니다.

모나드 어쩌면

모나드는 참이 아닌 값을 반환하는 문제를 해결할 수 있습니다. 이런 일이 발생하면 후속 지도 호출은 무시되지만, 이 호출은 getOr 메서드를 사용할 수 있습니다. 이 메서드를 사용하면 다음에서 많이 사용되는 if / else 연산자의 사용을 피할 수 있습니다. 필수 프로그래밍. 이 모나드는 세 개의 컨테이너로 구성됩니다:

아무것도 - 는 참이 아닌 값이 컨테이너에 들어올 때 실행되거나 필터 메서드는 false를 반환합니다. 함수 실행을 시뮬레이션하는 데 사용됩니다. 즉, 이 컨테이너는 함수를 수신하지만 실행하지는 않습니다.

그냥 - 이 모든 기능을 수행하는 메인 컨테이너이지만 값이 거짓 값으로 변경되거나 필터 메서드가 거짓을 반환하면, 그 값을 아무것도 컨테이너.

어쩌면 - 초기 값을 가져와서 시작할 때 어떤 컨테이너를 호출할지 결정합니다.

선언

const Just = value => ({
map: fn => Maybe(fn(value)),
체인: fn => fn(값),
of: () => value,
getOr: () => value,
filter: fn => fn(value) ? Just(value) : Nothing(),
type: 'just'
});

const Nothing = () => ({
map: fn => Nothing(),
체인: fn => fn(),
of: () => Nothing(),
getOr: 대체 => 대체,
filter: () => Nothing(),
type: 'nothing'
});

const Maybe = 값 =>
value === null || value === 정의되지 않음 || value.type === 'nothing'
? Nothing()
: Just(value)
테이블 메서드 함수

이제 조건에 대한 이전 예제를 작성해 보겠습니다. 최대값이 0보다 크면 함수가 실행됩니다. 그렇지 않으면 0을 반환합니다.

필수 예제

const randomInt = (max) => {
if(max > 0) {
return Math.floor(Math.random() * (max + 1))
} else {
반환 0
}
}

const bookMiddlePage = 200

const randomPage = randomInt(10) || bookMiddlePage // 랜덤을 반환합니다.
const randomPage = randomInt(-10) || bookMiddlePage // 200을 반환합니다.

선언적 예제

const randomIntWrapper = (max)=>.
Maybe(max)
.filter(max => max > 0) // 값 false는 추가 호출을 무시합니다.
.map(increase)
.map(multiplyBy(Math.random()))
.map(Math.floor)

const bookMiddlePage = 200

// 그냥 컨테이너
const randomPage = randomIntWrapper(10).getOr(bookMiddlePage) // 랜덤을 반환합니다.
// 아무것도 없는 컨테이너
const randomPage = randomIntWrapper(-10).getOr(bookMiddlePage) // 200을 반환합니다.


협력 배너

관련 문서

소프트웨어 개발

비동기 및 단일 스레드 JavaScript?

JavaScript는 단일 스레드 언어이며 동시에 비차단, 비동기 및 동시 언어이기도 합니다. 이 글에서는 그 원리를 설명합니다.

루카스 콜코
E-commerce

사이버 보안 딜레마: 데이터 유출

크리스마스 전 러시가 한창입니다. 사랑하는 사람들을 위한 선물을 찾기 위해 온라인 상점을 '습격'하려는 사람들이 점점 더 많아지고 있습니다.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean