Swift.Monad
스위프트 프로그래밍 3판을 보고 정리한 내용입니다.
모나드란?
순서가 있는 연산을 처리할 때 자주 활용되는 디자인 패턴
사용하는 곳에 따라 수학의 범주론에서 말하는 모나드인지 특정 디자인 패턴을 따르는 모나드인지가 다르다.
모나드가 갖춰야 할 조건
- 타입을 인자로 받는 타입(특정 타입의 값을 포장)
- 특정 타입의 값을 포장한 것을 반환하는 함수(메서드)가 존재
- 포장된 값을 변환하여 같은 형태로 포장하는 함수(메서드)가 존재
컨텍스트
컨텍스트란 '맥락', '전후 사정' 등이다.
컨텍스트는 컨텐츠를 담은 무언가를 뜻한다.
예를 들면 물이 컨텐츠고 물컵이 컨텍스트이다.
함수 객체
고차함수인 map을 적용 할 수 있는 컨테이너 타입
func addThree(_ num:Int) -> Int {
return num + 3
}
addThree(2) // 5
addThree(Optional(2)) //Error
Optional(2).map(addThree) // 5
var num:Int? = 2
num = num.map{$0 + 3} //Optional(5)
num = nil
num = num.map{$0 + 3} //nil
모나드
함수객체 중에서 자신의 컨텍스트와 같은 컨텍스트의 형태로 맵핑할 수 있는 함수객체를 닫힌 함수객체라고 한다.
모나드는 닫힌 함수 객체이다.
플랫맵이라는 메서드를 활용한다.
func doubledEven(_ num :Int) -> Int?{
if num.isMultiple(of: 2){
return num * 2
}
return nil
}
Optional(3).flatMap(doubledEven) // nil
Optional(4).flatMap(doubledEven) // 8
Author And Source
이 문제에 관하여(Swift.Monad), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@junstone1995/Swift.Monad저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)