์ˆ˜ํ•™์—์„œ์˜ ๋ฒ”์ฃผ๋ก ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์™œ Monad๋Š” ์ด๋Ÿฐ ํ˜•ํƒœ๊ฐ€ ๋œ ๊ฒƒ์ธ๊ฐ€?

Monad, Category Theory

  • Monad๋ผ๋Š” ๋‹จ์–ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํƒœ๋™๋œ ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์ˆ˜ํ•™์—์„œ์˜ ๋ฒ”์ฃผ๋ก ์—์„œ ์œ ๋ž˜๋œ ๋‹จ์–ด์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ Monad๋Š” ์ˆ˜ํ•™์˜ Monad์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ Monad๋Š” Type Category Monad๋ผ๊ณ ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ชจ๋‚˜๋“œ์— ๋ถˆ๊ณผํ•˜๋‹ค.
  • ์ˆ˜ํ•™์  ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชจ๋‚˜๋“œ๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์™œ ์•Œ๋ฉด ์ข‹์€๊ฐ€ 1

  • ๊ทธ๋Ÿผ ์™œ ๋ฐฐ์šฐ๋Š”๊ฐ€?
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ชจ๋‚˜๋“œ ๊ฐœ๋…์„ ํ†ตํ•ฉ์‹œ์ผœ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ƒ์œ„ ๊ฐœ๋…์„ ์•ˆ๋‹ค๋ฉด, ํ•˜์œ„ ๊ฐœ๋…์€ ์‰ฝ๊ฒŒ ์ดํ•ด๋˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค.
  • ๋ชจ๋‚˜๋“œ๋ผ๋Š” ์•„์ด๋””์–ด๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ์„ ๋ณด๊ณ  ๋ฐฐ์šฐ๋ฉด ์˜คํžˆ๋ ค ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ๋•Œ๊ฐ€ ๋งŽ์„ ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ณด๋‹ค ๋” ์ƒ์œ„ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ดํ•ด๋ฅผ ํ•˜๊ณ , ์ด ๊ฐœ๋…์„ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ฒ˜์ง€์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•ด์„œ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋ณด๋‹ค ์ข‹๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋‚˜๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋˜ ์ด์œ ์ค‘ ํ•˜๋‚˜๋Š” ์ด ๋‹ค์–‘ํ•˜๊ฒŒ ๊ตฌํ˜„๋œ ํ˜•ํƒœ๋ฅผ ๋ชจ๋‘ โ€œ๋ชจ๋‚˜๋“œโ€๋ผ ๋ถ€๋ฅด๋Š”๋ฐ์„œ ์˜ค๋Š” ํ˜ผ๋ž€์ด๋‹ค.
  • ์ง€๊ธˆ๊นŒ์ง€๋Š” ์กฐ๊ธˆ๋” ์‰ฌ์šด ์ดํ•ด๋ฅผ ์œ„ํ•ด Swift ์–ธ์–ด๋ฅผ ๊ฐ€์ ธ์™€ ์„ค๋ช…ํ–ˆ์ง€๋งŒ, ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ˆ˜ํ•™์˜ ์—„๋ฐ€ํ•œ ์ •์˜๋ฅผ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•œ๋‹ค.
  • ๊ทธ ์ดํ›„ ๊ฐ๊ธฐ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•์„ ๋ณธ๋‹ค๋ฉด, ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณด์ด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์™œ ์•Œ๋ฉด ์ข‹์€๊ฐ€ 2

  • ๋˜ ํ•˜๋‚˜ ์žฅ์ ์ด ์žˆ๋‹ค๋ฉด, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์€ โ€œ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก โ€์— ๊ธฐ๋ฐ˜์„ ๋‘๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ฒฐ๊ตญ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์–ธ์  ๊ฐ€๋Š” ๊ณ ๊ธ‰ ๊ฐœ๋…๋„ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค.
  • Monad๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก ์— ๊ธฐ๋ฐ˜์„ ๋‘” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์ค‘ ๋‘๋ฒˆ์งธ๋กœ ์‰ฌ์šด ๊ฐœ๋…์ด๋‹ค (?)
    • ์ฒซ๋ฒˆ์งธ๋Š” Functor
  • ์ด ๋‹ค์Œ์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก ์—์„œ ์œ ๋ž˜๋œ ๋‹ค๋ฅธ ๊ฐœ๋…๋“ค์„ ๋ฐฐ์šฐ๋ ค๋ฉด Monad๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก ๊ณผ ์—ฐ๊ฒฐ์ง€์–ด ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
    • ์ง€๊ธˆ๊นŒ์ง€๋Š” ์–ด์ฐŒ๋ณด๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๊ตญํ•œ๋˜์–ด Monad๋ฅผ ๋ฐฐ์šด ๊ฒƒ.

์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก  ๊ฐœ๋…

  • Functor
  • Monad
  • Adjunction
  • Comonad
  • Limit
  • Applicative

์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด๊ฐ€?

  • ๋ณดํ†ต ๋‹ค๋“ค ์–ด๋ ต๋‹ค๊ณ  ํ•œ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ด โ€œ์ถ”์ƒ์ โ€์ด์–ด์„œ ๊ทธ๋ ‡๊ฒŒ ๋“ค๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  • ๊ทธ๋‚˜๋งˆ ์•ž์—์„œ ์˜ˆ๋“ค์„ ๋ณด๊ณ  ์™”์œผ๋‹ˆ ๊ทธ๋งŒํผ ์–ด๋ ต๊ฒŒ ๋“ค๋ฆฌ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค.

  • ์œ„ํ‚คํ”ผ๋””์•„์—์„œ ๋“ค๊ณ ์˜จ ์‚ฌ์ง„์ด๋‹ค.
  • ๊ทธ๋ฆผ๋ณด๋ฉด ์–ด๋””์„œ ๋งŽ์ด ๋ณธ ๊ฒƒ ๊ฐ™์ง€ ์•Š์€๊ฐ€?
  • ์ด์ •๋„์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค๋ฉด ๋„์ „ํ•ด๋ณผ๋งŒ ํ•˜๋‹ค.

์™œ ์–ด๋ ค์šด๊ฐ€?

  • ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์šฐ๋Š” ๊ฐœ๋…์€ ํ˜„์‹ค ์„ธ๊ณ„์™€ ๊ฐœ๋…์ด ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์‹œ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋Ÿฌ๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ํ•˜์ง€๋งŒ ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก ์˜ ๊ฐœ๋…์€ ๊ทธ ์ถ”์ƒํ™”๋œ ๊ฒƒ์„ ๋‹ค์‹œ ๋ชจ์•„ ์ถ”์ƒํ™”ํ•œ ๊ฒƒ๋“ค์ด๋‹ค.
  • ์ •์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ์‚ฌ๊ณ ๊ฐ€ ์•„๋‹Œ, ๊ดœํžˆ ์ด์ƒํ•œ ๋น„์œ ๋ฅผ ๋“ค์—ˆ๋‹ค๊ฐ„ ๋” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋‹ค.

Reference