본문 바로가기
BEB/algorithm

고차함수1 - 기본

by ddanss 2022. 10. 3.
728x90

Hoisting (var, let)
1. 선언된 위치에 관계없이 어디서든 함수를 사용할 수 있도록 합니다.
2. 코드가 실행되는 과정에서 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 합니다.

 

고차함수
1. 함수를 인자로 받을 수 있고, 함수의 형태로 리턴할 수 있는 함수
2. '함수를 리턴하는 함수, 함수를 인자로 받는 함수' 모두 고차함수라고 부름

 

콜백함수
1. 다른 함수의 인자로 전달되는 함수
2. 어떤 함수가 완료되었을때 호출하는 경우가 많아서 콜백이라는 이름이 붙음

 

커리함수
1. 함수를 리턴하는 함수
2. 고차함수가 커리함수를 포함

 

1. 다른 함수를 인자로 받는 경우

function double(num) {
	return num*2;
}
function doubleNum(func, num) {
	return func(num);
}
let output = doubleNum(double,4);
console.log(output);

 

2. 함수를 리턴하는 경우

function adder(added) {
 return function (num) {
 return num+added;
 };
}
let output = adder(5)(3);
console.log(output);
const add3 = adder(3);
output = add3(2);
console.log(output);

 

3. 함수를 인자로 받고, 함수를 리턴하는 경우

function double(num) {
return num*2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
doubleAdder(5, double)(3);
const addTwice3 = doubleAdder(3,double);
addTwice3(2);

 

 

추상화
- 복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것
- 생산성의 향상
- 함수를 통해 얻은 추상화를, 한 단계 더 높인 것이 고차함수
함수 = 값을 전달받아 값을 리턴한다 = 값에 대한 복잡한 로직은 감추어져 있다 = 값 수준에서의 추상화
고차함수 = 함수를 전달받거나 함수를 리턴한다 = 함수에 대한 복잡한 로직은 감추어져 있다 = 사고 수준에서의 추상화

 

currying vs closure

1) closure
- 외부 함수의 변수에 접근할 수 있는 내부 함수
- 지역변수, 외부함수의 변수, 전역변수에 모두 접근하는 함수
2) currying
- 함수에 n개의 인자를 받는 대신, n개의 클로저 함수를 만들어 각각 인자를 받게하는 방법
- function multiply(x) { return function(y) { return functon(z) { return x*y*z; }}}

 

선언형 프로그래밍과 절차형 프로그래밍의 차이
1) 선언형 프로그래밍
- "무엇을" 할 것인가에 가까움
- "어떻게?"는 추상화를 하고 "무엇을?"에 집중
필요한것이 어떤 것인지에 중점을 두고 구조를 세워나가는 프로그래밍
2) 절차형 프로그래밍
- "어떻게" 할 것인가에 가까움
코드의 순차적인 처리가 중요시되고 프로그램 전체가 유기적으로 연결 되도록 하는 프로그래밍 패러다임
- 실행 속도가 빠르지만 유지보수가 어렵움

 

함수의 조합(javascript function composition)
- 함수들을 조합하여 새로운 함수를 만드는 것
- 코드의 재활용성을 높여줌
- 각각의 함수들이 하나의 기능만을 가지고 있음
- 각각의 함수가 독립적이고 간결할 때 합성하기 좋다

 

 

 

 

반응형

'BEB > algorithm' 카테고리의 다른 글

[JavaScript/자바스크립트] 순열의 순서  (0) 2022.10.25
[javascript] split의 사용법  (1) 2022.10.13
꼬리재귀, 조합, 하노이  (0) 2022.10.11
재귀(recursion) 개념 & JSON  (0) 2022.10.11
고차함수 filter, map, reduce  (0) 2022.10.03

댓글