본문 바로가기
JavaSciprt

[자바스크립트] 일급객체

by 리슨업 2024. 1. 15.
[자바스크립트] 일급객체

 


 

#일급객체

일급객체는 JavaSciprt의 만의 개념이 아닌 프로그래밍에서 중요한 개념으로 일급시민(first class citizen)[각주:1]의 뜻을 모티브로 특정 조건을 만족하는 자유도가 매우 높은 객체를 말한다.

 

 

#일급객체 조건

1) 변수나 데이터 구조 안에 담을 수 있어야 한다.

//변수에 담을 수 있는 일급객체
const func = function(){
	console.log('일급객체');
}

//데이터 구조에 담을 수 있는 일급객체
const obj = {
	test : func //참조할당
}
obj.test()

 

 

 

2) 함수의 반환값으로 사용할 수 있어야한다. 

function funcOuter(){

	function funcInner(){
		return '일급객체는 함수를 리턴한다.';
	}
	return funcInner;
}


const runTime = funcOuter();
runTime();

 

 

3) 함수의 매개변수에 전달 할 수 있다. 

function callback(string){
    console.log(string);
}

function main(agument_first, agument_seconed){
    agument_seconed(agument_first);    
}

main('문자 agument', callback);

 

일급객체는 아규먼트로 전달 될 수 있어야 한다. 함수 또 한 아규먼트에 포함시켜 다른 함수를 호출 할 수 있다. 

일급객체인 함수는 이렇게 콜백 함수를 구성할 수 있다.

 

 

변수는 참조를 하는 것으로 일급객체로 취급되지 않는다. 변수는 단순 참조 메모리 할당으로 분류되고

함수는 객체로써 위의 모든 조건을 취급하는 "일급객체"이다. 이외 자바스크립트에서 일급객체는 Object Array

일급객체로 분류된다.

 

하지만 함수객체와 Object, Array가 다른점은 일급객체지만 함수객체는 고유의 프로퍼티와 메서드를 가지고 있으며 이를 이용하여 호출이 가능하지만, 일반객체는 호출이 되지 않는라는 차이점을 가지고 있다.

 

 

 

 

#함수객체의 프로퍼티?

함수객체는 호출에 대한 응답을 하기위해 선 언방식에 따라 다른 객체형태의 프로퍼티를 가지고있다.

 

1) arguments 

arguments는 외부에서 인자 값을  내부에서 객체 형태의 인자 값으로 저장하여 지역변수 형태의 유사 배열을 만든다.

이는 파라미터를 명시적으로 자리 지정하지 않아도 인덱스를 사용하여 요소를 사용 가능하게 하며 주로 가변적인 인자값을 처리할 때 사용한다.

 

function myFunca(){ 
    console.log(arguments); // arugments  
    for(const item of arguments){ // 유사배열 index로 값 추출
        console.log(item);
    }
}

myFunca(1,2,3);

 

 

[1,2,3]의 유사 배열을 생성하고 index에 맞게 가져다 사용 할 수 있으며,  callee는 현재 함수가 실행되는 참조, 즉 자기자신을 참조하느 프로퍼티이다. 

 

하지만 ES6에선 유사배열의 arguemts의 프로퍼티 보다 스프레드 연산으로 Array로 바로 사용한

rest Parameter 형식을 권장한다. 

 

//rest Parameter 
function myFunc(...restParameter) {
    console.log(restParameter); //[1,2,3]
}

myFunc(1, 2, 3);

 

 

 

2) caller

caller는 자신을 호출한 함수를 가르킨다. 

function outerFunction() {
  console.log('날 부른 함수 : ', outerFunction.caller); //null
  
  function innerFunction() {
    console.log('날 부른 함수 : ', innerFunction.caller); // outerFunction 전체를 리턴함
  }
  
  innerFunction();
}

outerFunction();

 

 

3) length

length 는 매개변수의 개수를 가르킨다.

function parameters(x,y){ // length : 2
    return x + y;    
}
console.log(parameters.length);


function parameters(x,y,z){ // length : 3 
    return x + y;    
}
console.log(parameters.length);

 

 

4) name

name은 ES6에서 정식 표준이 된 프로퍼티이며, 함수의 식별자를 나타낸다.

function bar(){
    return 'call'
}
console.log(" name : " , bar.name); // bar


const nameFind = bar;
console.log(" nameFind name : ",nameFind.name); //bar

 

 

 

  1. 자유롭게 거주하고 일 할 수 있고, 출입국의 자유를 가지며 투표의 자유를 가지는 시민을 뜻함 [본문으로]