Functor가 무엇일까? Array가 Functor라는 말은 들어보았을 것이다. 뭐 다들 그러니 Functor가 맞을 것이다. 그러면 Array는 왜 Functor이고 Functor라고 말할 수 있는 최소 조건은 무엇일까? 한 번 확인해보자.
Functor
Functor는 데이터 타입이다. 뭐 Array도 데이터 타입이니 놀랄 내용도 아니다. Functor는 어떤 값을 가지고 있는 컨테이너 성격의 데이터 타입이며, 해당 값에 함수를 적용 할 수 있어야 한다. 우리가 Array안에 있는 값을 map으로 특정 함수를 적용 시키는 것과 마찬가지라고 보면 된다.
자주 들어보았을 법한 내용으로 map을 가지고 있는 객체라면, 펑터라고 보아도 된다고 많이 들었을 것이다. map이 무엇을 뜻하는 걸까? 간단하게 Array에서의 map은 내부의 값들을 순회하며, 함수를 적용하고 출력을 해주는 함수이다.
간단한 내용을 언급하자면, 내부의 값은 Functor아 아니다. 일반적으로 [1, 2, 3, 4], [true, true, false, true] 등등 원시 값들을 순회 한다고 쳐보자. 당연학게도, 숫자나 진위 값들이 map을 지원 할 리 없으니 Functor가 아니다.
( 뭐 물론, 2차원 이상의 배열을 순회시 내부의 값은 배열들 일테니, Functor겠지만, 일반적인 상황을 따지자.)
뭐 간단하게 Functor가 무엇인지, 아직까지는 감이 안 올 수 있다. 감이 오는게 이상 할 것이겠지만....
Functor는 왜 어려울까? 어려운 거니까 어렵다.
Functor(함자)
뭐 물론 Array는 Functor이다. 이런식의 설명만 하고 마친다면 꽤나 쉬울 만한 내용일 것이다. 하지만 조금만 더 들어가보자.
함자를 설명하기 위해서는 범주론을 간략하게나마 설명 하고자 한다. 뭐 물론 내 설명에 틀린 내용도 있을 수 있고, 많이 생략된 내용이여서 이해가 더 안 갈 수 있다. 하지만 필요한 키워드에 굵게 칠해 둘테니 그 내용을 확인 하기 바란다.
범주론 (category theory)
범주론은 수학적 구조와 그들 간의 관계를 범주라는 추상적인 개념으로써 다루는 수학기초론 이다.
범주론은 당연하게도 범주라는 것을 다룬다. 범주는 두가지를 다룬다. 범주는 두가지 요소 대상의 모임과 사상(함수)의 모임을 가지고 있다.
범주라는 단어는 꽤 어렵게 들릴 수 있다. 한 번 조금만 축소를 시켜서 범주를 위상수학이라고 해보자. 위상수학은 여러 도형을 대상으로 한다. 해당 도형에 사상(힘수)를 적용 할 수 있을 것이다.
자 우리는 범주를 가지고 위상수학을 대응 시켜보았다. 이게 Functor(함자)이다. 범주들 간의 함수를 Functor(함자)부른다.
해당 내용까지 보고 다시 처음에 Functor를 설명한 내용을 보도록 해보자. 그러면 Functor가 조금은 더 이해가 되지 않을까? 한다.
뭐 물론 다른 개발자들과 얘기 할 때, map이 있는 객체는 functor라고 부른다고 해서 뭐라고 할 만한 사람들은 없을 것이다. 하지만, 해당 단어의 기원이 어떤 것인지를 알고 모르고 차이는 꽤나 클 것 같아서 한번 언급 해보았다. 물론 앞으로 설명할 프로그래밍에서의 Functor와 수학에서 Functor(함자)는 완벽하게 대응 하면서 설명 하기에는 꽤나 무리가 있다.
댓글
댓글 쓰기