우선 Javascript에서 앞서 설명한 함수형 프로그래밍 개념의 구현이 가능한 이유는 무엇일까요? 다름 아닌 Javascript 초반에 살펴본 성질로 인해 가능한 방식입니다. [일급 객체로서의 함수], 그리고 [클로저] 때문이지요.
Javascript에서는 함수가 일급 객체로 취급 받기 때문에 어떠한 함수의 '인자'로서 함수를 전달할 수 있고, 결과로써 함수를 반활할 수도 있다고 했습니다. 이를 통해 함수 자체의 유연한 전달과 사용이 가능하게 되지요. 여기에 더하여, 클로저 속성을 활용하여 다른 데이터에 영향을 주지 않는 형태로 실행이 가능하게 됩니다.
언뜻 설명만으로는 잘 이해가 가지 않습니다. 이러한 속성을 확인하기 위하여, 앞서 살펴보았던 암호화 관련 함수형 프로그래밍 예제를 실제 코드로 작성해 살펴보겠습니다. 기본적인 코드 실행 방식에 대한 메커니즘은 이미 모두 살펴보았던 내용이니, 차근차근 살펴보세요.
var func1 = function(input) {
var result;
/* 작업 수행... */
result = 1;
return result;
};
var func2 = function(input) {
var result;
/* 작업 수행... */
result = 2;
return result;
};
var func3 = function(input) {
var result;
/* 작업 수행... */
result = 3;
return result;
};
var get_encrypted = function(func) {
var str = 'test string';
return function() {
return func.call(null, str);
}
};
var resultValue = get_encrypted(func1)();
console.log(resultValue);
var resultValue = get_encrypted(func2)();
console.log(resultValue);
var resultValue = get_encrypted(func3)();
console.log(resultValue);
위의 코드에서, get_encrypted( ) 함수의 결과로 리턴되는 익명 함수는 클로저입니다. 결국 클로저로 실행되기 때문에 데이터인 str에는 접근이 되지 않아 영향을 미치지 않게 됩니다. 그리고 함수의 인자로 함수를 전달하며 결과로 함수를 리턴하는 기능을 활용해 함수형 프로그래밍을 구현하였습니다.
코드의 작동 방식 자체는 앞선 내용들에서 배웠던 클로저와 Javascript 함수 객체의 성질을 그대로 활용한 간단한 내용이지만 이를 통해 이러한 방식의 코드 작성을 통해 함수형 프로그래밍 개념을 나타낼 수 있다는 사실을 알아보았습니다.
'Programming > Javascript' 카테고리의 다른 글
14. Javascript 함수형 프로그래밍(4) - 팩토리얼 구현하기 (0) | 2023.01.31 |
---|---|
14. Javascript 함수형 프로그래밍(3) - 배열의 원소 계산하기 (0) | 2023.01.28 |
14. Javascript 함수형 프로그래밍(1) - 개념 (0) | 2023.01.16 |
13. Javascript 객체지향 프로그래밍(5) - subClass 구현하기 5 (0) | 2023.01.11 |
13. Javascript 객체지향 프로그래밍(5) - subClass 구현하기 4 (0) | 2023.01.10 |