모나드란? #11
hyun99999
started this conversation in
Show and tell
모나드란?
#11
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Monad(모나드)]
출처: [위키백과 - 모나드](https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%82%98%EB%93%9C)
Monadic(모나딕)
모나드는 여러 영역에서 다양한 뜻을 가지기도 하고 한 문장으로 설명하기 어려운 개념이라서 범주론의 모나드 개념을 차용한 정도로 생각하면 될 것 같습니다.
모나드는 순서가 있는 연산을 처리할 때 자주 활용하는 디자인 패턴입니다.
프로그래밍에서는 모나드의 성질의 대부분을 갖추었다고 하여 모나드를 모나딕(monadic) 이라고 표현합니다. (모나딕 타입 혹은 모나딕 함수)
함수형 프로그래밍을 이해하는데 모나드는 도움이 될거에요! 결과로 항상 모나드를 반환하여 순수함수 성질을 잃지 않게 하는 것이기 때문입니다.
즉, Int, String, Float, Bool, Class, Struct 를 사용해서 함수의 파라미터와 리턴값을 표현했는데 한 번 더 추상화한 것이
모나드
입니다.프로그래밍에서 모나드가 갖춰야 하는 조건
1️⃣ 타입을 인자로 받는 타입(특정 타입의 값을 포장) → 제네릭
2️⃣ 특정 타입의 값을 포장한 것을 반환하는 함수(메서드)가 존재
3️⃣ 포장된 값을 변환하여 같은 형태로 포장하는 함수(메서드)가 존재
💫 Optional(옵셔널) 은 모나드의 예시 입니다.
스위프트에서 모나드를 사용한 예시 중 하나가
옵셔널
입니다.옵셔널은 열거형!
: 값이 있을지 없을지 모르는
상태를 포장
하는 것.Context(컨텍스트)
Contents(콘텐츠) 를 담는 그 무언가.
옵셔널을 떠올리면 값이 없다면 .none case 로 있다면 .some(value) case 로 값을 지닙니다.
조건 충족
1️⃣ 옵셔널은 Wrapped 타입을 인자로 받는 제네릭 타입.
2️⃣ 콘텐츠의 타입을 갖는 컨텍스트를 반환.
3️⃣ map! map?
💫 또한, 모나드는
닫힌 함수객체
입니다.함수 객체?(Functor)
맵
을 적용할 수 있는 컨테이너 타입. 즉, 함수 객체는 포장된 값에 함수를 적용할 수 있습니다.닫힌 함수객체?(Endofunctor)
자신의 컨텍스트와 같은 컨텍스트의 형태로 맵핑할 수 있는 함수 객체를
닫힌 함수객체
(Endofunctor)라고 합입니다.모나드
는닫힌 함수객체
입니다.즉, 모나드는 결과가 함수객체와 같은 컨텍스트를 반환하는 함수객체라고 할 수 있고, 이런 맵핑을 수행하도록
flatMap
을 활용합니다.flatMap
맵과 같이 함수를 매개변수로 받지만, 컨텍스트 내부의 컨텍스트를 모두 같은 위상으로 평평하게 펼쳐준다는 차이가 있습니다.
flatMap 을 사용해 보겠습니다.
flatMap 의 기능
💫 flatMap(_:)
flatMap
을 그대로 사용하면 되겠습니다.💫 compactMap
flatMap 과 Map 이랑 다른점은?
Int()
를 사용해서 int 옵셔널변수를 리턴하는 경우출처:
[Swift] 순수함수(Pure Function)란?
모나드의 이해
[Swift] 고차함수(2) - map, flatMap, compactMap
Beta Was this translation helpful? Give feedback.
All reactions