티스토리 뷰

JavaScript를 공부하다보면 '자바스크립트의 함수는 일급객체기 때문에~' 라는 말을 덧붙이면서 설명하는 경우가 많다.

여기서 말하는 일급객체가 뭘까?

JavaScript의 함수는 보통의 다른 언어와 다르게 변수에 담을 수도 있고 다른 함수의 인자로도 사용이 가능하다는 건 알았지만 이것이 JavaScript의 함수가 일급객체이기 때문에 가능한 것이라는 것은 부끄럽지만 얼마전에 알게되었다.

일급 객체(1급 객체, First Class Object)

특정 언어의 일급 객체란, 컴퓨터 프로그래밍 언어에서 일반적으로 다른 객체들에 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.

다음과 같은 조건을 만족할 때 일급 객체라고 말할 수 있다.

  • 변수(variable)에 담을 수 있다.

    // 변수에 함수 할당
    var bar = fucntion() { return 'javscript'; };
    console.log(bar()); // javascript
  • 파라미터(parameter)로 전달 할 수 있다.

    var test = function(func) {
       func(); // 파라미터로 받은 함수 호출
    }
    
    // test() 함수에 다른 함수를 파라미터로 넣어 호출
    test(function() {
       console.log('javascript');
    });
  • 반환값(return value)으로 사용할 수 있다.

    // 함수를 리턴하는 test() 함수
    function test() {
       return function() {
           console.log('javscript');
       }
    }
    
    var bar = test();
    bar();

JavaScript에서는 이런 특성 때문에 숫자와 문자처럼 함수를 변수에 저장거나, 파라미터로 전달하고, 함수의 리턴값으로도 사용할 수가 있는 것이다.

일급 함수(1급 함수: First Class Function)

함수를 일급 객체로 취급하는 것을 일급 함수라고 한다.
함수 또한 객체로 표현하기 때문에, JavaScript의 함수를 일급 객체라고도 말하고 일급 함수라고도 말한다.

그리고 다음과 같은 추가적인 조건을 만족해야 한다는 자료도 있었다.

  • 런타임(runtime) 생성이 가능하다
  • 익명(anonymous)으로 생성이 가능하다

JavaScript의 함수가 일급 객체이기 때문에 할 수 있는 것

위의 내용은 좀 더 설명이 필요하기 때문에 다른 포스팅에서 개별적으로 다뤄볼 예정이다.
각 항목에 대한 자세한 설명은 개별 포스팅으로 작성했으며, 고차함수에 대한 설명은 함수형 프로그래밍 포스팅에서 확인 할 수 있다. 콜백 패턴에 대한 설명은 업데이트 예정이다.

Reference

'JavaScript' 카테고리의 다른 글

클로저 (Closure)  (0) 2018.12.09
호이스팅(Hoisting) , 실행 문맥(Execution Context), 스코프 체인(Scope Chain)  (0) 2018.12.09
스코프 (Scope)  (0) 2018.12.09
웹 컴포넌트 (Web Component)  (0) 2018.12.07
undefined vs null  (0) 2018.12.06
댓글