์ค์ Functor๋ ๋ฌด์์ ์๋ฏธํ๋๊ฐ?
Functor
์นดํ ๊ณ ๋ฆฌ ์ฌ์ด์์์ ์ฌ์(morphisms)
- ๋์ง์ ๋์๋ค์ ๊ท์ ํ๋ฉด, ๊ทธ ์ฌ์ด๋ฅผ ๋น๊ตํ๊ฑฐ๋ ๋์ํ๊ธฐ ์ํ ์๋จ๋ ํ์ํ๋ค.
- ์งํฉ์ ๊ฒฝ์ฐ ์งํฉ ์ฌ์ด์ ํจ์๊ฐ ๊ทธ๊ฒ์ด๋ค.
- ๊ทธ๋์ ๋์๋ค ์ฌ์ด์๋ ์ฌ์(morphisms)๊ฐ ์์ ์ ๋ฐ์ ์๋ค.
- ์นดํ ๊ณ ๋ฆฌ ์ด๋ก ๋ ๊ทธ ๋์๋ค ์ฌ์ด์ ์ฌ์์ ๊ฐ์ง๋ ์ฒด๊ณ ์์ฒด๋ฅผ ๋ค์ ๋์์ผ๋ก ํ๋ ๋ฉํ์ํ ์ด๋ก ์ด๋ค.
- ์ด๋ ๊ฒ ํด์ ๊ทธ๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ฒด๊ณ๋ค์ ์ผ๋ฐ์ ์ธ ์๋ฆฌ๋ฅผ ๋์ถํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค.
์นดํ ๊ณ ๋ฆฌ ์ด๋ก ์์๋ ์ผ์ชฝ์ ์งํฉ/ํจ์์ ์ฒด๊ณ ์์ฒด๋ฅผ ์ค๋ฅธ์ชฝ ์ฒ๋ผ ๊ท์ ํ๊ณ , ์ด๋ฅผ โ๋์โ์ผ๋ก ๋ค๋ฃฌ๋ค.
์ ์
๋ค์์ ๋ณด์กดํ๋ฉฐ ํ ์นดํ ๊ณ ๋ฆฌ์ ๋์๊ณผ ์ฌ์์, ๋ค๋ฅธ ์นดํ ๊ณ ๋ฆฌ์ ๋์๊ณผ ์ฌ์์ ๊ฐ๊ฐ ๋์์ํค๋ ๊ด๊ณ
- ๋์๊ณผ ์ฌ์์ ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ๋ค.
- ํญ๋ฑ ์ฌ์์ ๋ณด์กดํ๋ค.
- f๊ฐ ํญ๋ฑ์ฌ์์ผ ๊ฒฝ์ฐ ๋ณํํ์ ๋ F(f)๋ ํญ๋ฑ ์ฌ์์ด์ด์ผ ํ๋ค.
- ์ฌ์์ ํฉ์ฑ๊ด๊ณ๋ฅผ ๋ณด์กดํ๋ค.
- C์ ๋ผ ํ ๊ฒฝ์ฐ, ๊ฐ ๋์ด์ผ ํ๋ค.
ํจ์๋ ์ฌ์์ธ๊ฐ?
- ํจ์๋ ๋์์ด ์นดํ ๊ณ ๋ฆฌ์ผ ๋ฟ, ์ฌ์์์ ๋์ผํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ํจ์๋ ํฉ์ฑ ๊ฐ๋ฅํ๋ค.
- ํญ๋ฑ ๋ณํ๋ ์๋ค. ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์์ ์ผ๋ก ์ค์ ๋ง ํ๋ฉด ๋๋ค.
- ๊ฒฐ๊ตญ ํจ์๋ ์๋ฒฝํ ์ฌ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ์ด๋ ๊ณง ์ด์ ์ฅ์์ ์์๋ณธ ์ฌ์์ ํน์ง๋ค์ ํจ์์ ๋ชจ๋ ์ ์ฉ๋๋ค.
- ํจ์๋ Isomorphism(๋ํ ์ฌ์)์ด๊ฑฐ๋ monomorphism์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- ํนํ Isomorphism์ ํด๋นํ๋ ํจ์๋ค์ด ์ด๋ก ์ ์ผ๋ก ์ค์ํ๋ค.
- ์ญ์ฌ์์ด ์กด์ฌํ๋ ํจ์๋ฅผ ๋งํจ
Endofunctor
- ํ๋ก๊ทธ๋๋จธ์๊ฒ ๊ฐ์ฅ ์ค์ํ ํจ์๋ ์ ์์ญ๊ณผ ๊ณต์ญ์ด ๊ฐ์, ์ฆ, C์์ C๋ก ๊ฐ๋ ๊ฒ๋ค์ด๋ค.
- ํ๋ก๊ทธ๋๋ฐ์ Functor๋ ๋ฐ๋ก ํ์ (Type) ์นดํ ๊ณ ๋ฆฌ์ ์๊ธฐ ํจ์๋ฅผ ์๋ฏธํ๋ค.
- ์ฌ๊ธฐ์ Type์ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ๋ Type์ ์๋ฏธํ๋ค.
T-> F<T>
,U -> F<U>
,f -> lift(f)
์ ํํ๋ก ๋ณํ ๋๋ ๊ฒ์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉ๋๋ ๋ค๋ฅธ ํจ์
- ๊ทธ๋ ์ง๋ง ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ํจ์๊ฐ ์๊ธฐ ํจ์์ธ ๊ฒ์ ์๋๋ค.
Evaluator
Evaluator<T>: T -> Double
- ์์ ๊ฐ์ ํํ์ 01. Type Constructor (Generic function)๋ฅผ ์๊ฐํด๋ณด์.
- endo functor์ธ์ง ํ์ธํด๋ณด์.
- ์์์
T
ํ์ ์Evaluator<T>
๋ก ๋ง๋ค ์ ์๋๊ฐ? : O - ์์์
U
ํ์ ์Evaluator<U>
๋ก ๋ง๋ค ์ ์๋๊ฐ? : O lift
ํจ์๋ฅผ ์ ์ํ ์ ์๋๊ฐ?: X
- ์ด๋ ๊ฒ ์ ์๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ์ ์๊ฐ ๊ฐ๋ฅํ๋ค.
- `f: U โ T
et: T -> Double
et o f: U -> Double == Evaluator<U>
- ์ด์ ๊ฐ์ด ์ฃผ์ด์ง๋ ํจ์์ ๋ฐ๋ผ
lift
๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์๋ค. - ์ด๋ ์์ ํ โํ์ ์นดํ ๊ณ ๋ฆฌ์ ์๊ธฐํจ์โ๋ ์๋์ง๋ง, ๋ค๋ฅธ ์๋ฏธ๊ฐ ์๋ค.
- Evaluator๋ Type์ Opposite Category์ด๋ค. (Type_op โ Type Functor)
Opposite Category
- Type_op(Type opposite): Type์์ ์ฌ์์ ๋ฐฉํฅ๋ง ๋ฐ๋๋ก ํ ์นดํ ๊ณ ๋ฆฌ
- ์นดํ ๊ณ ๋ฆฌ๊ฐ ๋๊ธฐ ์ํ ์กฐ๊ฑด์ ํญ๋ฑ ์ฌ์ ์กด์ฌ, ํฉ์ฑ ๊ฐ๋ฅ๋ฐ์ ์๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Type Opposite์ ์นดํ ๊ณ ๋ฆฌ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- Opposite Category์์๋
U->T
ํจ์๊ฐT->U
๋ก ๊ฐ๋ ์ฌ์์ผ๋ก ์ทจ๊ธ๋๋ค.
contravariant functor
- Evaluator๋ ์ด์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์๋ค.
- ์ด๋ฐ ์์ผ๋ก
C_op -> D
์ผ๋ก ๊ฐ๋ ํจ์๋ฅผC -> D
๋ก ๊ฐ๋ contravariant ํจ์, ๋ฐ๋ณ ํจ์๋ผ๊ณ ํ๋ค. - ์ฆ, Evaluator๋ Type์ ๋ํ Covariant endofunctor์ด๋ค.
- Opposite Type Category์์ Type Category๋ก ๊ฐ๋ ํจ์
Pair
Pair<T, U>: T, U๋ฅผ ์ฃผ๋ฉด Tuple์ ๋ง๋ค์ด์ค
- ์ผ๋ถ 01. Type Constructor๋ ๋ ๊ฐ ์ด์์ ํ์ ์ธ์๋ฅผ ์๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
T
๋U
๊ฐ ํ๋์ฉ ๊ณ ์ ๋ ์ํฉ์์lift
ํจ์๋ฅผ ์ ์ํ๋ ๊ฒ์ ๊ฐ๋จํ๋ค.- ์ด๋ ๊ณง
Pair
๊ฐ ์๊ธฐ ํจ์์์ ๋ํ๋ด๋ ๊ฒ๊ณผ ๋์น์ด๋ค. U -> Pair<T, U>
,V -> Pair<T, V>
๋ก ๋ง๋๋ ๊ฑด ๋น์ฐํ๋ ์ฌ์์ ๋ํ ๋ณํ๋ง ํ์ธํ๋ฉด ๋๋ค.
- ์ด๋ ๊ณง
- ๊ทธ๋ผ
Pair
์์ฒด๋ ์ด๋จ๊น?
Product Category
- ์์์์ ๋์์ผ๋ก ํ๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ์ํด๋ณด์.
- C, D ์นดํ ๊ณ ๋ฆฌ๊ฐ ์์ ๋, ๊ฐ๊ฐ์ ๋์๋๋ ๋์์ ์์์์ผ๋ก ๋ง๋ค ์ ์์ ๊ฒ์ด๋ค.
- ์ด๋ ๊ฒ ๋์์ ์์์์ ๋ค์ ๋์์ผ๋ก, ์ฌ์์ ์์์์ ๋ค์ ์ฌ์์ผ๋ก ํ๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ Product ์นดํ ๊ณ ๋ฆฌ๋ผ ํ๋ค.
Pair
๋Type x Type
์์Type
์ผ๋ก ๊ฐ๋ ํจ์์ด๋ค.f: X1 -> Y1
,g: X2 -> Y2
ํจ์์ ์์์์ด ์ฃผ์ด์ง๋ฉด,Pair<X1, X2> -> Pair<Y1, Y2>
์ ํจ์๋ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
๋๊ฐ์ ํ์ ์ธ์๋ฅผ ๊ฐ์ง Type Constructor
์ผ๋ฐ์ ์ผ๋ก ๋๊ฐ์ ํ์
์ธ ์๋ฅผ ๊ฐ์ง 01. Type Constructor๋, ๋ค์์ ๋ง์กฑํ ๊ฒฝ์ฐ ํญ์ Type x Type -> Type
ํจ์๊ฐ ๋๋ค.
F<T, >
๊ฐType -> Type
Functor์ด๋ค.F<, T>
๊ฐType -> Type
Functor์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ๋ ์ด๋จ๊น?
๋๊ฐ์ ์ธ์๋ฅผ ๊ฐ๋ Functor F๋ ์๋๋ฅผ ๋ง์กฑํ๋ค.
F<T, >
๊ฐType_op -> Type
Functor์ด๋ค.F<, T>
๊ฐType -> Type
Functor์ด๋ค.
๋จ์ํ๋ค. F๋ Type_op x Type -> Type
ํจ์๊ฐ ๋๋ค.
ํจ์ ํ์
Function<T, U> == T -> U
์ ๋ง๋๋ 01. Type Constructor๊ฐ ๋ํ์ ์ด๋ค.
์ด์ด.. ์ฌ๊ธฐ์ ๋จธ๋ฆฌ๊ฐ ์๋์๊ฐ๋๋ฐ ๊ฑฑ์ ๋ง์.
์ ๋ฆฌ
- ์์์ ์์๋ณธ Functor๋ ํ๋ก๊ทธ๋๋ฐ์์์ Functor์ ํฌํจ๋์ง๋ ์๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ์์์ Functor๋
Type -> Type
, ์ฆ ์๊ธฐ ํจ์์์ ๊ทธ์น๊ธฐ ๋๋ฌธ์ด๋ค. - ์ํ์์์ Functor๋ ๋ง์ ๊ฒ์ ํฌํจํ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ด๋ค.
- ์ ๋นํ ์ดํดํ๋ค๋ฉด ๋์ด๊ฐ๋ ๋ฌด๋ฐฉํ๋ค.