함수 객체 중에서 자신의 컨텍스트와 같은 컨텍스트의 형태로 맵핑할 수 있는 함수객체를 닫힌 함수객체라고 한다.
모나드는 닫힌 함수객체이다.
모나드는 컨텍스트에 포장된 값을 처리하여 포장된 값을 컨텍스트에 다시 반환하는 함수 (맵)을 적용할 수 있다. 이 맵핑의 결과가 함수객체와 같은 컨텍스트를 반환하는 함수 객체를 모나드라고 하며 이런 맵핑을 수행하도록하는 플랫맵이라는 매서드를 활용한다.
let optional: [Int?] = [1, 2, nil, 5]
let mapped: [Int?] = optional.map{ $0 }
let compactMapped: [Int] = optionals.compactMap{ $0}
print(mapped) // [Optional](1), [Optional](2), nil, [Optional](5)
print(compactMapped) //[1,2,5]
플랫맵은 컨텍스트 내부의 컨텍스트를 모두 같은 위상으로 평평하게 펼쳐준다. 포장된 값(위 예시에선 옵셔널로)을 풀어서 같은 위상으로 만들어준다.
-- 제네릭과 익스텐션 익힌 후 다시 보기 --