Typescript - 08

일등 함수 살펴보기

콜백 함수

일등 함수(first-class function)는 프로그래밍 언어가 제공하는 기능이다. 함수 표현식은 일종의 값이다. 변수에 담을 수 있다는 것이다.
함수 표현식을 매개변수로 받을 수 있다. 매개변수 형태로 동작하는 함수를 콜백 함수라고 한다.

const f = (callback : () => void) : void => callback()

다음 예시를 살펴 보자

//init.ts
export const init = (callback : ()=> void) : void => {
  console.log('default initialization finished')
  callback()
  console.log('all initialization finished')
}

//callback.ts
import {init} from './init'
//import 한 매개변수를 콜백함수 인자로 넣어주었다. 
// init 함수의 바디에는 콜백함수를 가지고 있다. 
init(() => console.log('custom initialization finished'))

중첩 함수

함수형 언어에서 함수는 변수에 담긴 함수 표현식이므로 함수 안에 또 다른 함수를 중첩 해서 구현할 수 있다.
다음 코드에서 calc 함수는 add와 multiply라는 이름의 중첩 함수를 구현하고 있다.
(초보인 나는 하나의 함수에 여러 기능을 구현하고 싶을 때 쓴다.)

const calc = (value : number, cb:(number)=>void):void => {
  let add = (a, b) => a + b
  function multiply(a,b){return a * b}
  // 타입을 선언하여 별칭을 만들어 함수타입을 만들었다.
export type NumberToNumberFunc = (number) => number
// 일반적인 함수를 선언하고 
export const add = (a:number) : NumberToNumberFunc => {
  // 바디안에 다시 함수를 선언하면서 값을 리턴시키고
  const _add : NumberToNumberFunc = (b:number) : number =>{
    return a + b
  }
  //add가 실행  되었을때 _add를 리턴 시킴으로써 내부 함수가 실행되도록 한다.
  return _add
}
  let result = multiply(add(1,2), value)
  cb(result)
}
calc(30, (result : number) => console.log(`result is ${result}`))
// result is 90

고차 함수와 클로저, 부분함수

고차 함수는 또 다른 함수를 반환한다.
함수형 언어에서 함수는 단순히 함수 표현식이라는 값이므로 다른 함수를 반환 할 수 있다.

/// 타입을 선언하여 별칭을 만들어 함수타입을 만들었다.
export type NumberToNumberFunc = (number) => number
// 일반적인 함수를 선언하고 
export const add = (a:number) : NumberToNumberFunc => {
  // 바디안에 다시 함수를 선언하면서 값을 리턴시키고
  const _add : NumberToNumberFunc = (b:number) : number =>{
    //_add함수의 관점에서 a는 외부에 선언된 변수이다. 이를 클로저라고 한다.
    return a + b
  }
  //add가 실행  되었을때 _add를 리턴 시킴으로써 내부 함수가 실행되도록 한다.
  return _add
}

//2차로 이루어진 고차함수는 함수호출 연산자를 2번사용해야 값을 얻을 수 있다. 
import {NumberToNumberFunc, add} from './highOrder'
let fn : NumberToNumberFunc = add(1)
let result = fn(3)
console.log(result)
//또는 2번 호출
console.log(add(2)(2))

만약 고차함수를 함수호출연산자를 이루어진 차원보다 더 적게 사용한다면 부분어플리케이션 또는 부분적용 함수라고 한다.

profile
AllTimeDevelop

0개의 댓글

Powered by GraphCDN, the GraphQL CDN