티스토리 뷰
[시작]
- 모나드 : 특정한 상태로 값을 포장하는 것
: Swift에서는 이를 옵셔널이라는 형태로 구현 : 값이 있을지 없을지 모르는 상태 속에 포장
- 함수객체와 모나드는 디자인 패턴 혹은 자료구조라고 할 수 있음
[컨텍스트]
- 컨텍스트 : 콘텐츠를 담은 무언가
: 옵셔널은 some과 none이라는 두 가지의 컨텍스트를 가짐
[함수객체]
- 맵을 적용할 수 있는 컨테이너 타입
- 맵은 컨테이너(컨텍스트)의 값을 변형하는 고차함수
- 옵셔널에 맵을 적용했을 때
: 값이 있는 경우 : 컨텍스트로부터 값 추출 -> 전달받은 함수 적용 -> 결과값을 컨텍스트에 담아 반환
: 값이 없는 경우 : 컨텍스트로부터 값 추출 -> 값 없음 -> 아무것도 하지 않음
[모나드]
- 값이 있을 수도 있고 없을 수도 있는 컨텍스트를 갖는 함수객체 타입
- 플랫맵 : 포장된 값을 받아서 값이 있으면 포장을 풀어서 값을 처리한 후 포장된 값을 반환하고, 값이 없으면 없는 대로 다시 포장하여 반환
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 |
댓글