javascript 일급객체, 일급함수

자바스크립트 책을 보다보면, 입급객체, 일급함수이런 말들이 나온다.

자바스크립트의 객체는 일급객체이다. 자바스크립트의 함수는 일금함수이다.

이게 대체 무슨 말일까? 어려워 할 것 없다. 이미 아는 것이지만, 단어가 생소해서 혼동이 올 뿐이다.

1급시민(일급시민:first class citizen)

: 일급객체, 일금함수 이런 말 이전에 일급시민이라는 말 부터 정리해 보도록 하자. 그 이유는 일급객체는 일급시민인 객체를 말하며, 일급함수는 일급시민인 함수를 말하기 때문이다.

일급시민을 간단히 말하자면 차별받지 않고 시민으로서 누릴수 있는 권한을 모두 누릴수 있는 사람을 일급시민이라고 한다.

  • 1급 시민은 투표권이 있다.
  • 1급 시민은 군인이 될 수 있다.
  • 1급 시민은 정치에 참여 할 수 있다.

1800년데 영국에서는 1급시민, 2급시민이 존재 했으며 성인 남성의 경우 1급시민으로서 정치참여가 가능한데 반해, 2급시민인 여성은 정치 참여를 할 수 없었다고 한다.

1급시민 이라는 말은 권한을 많이 누리는 대상이라고 볼 수 있다.

프로그래밍 영역에서 1급시민이란?

: 일단 프로그래밍 영역에서 1급시민을 정의하려면 1급시민이는 것들이 누려야할 권한이 뭔저 정의가 되어 있어야 한다.(실제 투표권 같은 권한 말이다.)

  • 1급 시민은 함수의 인자가 될 수 있다.
  • 1급 시민은 함수의 리턴이 될 수 있다.
  • 1급 시민은 변수에 할당 될 수 있다.

프로그래밍 영역에서 위와 같은 권한을 누리는 것들을 보통 일급시민이라 여긴다. 즉 자바스크립트에서 원시값(일반 자료형)은 1급 시민이다.

1
2
3
4
5
6
7
var temp_int = 1; // 숫자는 변수에 담긴다.
function fn_test_int(a){
return a;
}

var ret_int = fn_test_int(3); // 숫자는 함수의 인자가 된다.
console.log(ret_int); // 숫자는 함수의 리턴이 된다.

1급객체(일급객체:first class object)

자바스크립트의 객체는 1급객체이다.

라는 말은 자바스크립트에서 객체는 1급시민이 누리는 권한을 모두 가지고 있다는 말이다. 따라서 자바스크립트의 객체도 원시값 처럼 다음과 같다.

  • 자바스크립트의 개체는 함수의 인자가 될 수 있다.
  • 자바스크립트의 객체는 함수의 리턴이 될 수 있다.
  • 자바스크립트의 객체는 변수에 할당 될 수 있다.

1
2
3
4
5
6
7
8
var temp_obj = { name :'first class object1'};   // 객체는 변수에 담긴다.

function fn_test_obj(obj){
return obj;
}

var ret_obj = fn_test_obj(temp_obj); // 객체는 함수의 인자가 된다.
console.dir(ret_obj); // 객체는 함수의 리턴이 된다.

1급함수(일급함수:first class function)

자바스크립트의 함수는 1급함수이다.

라는 말은 자바스크립트에서 함수역시 1급시민이 누리는 권한을 모두 가지고 있다는 말이다.따라서 자바스크립트의 함수도 원시값 처럼 다음과 같다.

  • 자바스크립트의 함수는 함수의 인자가 될 수 있다.
  • 자바스크립트의 함수는 함수의 리턴이 될 수 있다.
  • 자바스크립트의 함수는 변수에 할당 될 수 있다.

1
2
3
4
5
6
7
8
9
10
var fn_outer = function(){
console.log('fn_outer 함수 동작...');
return function(){
console.log('리턴되는 함수가 동작...');
};
};

var ret_fn = fn_outer();
ret_fn(); // fn_outer함수의 리턴된 함수가 실행된다. 즉 함수는 함수의 리턴이 될수있다.
ret_fn();