티스토리 뷰

Swift/야곰의 스위프트

16장 모나드

할루루 2018. 2. 12. 12:18

[시작]


- 모나드 : 특정한 상태로 값을 포장하는 것

 : Swift에서는 이를 옵셔널이라는 형태로 구현 : 값이 있을지 없을지 모르는 상태 속에 포장

- 함수객체와 모나드는 디자인 패턴 혹은 자료구조라고 할 수 있음



[컨텍스트]


- 컨텍스트 : 콘텐츠를 담은 무언가

 : 옵셔널은 somenone이라는 두 가지의 컨텍스트를 가짐



[함수객체]


- 맵을 적용할 수 있는 컨테이너 타입

- 맵은 컨테이너(컨텍스트)의 값을 변형하는 고차함수

- 옵셔널에 맵을 적용했을 때

 : 값이 있는 경우 : 컨텍스트로부터 값 추출 -> 전달받은 함수 적용 -> 결과값을 컨텍스트에 담아 반환

 : 값이 없는 경우 : 컨텍스트로부터 값 추출 -> 값 없음 -> 아무것도 하지 않음



[모나드]


- 값이 있을 수도 있고 없을 수도 있는 컨텍스트를 갖는 함수객체 타입

- 플랫맵 : 포장된 값을 받아서 값이 있으면 포장을 풀어서 값을 처리한 후 포장된 값을 반환하고, 값이 없으면 없는 대로 다시 포장하여 반환

1
2
3
4
5
6
let optionalNumbers: [Int?] = [6,2,nil,9]
let map = optionalNumbers.map { $0 }
let flatmap = optionalNumbers.flatMap { $0 }
print(map)      //Optional(6), Optional(2), nil, Optional(9)
print(flatmap)  //6, 2, 9
 
cs


위는 플랫맵과 맵의 차이를 보여줌


- 옵셔널에 관련된 여러 컨테이너의 값을 연달아 처리할 때 플랫맵이 유용하게 사용될 수 있음



[마무리]


- 옵셔널 바인딩, 옵셔널 체이닝, 플랫맵 등은 모나드와 관련된 연산

'Swift > 야곰의 스위프트' 카테고리의 다른 글

18장 상속  (0) 2018.02.28
17장 서브스크립트  (0) 2018.02.28
15장 맵, 필터, 리듀스  (0) 2018.02.12
14장 옵셔널 체이닝과 빠른 종료  (0) 2018.02.12
13장 클로저  (0) 2018.02.12
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함