Programming (477) 썸네일형 리스트형 15. Javascript 함수형 프로그래밍 적용(4) - each 함수형 프로그래밍의 특성을 통해 구현하는 반복 함수에 대해서 살펴보도록 하겠습니다. 우선 가장 먼저 알아볼 반복 함수는 each( )입니다. 주로 프로그래밍 언어들에서 each, forEach로 제공되는 함수입니다. each( ) 함수는 배열의 각 요소 또는 객체의 각 프로퍼티를 하나씩 꺼낸 다음, 순서대로 특정 함수에 인자로 전달해 실행시키는 역할을 하게 됩니다. each함수의 예제를 살펴보도록 하겠습니다. 여기서 소개하는 예제는 jQuery 1.0의 each( ) 함수를 기준으로 합니다. function each(obj, fn, args) { if(obj.length == undefined) { for(var i in obj){ fn.apply(obj[i], args || [i, obj[i]]); }.. 어노테이션(Annotation) - 어노테이션 유지(Retention) 정책 어노테이션을 정의하는 경우 사용하는 정책과 관련해서, 적용 대상 정책 말고도 어느 '범위'까지 사용해야 할 지에 대해서도 정의가 가능합니다. 이 어노테이션 리텐션 정책은 java.lang.annotation.RetentionPolicy에 enum(열거 상수)로 정의되어 있습니다. RetentionPolicy (Java Platform SE 7 ) docs.oracle.com 우선 이 리텐션 정책에 대한 정의는 소스 상에서만 유지 - 컴파일 클래스까지 - 런타임 시에도 유지 할지를 지정하게 됩니다. 이 세 가지 정책에 대한 이해가 필요한데, 이를 설명하기 전에 우선 리플렉션(Reflection)의 개념을 먼저 이해하고 있어야 합니다. 리플렉션은 런타임 시점에 해당 클래스의 메타 정보를 얻는 기능을 의미합니.. 15. Javascript 함수형 프로그래밍 적용(3) - wrapper Javascript의 wrapper(래퍼) 함수는 간단하게 말해 다른 OOP 언어들의 다형성을 구현하는 '오버라이드(override)' 기능과 동일하다고 생각하면 됩니다. 여기서는, original이라는 원본 함수가 있는데, 여기에 다른 익명의 함수를 대입해 실행하게 만드는 예제를 생성해 보도록 하겠습니다. function wrap(object, method, wrapper) { // 이 예제에서는, fn = Function.prototype.original var fn = object[method]; return object[method] = function() { return wrapper.apply(this, [fn].concat(Array.prototype.slice.call(arguments)).. 15. Javascript 함수형 프로그래밍 적용(2) - bind bind 함수에 대해서도 한번 살펴보겠습니다. bind 함수는 기본적으로 curry와 그 용도가 비슷한 함수입니다. 고정하고자 하는 인자 값을 bind 호출 시 넘겨주고, 거기서 클로저로 반환받은 함수를 호출하면서 사용자가 나머지 가변 인자를 지정할 수 있는 방식을 지원합니다. curry와 다른 점은, 함수 호출 시 this에 바인딩할 객체를 직접 지정할 수 있다는 점이죠. curry를 충분히 대체하는 함수입니다. Function.prototype.bind = function(thisArg) { var fn = this; var slice = Array.prototype.slice; var args = slice.call(arguments, 1); // bind의 파라미터 값 중 인덱스 1번 부터 전부 .. 15. Javascript 함수형 프로그래밍 적용(1) - 필수 선행지식 + 커링(curry) 3 앞서 구현해 본 커링의 경우, Javascript에서는 기본적으로 제공되는 메서드는 아닙니다. 그래서 프로토타입 함수로 정의하여 사용하는 것이 일반적입니다. 앞서 calculate 함수 사례를 프로토타입 메서드로 정의해 실행해 보도록 하겠습니다. function calculate(a, b, c) { return a * b + c; } Function.prototype.curry = function() { var fn = this; var args = Array.prototype.slice.call(arguments); console.dir(args); return function() { return fn.apply(this, args.concat(Array.prototype.slice.call(argum.. 15. Javascript 함수형 프로그래밍 적용(1) - 필수 선행지식 + 커링(curry) 2 앞서 살펴본 커링 구현 예제를 계속 살펴보도록 하겠습니다. 15. Javascript 함수형 프로그래밍 적용(1) - 필수 선행지식 + 커링(curry) 1 앞서 살펴본 함수형 프로그래밍 기법을 통해, 현재 통용되는 몇 가지 함수를 재구현하거나 구조를 응용해 보도록 하겠습니다. 우선, 이 과정을 위해서는 몇 가지 잊어서는 안 되는 선행 지식들 nozeroslope.tistory.com function calculate(a, b, c) { return a * b + c; } function curry(func) { var args = Array.prototype.slice.call(arguments, 1); console.dir(args); return function() { return func.appl.. 15. Javascript 함수형 프로그래밍 적용(1) - 필수 선행지식 + 커링(curry) 1 앞서 살펴본 함수형 프로그래밍 기법을 통해, 현재 통용되는 몇 가지 함수를 재구현하거나 구조를 응용해 보도록 하겠습니다. 우선, 이 과정을 위해서는 몇 가지 잊어서는 안 되는 선행 지식들이 있는데, 커링을 구현하면서 차례로 같이 살펴보도록 하겠습니다. 우선 '커링'을 먼저 정의해 보겠습니다. 커링은 "특정 함수에서 정의-선언된 파라미터의 값 일부를 고정하고, 나머지 파라미터에 전달된 인자로 받는 함수를 생성하는 것"을 의미합니다. 우선 예제 코드를 먼저 살펴보고, 여기에 필요한 몇 가지 선행지식에 대한 설명부터 진행하겠습니다. (물론, 다 알고 있어야 하는 내용이지만 해당 내용을 정리하는 제가 머리가 나빠서 다 잊어버렸더라구요...ㅠ) function calculate(a, b, c) { return a.. 14. Javascript 함수형 프로그래밍(5) - 피보나치 수열 구현하기 앞서 살펴본 팩토리얼 구현 방식을 응용해, 이번엔 피보나치 수열을 함수형 프로그래밍으로 구현해보도록 하겠습니다. var fibo = function() { var cache = {'0' : 0, '1' : 1}; var func = function(n) { var result = 0; if (typeof(cache[n]) === 'number') { result = cache[n]; } else { result = cache[n] = func(n-1) + func(n-2); } return result; } return func; }(); console.log(fibo(10)); 유사한 방식으로 코드를 구현했습니다. 역시 cache에 캐시 값을 저장해, 수열 연산을 구현하는 즉시 실행 함수 형태와 클로저.. 이전 1 ··· 48 49 50 51 52 53 54 ··· 60 다음