반응형
다형성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | console.log( [1,2,3,4].map(function(val){ return val * 2; }) ); // 2,4,6,8 출력 console.log( [1,2,3,4].filter(function(val){ return val % 2; }) ); // 1,3 출력 |
다형성에 대해 얘기하기전에 기존에 만들었던 _map 함수와 _filter 함수는 이미 만들어져있다.
그래서 위와같이 사용이 가능하다.
명확히는 함수가 아닌 메서드로 만들어져있다.
무슨말이냐면 메서드는 어떤 객체, 여기서는 배열의 메서드라서 배열객체가 생성된 후에 그 배열객체에'만' 적용가능한 함수인 것이다.
1 2 3 4 5 | console.log( document.querySelectorAll('*').map(function(node){ return node.nodeName; }); ); |
이렇게 찍어보면 어떨까?
document.querySelectorAll('*') 만 콘솔로 찍어보면 마치 배열처럼 [head, script, body, ... ] 이런식으로 나온다.
length도 보이고 배열의 인덱스도 보이지만 배열이 아니다.
이것은 array like 타입이기 때문에 위의 콘솔은 에러가 난다.
배열의 함수인 map을 불러서 그렇다.
이 문제를 어떻게 해결하느냐? 전에 만든 _map과 _filter는 함수다.
즉, 어떤 객체에'만' 적용가능한 메서드가 아닌 함수라서 그 함수의 인자에 타입만 맞으면 모두 실행가능하다
(= 다형성)
이렇게 함수를 사용하면 외부적으로 다형성을 만들 수 있다는 얘기다. (_map, _filter, _each가 핵심 조건)
그럼 내부적으로 다형성은 누가 만들까?
바로 iter, mapper, predi 같은 인자로 넘어오는 함수들이다.
1 2 3 | _map([1,2,3,4], function(v){ return v + 10; }); |
그 배열에 어떤 값이든 수행할수 있게 만드는 역할은 보조함수가 함.
개발자가 v가 숫자니까 더할꺼라든지 node가 노드니까 그 이름을 리턴한다든지 보조함수를 통해 정한다.
반응형
'Javascript > 함수형 프로그래밍' 카테고리의 다른 글
커링 (curry, curryr, get) (4) | 2017.09.21 |
---|---|
each 메서드 만들어보기 (0) | 2017.08.29 |
함수형 프로그래밍으로 map, filter를 만들어보자(함수를 인자로 쓰기) (0) | 2017.08.26 |
일급 함수란? (함수를 객체처럼 다룬다, 일급 객체(first-class)) (0) | 2017.08.24 |
순수 함수란? (함수형 프로그래밍의 뿌리, 함수의 부수효과를 없앤다) (4) | 2017.08.23 |