Posts JavaScript - 자바스크립트의 함수는 일급객체이다
Post
Cancel

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


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


🚀 자바스크립트의 기본 타입과 참조 타입

자바스크립트의 기본 타입에는 숫자, 문자열, 불린값, null, undefined 가 존재합니다. 이들은 자체로 값을 나타내는 것들입니다.

반면 이들을 제외한 모든 값은 자바스크립트에서 객체로 생각하면 됩니다. 배열, 정규표현식, 함수, 등등 모든 것이 객체가 됩니다.

특히 자바스크립트의 함수 는 기본적으로 객체이므로, 객체가 가지는 동작 특성을 모두 동일하게 가집니다.

  • 변수, 배열, 객체 프로퍼티 등에 대입할 수 있다.
  • 특정 함수의 매개변수로 함수를 전달할 수 있다.
  • 특정 함수의 리턴값으로 함수를 리턴할 수 있다.
  • 객체와 동일하게 동적으로 프로퍼티를 생성하거나, 할당이 가능하다.
  • 리터럴에 의해 생성한다.
    • 🔑 리터럴이 무엇인가요? -> 객체 리터럴은 객체 생성의 표현 방식을 의미합니다. 즉, 중괄호({ })를 이용하여 객체를 생성하는 방식을 뜻합니다.
    • 자바스크립트에는 객체를 생성하는 방식이 여러가지 입니다. 생성자 함수를 사용할 수도 있고, 위처럼 객체 리터럴 방식으로 중괄호 내에 프로퍼티를 작성할 수도 있습니다.
    • 배열도 객체입니다. 하지만 객체와는 조금 차이가 있지만, 분명 객체라 같은 특성을 동일하게 가지고 갑니다. 배열 리터럴은 중괄호가 아니고 대괄호 표기를 사용합니다. 즉, var arr = [1,3,5]; 와 같이 배열 요소 1, 3, 5인 배열을 선언할 때 사용하는 그 중괄호 표기법을 배열 리터럴 이라 합니다.

👍 일급(First Class) 객체

이처럼 객체들에게 적용할 수 있는 위와 같은 특성들을 모두 지원한다면, 그것을 일급 객체라고 부릅니다.

그러면 자바스크립트에서 함수는 어떻게 사용되길래 일급 객체라고 부를까요?

  • 특정한 변수에 함수를 대입할 수 있다.
1
2
3
4
5
6
7
8
var baz = function() {
	/* 함수 대입 */
	console.log("I'm baz");
}
baz();

var bar = baz;
bar();

위와 같이 baz 라는 변수는 함수 리터럴로 생성한 함수를 참조하는 함수 변수가 됩니다.

여기서 변수 baz는 함수의 참조값을 가지는 것입니다. (C에서의 포인터, 주소값을 생각하면 편합니다)

따라서 다른 변수에 그 참조값을 대입하면, 그 변수도 똑같이 함수 호출이 가능해집니다.


  • 함수는 다른 함수의 인자로 전달 가능하다.
1
2
3
4
5
6
7
var foo = function(func){
	func();
}

foo(function() {
	console.log("test");
})

foo() 함수를 호출하는데 인자로 익명 함수를 넘기고 있는 모습을 볼 수 있습니다. 그러므로 foo() 함수 내부에서는 func 매개변수에서 받은 인자가 함수가 되고, 그 함수를 func()로 호출할 수 있습니다.


  • 함수를 리턴할 수 있다.
1
2
3
4
5
6
function outerFunc(){
	var freeVal = 7;
	return function(){
		/* logic */
	}
}

자바스크립트 클로저 구현 시 위처럼 함수를 리턴하는 형식을 사용하게 됩니다. 이처럼 자바스크립트의 함수는 반환값으로도 사용이 가능합니다. (꼭 클로저 구현 시에만 해당한다는 의미가 아니며, 함수는 다른 함수의 반환값으로 자유롭게 사용 가능합니다.)

참고로 리턴문의 바깥에 있는 외부 함수의 변수(여기선 freeVal)를 참조하는 함수(리턴문에 있는 함수)를 클로저라고 부르는데, 이것은 추후에 클로저만을 주제로 담은 포스팅을 할 예정입니다.


다음에는 자바스크립트에서 중요한 개념인 프로토타입에 대한 내용으로 찾아오겠습니다!

  • (참고) 일급 객체에 대한 설명을 더 보시고 싶다면 위키피디아의 일급 객체 링크를 확인해 보세요
  • 위의 일부 예제 코드는 인사이드 자바스크립트(송형주, 고현준 저) 교재를 참고하였습니다

[백준] 1202번 - 보석 도둑

JavaScript - 자바스크립트의 다양한 함수 생성법과 즉시 실행 함수