일급 함수
값으로 다룰 수 있는 함수
* 다른 함수에게 인자로 전달할 수 있으며, 자유로운 시점에 평가가 가능한 함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var f1 = function(a) { return a * b; } console.log( f1 ); var f2 = f1; console.log( f2 ); /* 일급 함수 호출 */ function f3(f) { return f(); } console.log( f3(function() { return 10; }) ); console.log( f3(function() { return 20; }) ); | cs |
함수형 프로그래밍
1. 언제 평가해도 상관이 없는 순수 함수를 만든다.
이러한 순수 함수는 일급 함수이므로 값으로 사용가능하며, 이리저리 이동이 가능하다.
이렇게 만들어놓은 순수 함수를 필요한 시점에 평가하면서 다양한 로직을 만들어나가는 방식이 함수형 프로그래밍이다.
2. 애플리케이션, 함수의 구성요소, 더 나아가 언어 자체를 함수처럼 여기며
이러한 함수 개념을 가장 우선순위에 놓는다.
객체형과 함수형의 예시
1 2 3 4 5 6 7 8 9 10 11 12 | /* 데이터(객체) 기준 - 데이터를 먼저 디자인하고 그 데이터에 맞는 메서드를 만드는 방식 */ duck.moveLeft(); duck.moveRight(); dog.moveLeft(); dog.moveRight(); /* 함수 기준 - 함수를 만들 그 함수에 맞게 데이터셋을 구성하는 방식 */ moveLeft( dog ); moveRight( duck ); moveLeft( { x: 5, y: 2} ); moveRight( dog ); | cs |
객체지향 프로그래밍은 우선 데이터에 해당하는 객체를 디자인한다.
객체의 상태를 디지인 한 뒤, 해당 데이터의 행동(메서드)를 정의하여 프로그래밍한다.
함수지향 프로그래밍은 우선 함수를 만들고, 그 함수에 맞는 데이터셋을 구성한다.
일급함수 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /* add_maker = 일급함수 + 클로저 */ /* add_maker가 반환하는 함수는 a를 참조하지만 변경하지는 않으므로 순수함수이다 */ /* a는 add_mkaer를 평가하는 시점에 고정되는 값이다 */ function add_maker(a) { return function(b) { return a + b; } } /* add10은 a라는 값을 참조(기억)하는 클로저 */ /* add_maker로 만들어진 함수는 어떠한 시점에 평가되어도 상관없다 */ var add10 = add_maker(10); console.log( add10(20) ); var add5 = add_maker(5); var add15 = add_maker(15); console.log( add5(10) ); console.log( add15(10) ); /* 함수가 순수한 함수들을 인자로 받아서 원하는 시점에 평가하고 원하는 인자를 받아둔 함수에 적용하면서 조합하면서 최종적인 결과를 만들어나가는 예시 */ /* 이러한 순수함수로 평가시점을 다루게 되면, 비동기가 일어나는 시점이나 동시성이 필요한 시점에서 특정한 함수를 실행하는 시점까지 함수를 값으로 다루다가 원하는 시점에 평가를 한다거나 for문을 반복하면서 받아둔 함수를 여러 번 수행한다거나 할 수 있다. */ function f4(f1, f2, f3) { return f3( f1() + f2() ); } console.log( f4( function() { return 2; }, function() { return 1; }, function(a) { return a * a } ) ); | cs |
'Web > JavaScript' 카테고리의 다른 글
함수형 자바스크립트 5. _reduce, _pipe, _go, 화살표 함수 (0) | 2017.09.30 |
---|---|
함수형 자바스크립트 4. 커링(_curry, _curryr) (0) | 2017.09.25 |
함수형 자바스크립트 3. 반복자(_each)와 내부다형성 (0) | 2017.09.24 |
함수형 자바스크립트 3. 걸러내기, 수집하기 (_filter, _map) (0) | 2017.09.23 |
함수형 자바스크립트 1. 순수함수와 부수효과 (0) | 2017.09.22 |