[Elm] ์˜ˆ์™ธ์ฒ˜๋ฆฌ: Maybe, Result

[์›๋ณธ ๋งํฌ]

Elm์€ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋‹ต๊ฒŒ, ๋ชจ๋‚˜๋“œ ๋ฐฉ์‹์„ ํ†ตํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ํ•ด๊ฒฐํ•œ๋‹ค.
try-catch ๊ฐ™์€ ๊ฑด ์—†๋‹ค.

Elm์˜ ๋ชจ๋‚˜๋“œ์—” Maybe, Result 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, Maybe๋Š” ๋‹จ์ˆœํžˆ ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€๋งŒ ์ฒดํฌํ•˜๊ณ , Result๋Š” ์˜ค๋ฅ˜ ์ •๋ณด๊นŒ์ง€ ํฌํ•จํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.



Maybe

Maybe๋Š” ์„ฑ๊ณต์ด ๋ถˆ๋ถ„๋ช…ํ• ๋•Œ, ์‹คํŒจ๊ฐ’์ด๋“  ์„ฑ๊ณตํ•œ ๊ฐ’์ด๋“  ์ผ๊ด€๋œ ํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
์„ฑ๊ณตํ–ˆ์„ ๋•Œ๋Š” Just๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋˜๊ณ , ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” Nothing์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

ํƒ€์ž…์€ ๋ณด๋‹ค์‹œํ”ผ Maybe T ํ˜•์‹์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

ํ•œ๋ฒˆ Maybe๋ฅผ ์‘์šฉํ•ด ๋ฃจํŠธ ํ•จ์ˆ˜๋ฅผ ์งœ๋ณด์ž.
๋ฃจํŠธ๋Š” ์–‘์ˆ˜์— ํ•œํ•ด์„œ๋งŒ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ค๋ฉด, ์—๋Ÿฌ๋กœ ์น˜๋ถ€ํ•˜๋Š”๊ฒŒ ๋‹น์—ฐํ•œ ๊ฒฐ๊ณผ์ผ ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿผ 0๋ณด๋‹ค ํด ๋•Œ์—๋งŒ Just๋กœ ๊ฐ์‹ธ์„œ ๋ฃจํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์•„๋‹ˆ๋ฉด Nothing์„ ๋˜์ง€๋ฉด ๋˜๊ฒ ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.

๊ทธ๋Ÿผ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ๊ฐ’์ด๋‚˜, Nothing์ด Maybe ํƒ€์ž…์œผ๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜๋  ๊ฒƒ์ด๋‹ค.

์ด Maybe ํƒ€์ž…์€ ๊ธฐ์กด์˜ ํƒ€์ž…๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค.
๊ฐ€๋ น Maybe Float๋ฅผ Float๋กœ ๋Œ€์ž…์‹œํ‚ค๋ ค๊ณ  ํ•˜๋ฉด

์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.
์†์— ๋“  ๊ฐ’์ด ์ง„์งœ Float์ธ์ง€ Nothing์ธ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Maybe๋ž€ ๋…€์„์„ ๋ฒ—๊ฒจ๋‚ด์ค˜์•ผ ํ•œ๋‹ค.
ํŒจํ„ด๋งค์นญ ๊ตฌ๋ฌธ์œผ๋กœ ๋ฒ—๊ฒจ๋‚ด๊ฑฐ๋‚˜

Maybe ํ•จ์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
withDefault๋Š” Nothing์ผ ๊ฒฝ์šฐ ์ฒซ๋ฒˆ์งธ๋กœ ๋ฐ›์€ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.



Result

Result๋Š” ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํฌํ•จ์‹œ์ผœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹จ ์ ์ด ๋‹ค๋ฅด๋‹ค.
๊ทผ๋ฐ ๋ญ.. ๊ทธ๊ฑฐ ๋ง๊ณค Maybe์™€ ํฐ ์˜๋ฏธ๋ก ์  ์ฐจ์ด์ ์€ ์—†๋‹ค.
์„ฑ๊ณต์ ์ธ ๊ฐ’์˜ ์ƒ์„ฑ์€ Ok๋กœ, ์˜ค๋ฅ˜ ๋ฐœ์ƒ์€ Err๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํƒ€์ž…์€ Result ์˜ค๋ฅ˜ํƒ€์ž… ์„ฑ๊ณตํƒ€์ž…์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

์œ„์˜ ๋ฃจํŠธ ํ•จ์ˆ˜๋ฅผ Result ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์ด๋ ‡๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํŒจํ„ด๋งค์นญ์ด๋‚˜ ์ „์šฉ ํ•จ์ˆ˜๋“ค๋กœ ๊ป์งˆ์„ ๋ฒ—๊ธธ ์ˆ˜ ์žˆ๋‹ค.


์ฐธ์กฐ
https://guide.elm-lang.org/error_handling/maybe.html
https://www.tutorialspoint.com/elm/elm_error_handling.htm
https://dennisreimann.de/articles/elm-maybe.html
https://package.elm-lang.org/packages/elm/core/latest/Maybe