์ด๋ป๊ฒ Monad๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
์ฌ์ฉ๋ฐฉ๋ฒ
- Monad ํจ์๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
flatLift
,flatLift2d
- ์ธ์ด์์ ์ ๊ณตํ๋ Monad ํนํ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
do
(Haskell),for
(Scala)
์ง์ ์ฌ์ฉ
- ์ผ๋ฐ์ ์ธ ๋ช ๋ นํ ์ธ์ด์์ for๋ฌธ์ ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ฐ๋ฆฌ๋ ์ด๋ ํ ๋์์ด ๋ฐ๋ณต๋๋ฉด, ์ด๋ฅผ ํจ์๋ก ๋ง๋ค๋ผ๊ณ ๋ฐฐ์ ๋ค.
- ์ด๋ ๊ฒ ๋ฐ๋ณตํ๋ฉด์ ์ํ๋ ๊ฐ์ ๊ฐฑ์ ํ๋ ๊ฒ๋ ํจ์์ ํํ๋ก ์ถ์ถํ ์ ์์ง ์์๊น?
- ์์ ๋์์ ๋ถ์ํ๋ฉด ์์ ๊ฐ๋ค.
- ์ปจํ ์ด๋๋ฅผ ๋ฐ๊ณ , ์ด๊ธฐ ์ํ๊ฐ์ ๋ฐ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋งคํํ๋ ๋ณํํจ์๋ฅผ ๋ฐ์ ๋ค, ๊ฒฐ๊ณผ๊ฐ์ ๋ฆฌํดํ๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ๋ณ์, ๋ฐ๋ณต๋ฌธ์ด ์๋ ์ํ๋ก ๊ฐ์์ผ์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
repeat
(Lisp),foldl
(Haskell),reduce
(Swift) ๋ฑ์ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฌ๋ ํจ์์ด๋ค.- ๊ณ ์ฐจ ํจ์๋ค์ ๋ค ์ด๋ฐ ํํ๋ก ์๋ค.
- ๋ณดํต ์ค์ ํจ์๋ ์ต๋ช ํจ์๋ก ๋๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
flatLift
๋ ์ด์ ๋ค๋ฅด์ง ์๋ค.- ์ด๋ ๊ฒ ์จ๋์ผ๋, ์ค์ฝํ ์์๋
(T, U) -> V?
๋ฅผ ๋ณด๋ด๋ ํจ์๋ฅผ ์ ์ํ์ฌ (T?, U?) -> V?
๋ก ๋ฐ๊ฟ์ฃผ๋ ์ฐ์ฐ์ดflatLift2d
์์ ์ด๋ ต์ง ์๊ฒ ์๊ฐํ ์ ์๋ค.- ์ด๋ํฐ ์ญํ .
- ์ด๋ฐ ๋์์ ๋ณดํต ์ธ์ด์์
flatMap
๊ณผ ๊ฐ์ ๋ณ์ข ์ ์ ๊ณตํ๋ค.
Monad ํนํ๋ ์ธ์ด์ ๊ฒฝ์ฐ
- Haskell์ ๊ฒฝ์ฐ
do
๋ฅผ ์ฌ์ฉํ๋ค. - ๋ชจ์์ด ํก์ฌํจ์ ์ ์ ์๋ค.
- ์ด๋ฐ ๋ฌธ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ค์ด๋ค.
- ์ด๋ ๊ฒ ๋ค์ค ์ ๋ถ๋ ๊ฐ๋จํ๊ฒ ํํ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ผ ์ด๊ฑด ๋ญ๊น?
- ์๋ ๋ณํ ํจ์๋ t์ ๋ํ ํจ์๊ฐ ์๋๋ค.
- ํ์ง๋ง opt๊ฐ ๋น ๊ฐ์ด๋ผ๋ฉด, ๊ฒฐ๊ณผ๋ ๋น ๊ฐ์ผ๋ก ๋์ฌ ๊ฒ์ด๋ค.
- ๊ฐ์ด ์๋ค๋ฉด true๊ฐ ๋ด๊ธด Optional์ด ๋์ฌ ๊ฒ์ด๋ค.
- ์ฌ์ฉํ์ง๋ ์๋ ๊ฐ์ ๋ฃ์ด,
true
๊ฐ ์๋ ๊ฒฝ์ฐ, ์๋ ๊ฒฝ์ฐ๋ก ๋ฐ๊ฟ์ ์ฒ๋ฆฌํ๊ณ ์๋ค. - ์ด๋ฐ ๊ฒ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํ๋ค.