모나드

- 스위프트는 함수형 프로그래밍 패러다임에서 파생된 기능이나 개념이 종종 등장한다.

- 단순히 고차함수를 사용, 함수를 일급 객체로 사용, 재귀함수를 사용한 로직을 구현하는 등의 특정 기능에 국한되는 것은 아니지만, 모나드를 익혀두면 더 깊이 있는 함수형 프로그래밍을 이해할 수 있다

 

모나드의 조건

  • 타입을 인자로 받는 타입 (특정 타입의 값을 포장)
  • 특정 타입의 값을 포장한 것을 반환하는 함수(메서드)가 존재
  • 포장된 값을 변환하여 같은 형태로 포장하는 함수(메서드)가 존재
  • 옵셔널 = 기본적인 모나드

FlatMap vs Map

let optionals: [Int?] = [1,2,nil,5]

let mapped: [Int?] = optionals.map{ $0 } // [Optional(1),Optional(2),nil,Optional(5)]
let compactMapped: [Int] = optionals.compactMap{ $0 } // compactMap = flatMap
//[1,2,5]

//compactMap 은 컨테이너 내의 컨테이너까지 벗기는? 것을 볼 수 있다.

+ Recent posts