시그마 삽질==six 시그마

모나드(Monad) 본문

프로그래밍/Programming stuff

모나드(Monad)

Ethan Matthew Hunt 2020. 3. 4. 21:59

예전에 읽었던 '스위프트 프로그래밍(저자 야곰)'에 나온 내용을 정리한것입니다.

 

야곰님의 책 구매를 원하시는 분은 요기를 클릭!

 

 

 

 

모나드는 값이 있을 수도 있고 없을 수도 있는 컨텍스트를 가지는 함수객체 타입이다.

 

함수객체: 맵을 적용할수 있는 컨테이너 타입.(Array,Dictionary,Set...)

 

컨텍스트: 콘텐츠를 담고 있는 그 무언가임.

 

ex)

물컵에 물이 담겨있으면 물은 콘텐츠고 물컵은 컨텍스트임.컨텍스트가 일종을 컨테이너 역할을함.

 

옵셔널은 some과 none이라는 두가지의 컨텍스트를 가짐.

 

 

옵셔널은 컨테이너와 값을 가지기 때문에 맵 함수를 사용할 수 있습니다.

 

var value: Int?=2

value.map{ $0+3} //Optional(5)

value=nil
value.map{ $0+3} //nil ==Optiona.none

 

컨텍스트로부터(Optional(2)) 값을 추출해서 전달받은 함수에 적용하여 5를 만들고 결과값 5를 다시 컨텍스트에 담아 반환

 

 

플랫맵은 내부에 포장된 값도 추출해낼 수 있음.

 

// 코드 16-9 중첩된 컨테이너에서 맵과 플랫맵의 차이
let multipleContainer = [[1, 2, Optional.none], [3, Optional.none], [4, 5, Optional.none]]

let mappedMultipleContainer  = multipleContainer.map{ $0.map{ $0 } }
let flatmappedMultipleContainer = multipleContainer.flatMap{ $0.flatMap{ $0 } }

print(mappedMultipleContainer)        // [[Optional(1), Optional(2), nil], [Optional(3), nil], [Optional(4), Optional(5), nil]]
print(flatmappedMultipleContainer)    // [1, 2, 3, 4, 5]

 

Comments