[LearningJS] 함수와 추상적 사고

1. 서브루틴으로서의 함수

  • 서브루틴(sub-routine) == procedure == routine == subprogram == macro
  • 서브루틴은 반복되는 작업의 일부를 떼어내서 이름을 붙이고, 그 이름을 부르면 실행된다.

2. 값을 반환하는 서브루틴으로서의 함수

  • 함수를 값을 반환(return)하는 서브루틴으로도 사용할 수 있다.

3. 함수로서의 함수

  • 컨텍스트에 좌우되는 함수
    • 상황에 따라 다른 값을 반환하거나 부작용이 있는 함수.
  • 순수한 함수
    • 입력이 같으면 결과도 반드시 같다.
    • 함수를 호출해서 프로그램의 상태가 바뀌는 부수효과가 없어야 한다.
  • 함수를 사용할 때에는 순수한 함수를 지향해야 한다.
    • 함수에서 이터레이터를 사용하는 것은 좋다.

4. 함수도 객체다

  • 자바스크립트에서 함수는 Function 객체의 인스턴스이다.
  • 함수에 대해 typeof를 사용하면 "function" 을 반환한다.
  • 함수에 대해 instanceof object를 사용하면 "true" 를 반환한다.
  • 변수가 함수인지 아닌지 확인하고자 하면 typeof 를 활용한다.

5. 변수로서의 함수

  • 함수는 호출하기 전에는 다른 변수와 마찬가지로 수동적이지만, 호출되면 능동적이다.
  • 함수를 가리키는 변수를 만들어 이름을 정할 수 있다.
    • 이름을 정할 때에는 함수명 뒤에 ()를 붙이지 않는다.
  • 배열에 함수를 넣을 수 있다. 물론 다른 타입의 데이터와 섞일 수 있다.
    • 자주 하는 일을 set로 묶어서 순서대로 실행하는 파이프라인으로 사용할 수 있다.
  • 함수를 객체의 프로퍼티로 사용할 수 있다.
  • 함수를 함수에 전달할 수 있다. (콜백)
    • 비동기적 프로그래밍을 위한 용도로 사용할 수 있다. 이러한 용도의 함수를 ‘콜백’ 함수라고 한다.
    • 콜백 함수는 자신을 감싼 함수가 실행을 마쳤을 때 호출된다.
  • 함수가 함수를 반환할 수 있다.
  • 함수를 매개변수로 받는 함수를 반환하는 것도 가능하다.
    • 매개변수 여러 개를 받는 함수를 매개변수 하나만 받는 함수로 바꾸는 것을 ‘커링’ 이라고 한다.

6. 재귀(recursion)

  • 자기 자신을 호출하는 함수

  • 같은 일을 반복하면서 그 대상이 점차 줄어드는 상황에서 활용한다.
  • 재귀함수는 모든 가능성(경우의 수)를 전부 고려한다.
  • 재귀함수에는 종료조건이 있어야 한다. 없다면 자바스크립트 해석기(Interpreter)에서 스택이 너무 깊다고 판단할 때까지 재귀 호출을 계속 하다가 프로그램이 멈춘다.

태그:

업데이트:

댓글남기기