functor(ํํฐ)๋ ์ผ๋ฐ์ ์ธ ์ถ์ํ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๋ จ์ด ์์ง๋ง functor๋ C#์๋ ์กด์ฌํฉ๋๋ค.
์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ๋ functor, applicative ๋ฐ ๊ธฐํ ๋งคํ ๊ฐ๋ฅํ ์ปจํ ์ด๋์ ๋ํ ๋ ํฐ ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ ์ผ๋ถ์ ๋๋ค .
ํ๋ก๊ทธ๋๋ฐ์ ์ถ์ํ์ ๊ดํ ๊ฒ์ ๋๋ค. ํ๋ก ๊ธฐํ์ ๊ฐ๋ณ ์์์ ์ ์๋ฅผ ์กฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ผ๋ถ ์ถ์ํ๋ ์ํ์ ๋ฟ๋ฆฌ๋ฅผ ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ์๋ ค์ ธ ์์ต๋๋ค. ํนํ, ๋ฒ์ฃผ ์ด๋ก ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋น์ฅํ ๊ธฐ๋ฐ์์ด ์ ์ฆ๋์์ต๋๋ค. ๋ฒ์ฃผ ์ด๋ก ์ ์ผ๋ถ ๊ฐ๋ ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์๋ ์ ์ฉ๋ฉ๋๋ค. C#๊ณผ Java์ ๊ธฐ๋ฅ์ธ ์ ๋ค๋ฆญ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
์ด์ ๊ธฐ์ฌ์์ ํน์ ํ ์คํธ ๋ฐ์ดํฐ ๋น๋ ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ ์์ฑ๊ธฐ functor์ ๋ํด ์๊ฐํ์ต๋๋ค . functor๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ผ๋ฐ์ ์ผ๋ก endofunctors ๋ผ๊ณ ํ๋ functor์ ํ์ ์งํฉ์ผ๋ก ์์ ํ์ง๋ง ์ธ์ํ๋ ๊ฒ๋ณด๋ค ๋ ์ผ๋ฐ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ผ์์ ์ธ ๋ํ์์๋ ๊ทธ๋ฅ functor ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค .
๋ค์ ๊ธฐ์ฌ ์๋ฆฌ์ฆ์์๋ C#, F# ๋ฐ Haskell์ ์ฝ๋ ์์ ์ ํจ๊ป Ffnctor์ ๋ง์ ์์ ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ ๋๋ถ๋ถ ๊ฐ๋ ์ ๋ํด ๊ถ๊ธํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
- Maybe functor
- ๋ ์ค ํ๋ functor
- ํธ๋ฆฌ functor
- ์ฅ๋ฏธ ๋๋ฌด functor
- ๋ฐฉ๋ฌธ์ functor
- ๋ฐ์์ฑ functor
- ์์ด๋ดํฐํฐ functor
- ๊ฒ์ผ๋ฅธ functor
- ๋น๋๊ธฐ functor
- ์ํ ๊ธฐ๋ฅ์
- IO functor
- ๋ชจ๋ ธ๋ชจํฝ functor
- ์ธํธ๋ functor๊ฐ ์๋๋๋ค.
์ด ๋ชฉ๋ก์ ์์ ํ์ง ์์ต๋๋ค. ๋ ๋ง์ functor๊ฐ ์กด์ฌํฉ๋๋ค. ์๋ง๋ ๋ชจ๋ functor ์ค ๊ฐ์ฅ ์ ์๋ ค์ง ๊ฒ์ Sequence๋ผ๊ณ ๋ ํ๋ List์ผ ๊ฒ์ ๋๋ค. C# ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ ๋ชจ๋ functor๋ฅผ ์ฒ๋ฆฌํ ์ ์์ง๋ง ๋๋ถ๋ถ์ ์ฌ๋๋ค์ functor์ ๊ด๋ จ๋ ์ธ์ด ๊ธฐ๋ฅ์ผ๋ก๋ง ์๊ฐํฉ๋๋ค
IEnumerable<T>
.IEnumerable<T>
๋ฐ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ ์ ์กฐํฉ ์ ์ด๋ฏธ ์ ์ค๋ช ๋์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์๋ ๋ช ์์ ์ผ๋ก ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค.๊ทธ๋ฌ๋ LINQ,
IEnumerable<T>
๋ฐ C# ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด ์๋ ํ๋ ๋ฐฉ์์ ์ดํดํ๋ค๋ฉด ๋ค๋ฅธ ๋ชจ๋ functor๋ ์ง๊ด์ ์ผ๋ก ๋๊ปด์ง ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ถ์ํ์ ํ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ด๋ฐ ๋ฅ์ ๋ด์ฉ์ ์์ ํ ์ดํดํ๊ณ ์ถ์ต๋๋ค. ์๋นํ ์ด๋ก ์ ์ธ ๊ธฐ๋ฐ์ด ํ์ํ์ฌ ์ด๋ ต๊ณ , ๊ทธ๊ฒ์ ์ฝ๋ฉ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ ๋๋์ฑ๋ ์๋ฌ์ด ํ์ํฉ๋๋ค. ํ์ง๋ง ํํธ์ ์ผ๋ก ์ดํดํ ๋ด์ฉ์ ์ฝ๋ฉ์ ์ ์ฉํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ ์ตํ๋ฉฐ, ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ ์ฉํ ์ฝ๋์กฐ๊ฐ์ด ์ด๋ฌํ ์ด๋ก ์ ๋ฐํ์์ ์์ํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. functor
์ ๊ด๋ จ๋ ์์ ๊ธ๋ค์ ๋๊ธ๋ก ์ถ๊ฐํ๊ฒ ์ต๋๋ค.