[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