관리 메뉴

평행우주 : world 1

[JS] 일급 객체와 함수 First-class citizen 본문

텃밭 2 : FE/JavaScript

[JS] 일급 객체와 함수 First-class citizen

parallelworlds 2022. 2. 14. 03:22

First-class citizen


 

특별한 대우를 받는 함수

 

다음과 같은 조건을 만족하는 객체를 일급객체라고 한다

 

  • 무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다
  • 변수나 자료구조(객체, 배열 등)에 저장할 수 있다
  • 함수의 매개변수에 전달될 수 있다
  • 함수의 반환값으로 사용될 수 있다

 

 

자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체이고 다음과 같은 특징을 갖는다.

 

  • 함수가 일급 객체라는 것은 함수를 객체와 동일하게 사용할 수 있다는 의미
  • 객체는 값이므로 함수는 값과 동일하게 취급될 수 있다
  • 따라서 자바스크립트에서 함수는 값을 사용할 수 있는 곳 (변수 할당문, 객체의 프로퍼티 값, 배열의 요소, 함수 호출의 인수, 함수 반환문)이라면 어디서든지 리터럴로 정의할 수 있다.
  • 함수를 변수에 할당할 수 있기 때문에, 함수를 배열의 요소나 객체의 속성값으로 저장할 수 있다.
  • 이는 함수를 데이터(string, number, boolean, array, object)를 다루듯이 다룰 수 있다는 것을 의미.
  • 또한 런타임에 함수 자체로 평가된다.
  • 일급객체로서 함수가 가지는 가장 큰 특징은, 일반 객체와 같이 함수의 매개변수에 전달할 수 있으며,
  • 함수의 반환값으로 사용할 수 있다는 것이다
  • 이는 함수형 프로그래밍을 가능케 하는 자바스크립트의 강점 중 하나이다
  • 함수는 객체지만 일반 객체와는 차이가 있다. 일반 객체는 호출할 수 없으나 함수 객체는 호출할 수 있으며,
  • 함수 객체는 일반 객체에는 없는 함수 고유의 프로퍼티를 소유한다.

 

변수에 함수를 할당하는 경우

/* * 변수 square에 함수를 할당하는 함수 표현식. 
* 자바스크립트에서 함수는 일급 객체이기 때문에 변수에 저장할 수 있다. 
* 
* 함수 표현식은 할당 전에 사용할 수 없다. 
* square(7); // --> ReferenceError: Can't find variable: square 
*/ const square = function (num) { return num * num; }; 
// square에는 함수가 저장되어 있으므로 (일급 객체), 함수 호출 연산자 '()'를 사용할 수 있다. 
output = square(7); console.log(output); // --> 49

 

 
+)
함수 표현식은 변수에 할당한 다음 사용할 수 있다.

 함수 표현식(function expression)은 함수 선언식(function declaration)과 다르게 호이스팅(Hoisting)이 적용되지 않는다.

  • 호이스팅은 선언된 위치에 관계없이 어디서든 함수를 사용할 수 있도록 하는 것.
  • 코드가 실행되는 과정에서 함수 선언부를 코드의 최상단으로 끌어올리는 것처럼 보이게 한다.

.

 

Comments