Javascript/함수형 프로그래밍
함수형 프로그래밍의 장점, 다형성!(어떤 객체에만 적용가능한 메서드가 아닌 함수를 생성한다)
JEONG_AMATEUR
2017. 9. 20. 10:00
반응형
다형성
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가 노드니까 그 이름을 리턴한다든지 보조함수를 통해 정한다.
반응형