본문 바로가기

개념정리

8/14[TIL] 고차함수

이름만 들어도 어려운 고차 함수라는 것을 배웠다? 아직 이해를 하지는 못한 느낌이지만 100퍼센트 완전히 이해를 하지 못하더라도 나중에 계속 반복해서 정리하면 머릿속에 들어온다는 말을 믿고서 정리해본다.

 

JS에서 가장 특별한 대우를 받는 것이 있는데 이런 것들을 "일급 객체"라고 하는데 이 중에 하나가 함수라고 한다.

 

함수는 함수 선언식과 표현식으로 구분 할 수 있는데 선언식 같은 경우는 호이스팅 즉, 함수 안에 있는 선언들을 모두 끌어올려서 해당 유효 범위의 최상단에 선언하게 해 주는데 이는 코드의 유지보수 측면에서 좋지 않다고 한다. 그 이유는 코드 디버깅 시에 이리저리 왔다 갔다 해야 할 수 있기 때문이다. 그에 비하면 표현식 같은 경우는 함수 할당과 실행 위치가 중요하기에 코드 위치가 어느 정도 예상 가능하다고 한다.

 

고차 함수란 다른 함수를 인자(argument)로 받거나 다른 함수를 리턴하는 함수이며 이때 다른 함수(caller)의 인자(argument)로 전달되는 함수를 콜백 함수(callback function)라고 한다. 콜백 함수를 전달받은 함수는 이 콜백 함수를 호출(invoke)할 수 있다.

caller는 조건에 따라 콜백 함수의 실행 여부를 결정할 수도 있고, 심지어 여러 번 실행할 수도 있다.

 

함수를 리턴하는 함수라는 커리 함수가 있는데 이는 고차 함수에 포함된다.

 

JS에서는 내장되어있는 고차 함수들이 존재하며 예를 들면 배열의 filter 메소드는 배열의 요소 중 특정 조건을 만족하는 요소들만을 걸러내는(filter) 메소드이다. 쉽게 말해 (number)를 요소로 갖는 배열 중 짝수만을 걸러내거나, 18 보다 작은 수만을 걸러내는 식이다. 문자열(string)을 요소로 갖는 배열 중 길이가 10 이하인 문자열만 걸러내거나'korea'만 걸러낼 수도 있다.

 

이 밖에도 자바스크립트 배열 메소드 중 고차 함수 에는 (forEach, find, filter, map, reduce, sort, some, every)가 존재한다.

 

복잡한 어떤 것을 압축해서 핵심만 추출한 상태로 만드는 것이 추상화라고 하며 간단히 말하면 "요약" 이라는 말로 볼 수 있다.

 

이 정의를 참고하면 함수를 통해 얻은 추상화의 단계를 한 단계 더 높인 것이 고차 함수라고 볼 수 있다.

 

[함수 = 값을 전달 받아 값을 리턴한다 = 값에 대한 복잡한 로직은 감추어져 있다 = 값 수준에서의 추상화]

 

고차 함수는 이 추상화의 수준을 사고의 추상화 수준으로 끌어올리며 

값 수준의 추상화: 단순히 값(value)을 전달 받아 처리하는 수준

사고의 추상화: 함수(사고의 묶음)를 전달 받아 처리하는 수준

, 고차 함수를 통해 보다 높은 수준(higher order)에서 생각할 수 있다고 볼 수 있다.

 

[고차함수 = 함수를 전달 받거나 함수를 리턴한다 = 사고(함수)에 대한 복잡한 로직은 감추어져 있다 = 사고 수준에서의 추상화]

 

'개념정리' 카테고리의 다른 글

8/19[TIL] 비동기 호출&타이머API&함수메소드  (0) 2020.08.19
8/18[TIL] underbar 과제  (0) 2020.08.18
8/11[TIL] DOM  (0) 2020.08.11
8/10[TIL] CSS  (0) 2020.08.10
[8/10]TIL <HTML>  (0) 2020.08.10