배열은 펑터인가? 맞다. map함수가 있으니 맞다. 그러면 map이 무엇인가? 사실 우리는 map이라는 함수를 만나기 전부터 map이라는 단어를 프로그래밍하는 도중 만난적이 있다.
Map이라는 자료 구조인데 키와 값을 같은 자료 구조이다. Map이라는 자료 구조자체가 키에 값을 대응시킨다. 라는 매핑에서 따서 만들어 진 자료구조일 것이다.
사실 자료구조에서 Map과 Functor.map은 같은 단어이다. 지난 내용으로 범주론을 설명하면서 A범주에서 B범주로 대응시키는 것이다. 함자라고 하였다. 그리고 그 대응시키는 함수가 사상(map)이라고 부른다.
자 그러면 오해를 풀어보자. 우리가 생각하는 map?
[1, 2, 3, 4].map( x => x + 1 ) 이 문장을 보면 우리는 배열의 데이터를 순환하면서 1씩 더해주는 무언가로 보기 때문에, map에서 순환이라는 내용을 내려놓기 힘들다.
하스켈에서 정의한 Funtor는 무엇일까?
fmap :: (a -> b) -> fa -> fb 해석을 하면
1. a를 받아 b를 리턴하는 함수를 인자로 받는다.
2. a가 담긴 functor를 받아 b가 담긴 functor를 리턴한다.
자바스크립트로 구현하면 위의 내용은 어떤 모양일까?
function Functor(value) {
this.value = value
this.map = function (cb) {
return new Functor(cb(this.value))
}
}
간단하게 Functor를 구현해볼 수 있다. 당연하게도 배열을 넣게 되면 그 배열을 제대로 순회하지 못할 것이라는 것을 알 것이다. 그 부분은 다음 장부터 한번 풀어보도록 하자.
학습하면서 진행하는 블로그이며, 함수형 프로그래밍과 관련된 내용을 마치고 나서 이 산이 아닌가벼... 하면서 잘못된 내용을 전파할 수 있으니 참고 하도록 하자.
댓글
댓글 쓰기