Monad๋ ๋ฌด์์ธ๊ฐ?
๐ Monad๋ ๋ฌด์์ธ๊ฐ?
์ด ๊ธ์ Monad๋ ๋ฌด์์ธ๊ฐ?๋ฅผ ์์ฒญ ํ ๊ฐ์ธ ๊ณต๋ถ ๋ฐ ์ ๋ฆฌ์ฉ์ผ๋ก ์์ฑํ ๊ธ์
๋๋ค.
Scala(Scalable Language)
- ์ฌ์ฉ์๊ฐ ์ธ์ด๋ฅผ ํ์ฅํ๋ฉด์๋ ์๋ ์ธ์ด๊ฐ ์ง์ํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
Functional Language
- ํจ์๊ฐ 1๊ธ ๊ณ์ธต
- ๋ณ์ ๋ถ๋ณ
- ํ์ ํด๋์ค
- ํจํด ๋งค์นญ
- Currying
Monad?
- ์ํ์ ๋ฒ์ฃผ๋ก ์์ ์ฌ์ฉ๋๋ ๊ตฌ์กฐ๋ก Haskel, Scala์์ ์ด๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉ
map()์ ๋จ์ํ๊ฒ ๋ฐฐ์ด์ ์์์ ์ด๋ค ํจ์๋ฅผ ์ ์ฉํ๊ณ ๊ทธ ๋ฐํ๊ฐ์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด ๊ณ ํต์ด ์์๋๋ค.
๋ชจ๋๋๋ฅผ ์ดํดํ๋ ๋ฐ ์ด๋ ๊ฒ ์๊ฐํ๋ ๊ฑด ์ข์ง ๋ชปํ๋ค!
(์๋ฐ์คํฌ๋ฆฝํธ์์ flatMap()์ ๋จผ์ map์ ํ๊ณ ์ดํ์ flat์ ํด์ฃผ๋ ์ญํ )
Monad๋ ์ด๋ค ๊ฒฝ์ฐ์ ํ์ํ๊ฐ?
- ๋น๋๊ธฐ ์ฐ์ฐ ์ฒ๋ฆฌ => Promise๊ฐ ์ฌ์ค Monad์ ์ผ์ข
- ๊ฐ์ด ๋ฏธ๋์ ์กด์ฌํ๊ฑฐ๋ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ธ๋งํ ๋ Monad๋ฅผ ์ฌ์ฉํ๋ค.
Monad์ ์ ์(๋ฐํ์๋ ํํ)
- Monad๋ ๊ฐ์ ๋ด๋ ์ปจํ ์ด๋์ ์ผ์ข
- Functor๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์์
- flatMap() ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
- Monad Laws๋ฅผ ๋ง์กฑ์ํค๋ ๊ตฌํ์ฒด๋ฅผ ๋งํ๋ค.
Functor๋?
- ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ map ๋ฉ์๋๋ง ๊ฐ์ง๋ค.
- ํ์
์ธ์
๋ฅผ ๊ฐ์ง๋ค. - ์ ๋ฌ์ธ์์ธ ํจ์๋
ํ์ ๊ฐ์ ๋ฐ์ ํ์ ๊ฐ์ ๋ฐํํ๋ ํจ์ - Functor๋ mapํจ์๋ฅผ ๊ฑฐ์ณ
ํ์ ์ Functor๋ฅผ ๋ฐํ
map์ ์ง์ ํ ์๋ฏธ
- ์ปฌ๋ ์ ์ ์์๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ X
ํ์ ์ Functor๋ฅผ ํ์ ์ Functor๋ก ๋ฐ๊พธ๋ ๊ธฐ๋ฅ
Functor๋ฅผ ์ ์ฐ๋๊ฑธ๊น?
๊ฐ์ ๊บผ๋ผ ์๋ ์๊ณ ํ ์ ์๋ ์ผ์ด๋ผ๊ณ ๋ map() ๋ฉ์๋๋ก ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ฟ์ธ๋ฐ ์ ์ฌ์ฉํ ๊น?
- ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ธ๋งํ ์ ์๋ ์ํฉ์ ๋ชจ๋ธ๋งํ ์ ์๋ค.
- ๊ฐ์ด ์๋ ์ผ์ด์ค
- ๊ฐ์ด ๋ฏธ๋์ ์ค๋น๋ ๊ฒ์ผ๋ก ์์๋๋ ์ผ์ด์ค
- ํจ์๋ค์ ์์ฝ๊ฒ ํฉ์ฑํ ์ ์๋ค.
Functor - ๊ฐ์ด ์๋ ์ผ์ด์ค
- ์ฌ์ฉํ๋ ์ชฝ์์ null check ๋ถํ์
- null์ธ ๊ฒฝ์ฐ, ๊ทธ๋ฅ ๋ก์ง์ด ์คํ๋์ง ์์
- ์ฆ, ํ์ ์์ ์ฑ์ ์ ์งํ๋ฉด์ null์ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ
Functor - ๊ฐ์ด ๋ฏธ๋์ ์ค๋น๋๋ ์ผ์ด์ค
- Promise๋ค์ map์ ์ ์ฉํด๋ ๊ณ์ Promise๋ก ๋์จ๋ค.
- ์ฆ, non-blocking์์ ์๋ฏธ => ๋น๋๊ธฐ ์ฐ์ฐ๋ค์ ํฉ์ฑ์ด ๊ฐ๋ฅ
๊ทธ๋์ Monad๊ฐ ๋ญ๋ฐ?
- Functor์ flatMap()๋ง ์ถ๊ฐํ ๊ฒ
- Functor์ ๋ฌธ์ ์ ์ด ์์ด์ ๋ฑ์ฅํ ๊ฒ Monad
- Functor๊ฐ Functor์ ๊ฐ์ธ์ ธ ์์ผ๋ฉด Functor์์ Functor๋ฅผ ๊ฐ๋ ํ์ ์ด ๋์ด๋ฒ๋ฆฐ๋ค.
Monad์ ์์
๊ฐ์ด ์๋ ์ํฉ, ๊ฐ์ด ๋ฏธ๋์ ์ด์ฉ ๊ฐ๋ฅํด์ง ์ํฉ ๋ฑ์ ์ผ๋ฐ์ ์ผ๋ก๋ ํ ์ ์๋ ์ฌ๋ฌ ์ํฉ์ ๋ชจ๋ธ๋งํ ์ ์๋ค.
๋น๋๊ธฐ ๋ก์ง์ ๋๊ธฐ ๋ก์ง ๊ตฌํ์ฒ๋ผ ๋์ผํ ํํ๋ก ๊ตฌํํ๋ฉด์๋, ํจ์์ ํฉ์ฑ ๋ฐ ์์ ํ non-blocking pipeline์ ๊ตฌํํ ์ ์๋ค.
Reference
๋๋์
์์ง ์ ๋ชจ๋ฅด๊ฒ ๋คโฆ ๋ญ๊ฐ ๊ทธ ํ์
์ ์ผ์ ํ๊ฒ ์ ์งํ๋ฉด์ ๊ณ์ ํ์ดํ๋ผ์ธ์ ์ ์งํ๊ฒ๋ ํ๊ธฐ ์ํ ๊ฑฐ ๊ฐ์๋ฐโฆใ
์ด๊ณณ์ ๊ณณ ๋ด์ฉ์ ์ฐพ์๋ด๋ ๋ญ๊ฐ ๋ช
์พํ์ง ์๋ค๊ณ ํด์ผํ๋โฆ ์๋ฌด๋๋ ์ข๋ ๊ณต๋ถ๋ฅผ ํด๋ด์ผ ์กฐ๊ธ์ฉ ๋๋์ผ ์ฌ ๊ฒ ๊ฐ๋ค.