C#์ ๊ฐ์ฒด์งํฅ ์๋?
๋ ์ด ์ฌ๋ ์ฝ๋ ๋ณด๊ณ ์ง์ง ๊ฐ์ฉ๊ณ ํ๋ก๊ทธ๋๋จธ ๊ฒฝ๋ ฅ 20๋ ๋๋ ๊ณ ์ธ๋ฌผ์ด๊ณ ํ์ฌ์์ ๋ง๋ ๊ฒ์ ๋ณด๊ณ ๊น๋ํ๋๋ฐ
์ด ์ฌ๋์ด ๋ด๊ฐ ํ๋ฌ ๋ด๋ด ๋๋๋๋๊น ์ธ๋ฒคํ ๋ฆฌ ์์ ํ๋งคํ ๊ฑด๋ฐ QA ํ๋ ์กฐ๊ฑด์ผ๋ก ๋ง๋ค์ด์ฃผ๊ฒ ๋คํ๊ณ ์ค๋ ๋ฐ์๋๋ฐ
์ง์ง ์กด๋ ์๋ง๋ค์ด์ ๋๋๋๋ฐ, ์ด๋ป๊ฒ ํด์ผ ์ด๋ ๊ฒ ์๋ฆ๋ค์ด ์ฝ๋ ์ง๋๊ณ ๋ฌผ์ด๋ณด๋๊น
ํจ์ํ C# ์ด๋ผ๋๊ฒ ๋ญ ์ด๋ค ์ฝ๋ฉ๋ฐฉ์์ธ๊ฑฐ๋
Linq๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ผ๋๊ฑด๊ฐ
์ด๋ค ๋๋์ ํจ์ํ C#์ด๋ผ๊ณ ํ๋๊ฑด์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์ํ C#์ด๋ผ๋๊ฑฐ ๊ฒ์ํด๋ ๋ค ๋ชจํธํ๊ฒ ๋งํ๊ณ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ฌผ์ด๋ดค๋๋ฐ, ํ๋ฒ ์ฐพ์๋ณด๊ณ ๋ค์ ์ฐ๋ฝ์ฃผ๋ผ๊ณ ํด์...
์งํผํฐํํ ๋ฌผ์ด๋ณด์ฃ
๊ทธ๋ด๊น?
๋๋ค ์๊ณผ ๋ฌด๋ช ํจ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ผ๋ ์๋ฆฌ์ธ๊ฐ
Linq ์ ์ฐ๋ผ๋ ๋ง์ธ๊ฐ
์ํ๋ณํ๋ฅผ ์๊ฒฉํ๊ฒ ํด์ ๋ณ์๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ ์ค๊ตฌ๋๋ฐฉ์ผ๋ก ์ํ๋ณํ์ํค์ง ์๋ ๊ฒ ์ด ์ค์ํจ. ๋ํ ๋ฉ์๋๋ฅผ ํจ์ํํ๋ก ํด์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ค์ด๋ ๊ฒ ๋ํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ ์ ์์ง. ๊ฑ ๊ตฌ๊ธ๋ง๋ง ํด๋ ๋ค ๋์ด.
๊ทธ๊ฑฐ๋ ๊ทผ๋ฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌด์จ ์ฐจ์ด์ฌ? ๋ C++์ฐ๊ธดํ๋๋ฐ๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค..
๊ฐ์ฒด์งํฅ์ ์ํ์ ๋ฉ์๋๋ฅผ ๊ฐ์ฒด์ ๋ด๊ณ ์๋ค๋ฉด, ํจ์์งํฅ์ ๊ทธ๊ฒ๋ค์ ์์กด์ฑ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์. ์ฆ, ์ํ๊ฐ ๋ฉ์๋์ ์ํด ๊ฒฐ์ ๋์ง ์๋๋ก ํ๋ ๊ฒ.
์ด๋ ต๋ค
๊ฑ ๊ฐ๋จํ๊ฒ Option ๊ฐ์ Monad ๋ First Class Function ๊ฐ์๊ฑฐ ์ฐ๋๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ฉด๋จ. map ๊ณผ flatMap ๋ง ์์๋ ๋ฐ์ ์๋ค๊ณ ์๊ฐํจ. ๊ฒฐ๊ตญ ์ํ๋ฅผ ์ต๋ํ ์์ ํ๊ฒ ๋ค๋ฃจ๋ ๊ฒ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์๊ฐํจ.
ํด๋ด์ผ ์๊ฒ ๋ค
์ ๋ฐ ์ง์ธ ์จ๋ผ์ธ์ ๋ง๋๊ณ ๊ตฌํ๋ ๊ฒ๋ ๋๋จํ๊ฑฐ ๊ฐ์ ์ด์ ์ ๋ต ๋ฐ์ ๋๋ก ๊ฒ์์ผ๋ ๋๋ฌ๋ณด๊ณ ํ๋๋ฐ ๊ฒ ๊ฐ๋ฐ๋ ๋ฐ์๋ค ๋ณด๋ ๊ฒฐ๊ตญ ๋นก์ธ๋๋ผ
๊ณ์ ๊ท์ฐฎ๊ฒํ๋๊น ๋ต ํด์ฃผ๋๋ฐ
๋ด๊ฐ ๋ฐ๋น ์ ๋ชปํ๋ค๋ ์ด์ผ๊ธฐ์ ใ ใ ์ด์ํ๊ฒ ์๊พธ ์ฐพ์๋ณด๋ค๊ฐ ๋๊ฐ ๊ธฐ์ด์ ์ธ๊ฑฐ ๋ฌผ์ด๋ณด๋ ๊ฑธ ๋ด๊ฐ ๋ตํด์ฃผ๊ณ ์๋๋ผ
๊ทธ๋ผ ๋๊ฐ ๊ทธ ์ฌ๋์๊ฒ ๊ณ ์ธ๋ฌผ์ธ๊ฑฐ์ง
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
์ด๊ฑธ๋ก ๊ณต๋ถํด๋ณธ๋ค ๊ณ ๋ง๋ค
๊ทธ๊ฒ F#๋ผ๊ณ ๋ง์๊ฐ ๋ง๋ ๊ฒ ์๋๋ฐ ๊ทธ๊ฑฐ ๋ฌธ๋ฒ์ C#์ ์ด์ํ๊ฒ ํจ์ํ C#์ด๋ค. F# ํ๋ฒ๋ง ๋ฐ๋ผํด ๋ณด๋ฉด ๊ทธ๊ฒ ๋จผ์ง ์๊บผ์.
๊ฐ์ฌํฉ๋๋ค ํ๋
์์ฆ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ๋ณดํต ๋ฉํฐํจ๋ฌ๋ค์์ ์ง์ํ๊ธฐ ๋๋ฌธ์, ํ ํจ๋ฌ๋ค์์๋ง ๊ตญํ๋์ง ์์(์๋ฅผ๋ค๋ฉด ๊ฐ์ฒด์งํฅ). ex)
https://en.wikipedia.org/wiki/Comparison_of_multi-paradigm_programming_languages
๊ณ ๋ง๋ค
๊ทธ๋ฅ ํจ์ํ ํจํด์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ผ๋ ๋ง์. LINQ์ Nullable์ด ํจ์ํ ํจํด์ ์์์ด๊ณ . ๊ทธ๋ฆฌ๊ณ ์ ๋๋ก๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ Scala ๊ฐ์ ์งฌ๋ฝ ์ธ์ด์์๋ ๋นก์ . ๋ชจ๋ ๋ณ์์ ๋ถ๋ณ์ฑ์ ์ฃผ๋๊ฒ ์๊ฐ๋ณด๋ค ์ฌ์ด ์ผ์ด ์๋.
๋์ผ๋ก ์ฝ๋๋ฅผ ๋ณด๊ณ ์๋ฆ๋ต๋ค๊ณ ๋๊ผ์ผ๋ฉด ๋ฌผ์ด๋ณผ๊ฒ ์์ง์๋ ์ฝ๋์์ ๋ต์ด ๋ค ์๋๋ฐ
๋ณด๊ธฐ๋ง ํด์ ๋ชจ๋ฅด๋๊น;
๋ฑ๋ณด๋๊น func์ด๋ ๋๋ค๋ก ๋๋ฐฐ๋์ด์๋ ์ฝ๋ ๋ดค๊ตฌ๋จผ
๊ทธ๊ฒ๋ ์๊ณ , ReadOnly๋ ์์ํจ์๋ก ๋ฑ ์ฝ๋ ๋ฉ์๋๋ค์ด ๊ธฐ๋ฅ๋ณ๋ก ๋ฑ๋ฑ ๋ถ๋ฆฌ ๋์๋๋ฐ, ์ฝ๋ ์ค๋ ์กด๋ ์งง๋๋ผ
ํจ์ํ ์ธ์ด์ C# ์์ฒด๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ๋ฐ ํจ์ํ C# ์ด๋๊ฒ ์๋ฏธ๊ฐ ์๋๊ฑด๊ฐ?
๊ทธ๋ฅ ํจ์ํ ํจํด์ ์ฐ๋ผ๋ ๋ง ์๋? C#์์ ํจ์ํ ๋๋ฌด ํ๋ ๋ฐ...
C# ํจ์ํ ์ง์ํ์ง Func, Action ๊ฐ์ ๋๋ค๊ฐ ํจ์ํ ์ธ์ด ๊ธฐ๋ณธ์ด์์
ํจ์ํ์ด ๋ณ๊ฒ ์๋๋ผ ๋์์ ์ผ๊ธ ์๋ฏผํ ์ด๊ฑธ ๋งํ๋๊ฑธ๋ก ์๊ณ ์์ ๊ทธ๋๊น ๊ธฐ์กด Java7 ์ด์ ๋ฒ์ ์์ ์ด๋ค ๋์์ ์บก์ํ ํ๊ธฐ ์ํด์ ํด๋์ค ์์ฒด๋ฅผ ์ง์ด๋ฃ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ด์ง๊ณ ๋์์ ๋ฃ์ ์ ์๋ค ์ด๊ฑฐ? ๊ทธ๋ฆฌ๊ณ ํจ์ํ์ ๋ณ๊ฒ ์๋๋ผ ์ํ์ ํจ์์ฒ๋ผ ๊ฐ์ ์ธํ์๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ์์ํจ์๋ฅผ ์ฌ์ฉํจ (๋ด๋ถ ์ํ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋จ -> ์ฌ์ด๋ ์ดํํธ๋ผ๊ณ ํจ) ์ด๊ฒ ์ข์ ์ : ๋น๋๊ธฐ ํ๊ฒฝ์์ ๋ ์ด์ค ์ปจ๋์ ์ด ์ต์ํ๋จ ์ ์๋ฐ ๋๋ ์กฐ๋ ๋ชฐ๋ผ์ ์ค๋ช ์ด ๋ํดํจ ใ ใ ;