Swift.Monad

junstone1995·2021년 8월 19일
0

Swift-Basic

목록 보기
9/12
post-thumbnail

스위프트 프로그래밍 3판을 보고 정리한 내용입니다.

모나드란?

순서가 있는 연산을 처리할 때 자주 활용되는 디자인 패턴

사용하는 곳에 따라 수학의 범주론에서 말하는 모나드인지 특정 디자인 패턴을 따르는 모나드인지가 다르다.

모나드가 갖춰야 할 조건

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

컨텍스트

컨텍스트란 '맥락', '전후 사정' 등이다.

컨텍스트는 컨텐츠를 담은 무언가를 뜻한다.

예를 들면 물이 컨텐츠고 물컵이 컨텍스트이다.

함수 객체

고차함수인 map을 적용 할 수 있는 컨테이너 타입

func addThree(_ num:Int) -> Int {
    return num + 3
}

addThree(2) // 5

addThree(Optional(2)) //Error

Optional(2).map(addThree) // 5

var num:Int? = 2

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

num = nil

num = num.map{$0 + 3} //nil

모나드

함수객체 중에서 자신의 컨텍스트와 같은 컨텍스트의 형태로 맵핑할 수 있는 함수객체를 닫힌 함수객체라고 한다.

모나드는 닫힌 함수 객체이다.

플랫맵이라는 메서드를 활용한다.

func doubledEven(_ num :Int) -> Int?{
    if num.isMultiple(of: 2){
        return num * 2
    }
    return nil
}

Optional(3).flatMap(doubledEven) // nil
Optional(4).flatMap(doubledEven) // 8
profile
Swift와 함께 여행중입니다.

0개의 댓글