스위프트 프로그래밍 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