record๋ฅผ ์จ๋ณด๊ธฐ ์ํด ๋ชจ๋๋๊น์ง ๊ฐ์ต๋๋ค.
์ฐ์ฃผ์ ๋น๋ฐ ๋ชจ๋๋์ ์ ๊ทผํด๋ด
์๋ค
๋ชจ๋๋์ ์ธ๊ณ๋ฅผ ํ๊ตฌํ๊ธฐ ์ํด Monad
๋ผ๋ ์ฝ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค. ์ฌ์ค ๋ชจ๋๋ ๋ฐ ํจ์ํ ์ธ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ณผ๊ฑฐ์ ์๊ฐ์ ์ผ์ง๋ง ์ ๊ฒ์ผ๋ก ๋ง๋ค ์ ๋ ์์์ต๋๋ค. C#9 record๋ฅผ ์ด์ฉํด ๋ชจ๋๋์ ์ธ๊ณ์ ๋น ์ง๊ธฐ ์ํด, ๋ค์ ์๋ํฉ๋๋ค.
C# 9์ ๋ชจ๋๋ ์ธ๊ณ์๋ ๋์ด์ Main() ๋ฉ์๋ ์๋(์์ง๋ง ๊ฐ์ถฐ์ง) ์ธ๊ณ์ ๋๋ค.
using System;
Console.WriteLine("Hello! Monad!");
์์ ๊ณต์ ๋ ์ํฐํด์ ์ด์ฉํด ๋น ๋ฅด๊ฒ ๋ชจ๋๋ ์ธ๊ณ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
์ด ์ธ์์ ์ต์ ์์๋ Maybe
์
๋๋ค. Maybe
๋ ์๋ฌด๊ฒ๋ ์๋ Nothing
๊ณผ ์ด์ธ์ ๋ชจ๋ ๊ฒ ์ค์ ๋ถ๋ช
ํจ์ธ Just
๋ก ์ด๋ฃจ์ด์ง ์ธ์์
๋๋ค. ์ด๋ฐ ๋ชจ๋๋ ์ธ์์ ๋ค์๊ณผ ๊ฐ์ด ๋น ๋ฅด๊ฒ ๊ตฌ์ถ๋์์ต๋๋ค.
using System;
;
abstract record Maybe<T>;
record Nothing<T> : Maybe<T>;
record Just<T>(T Value) : Maybe<T>;
์ด๋ฐ ์ธ์์ C# 9์ ์ต์์ ๋ฌธ
์ ์ํด์ ์๋ฌด๊ฒ๋ ์๋ ๋น ๊ณต๊ฐ์ธ ์ธ๋ฏธ์ฝ๋ก (;)์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
์ด ์ธ์์ ์ต์ ์์์ ์ ์๋ง ์์ ๋ฟ ์ฌ์ ํ ์๋ฌด๊ฒ๋( ; ) ์๋ ๋น ์ธ์์ ๋๋ค.
๊ทธ์ ์ ๋ชจ๋๋ ์ธ๊ณ์์๋ nullable
ํ ์ ์์ผ๋ฏ๋ก null
๊ฐ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ฒฝ๊ณ
๋ฉ์์ง๋ฅผ ๋ณด๋ด๋๋ก ๋ค์๊ณผ ๊ฐ์ด ํ๋ก์ ํธ์ ์์ฑ์ ์ถ๊ฐํฉ๋๋ค.
์ด ์์ฑ์ ์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด null
์ผ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ค๋๋ค.