Language/JavaScript

JavaScript 기초) JS에서 함수는 1급 객체이다

snowe 2021. 2. 26. 17:25

 

JavaScript에서 함수는 1급 객체(first class object)다.

 

1급 객체? 그게 뭐죠?

 

1급 객체(First Class Object)

 

1급 객체란 특정 언어에서 객체를 1급 시민으로써 취급한다는 뜻입니다.

조금 다르게 표현하면? "1급 시민 조건 + 객체 = 1급 객체"

1급 시민 : 1967년 Christopher Strachey가 수업에 사용한 노트에서 정의한 용어

 

일반적으로 1급 시민의 조건은 다음과 같습니다.

 

  • 변수(variable)나 데이터 구조에 담을 수 있다
  • 인자(parameter)로 전달할 수 있다
  • 반환값(return value)으로 전달할 수 있다

1급 시민의 대표적인 예로 숫자를 들 수 있겠네요!

 

자 앞서 말했듯 1급 객체란 객체를 1급 시민으로 취급하고,  그렇기 때문에 1급 시민의 조건을 모두 충족합니다.

'1급 함수'라는 정의도 존재합니다. 학자에 따라서 1급 함수에는 2가지 정도의 추가 조건(런타임 생성, 익명 생성)이 더 붙는다는 특징이 있습니다.
하지만 JS에서는 함수 또한 객체이기 때문에 따로 기술하지는 않겠습니다!

 

 

JavaScript의 함수는 객체다. 그것도 1급 객체..

제목 그대로입니다. 앞서 말한 1급 객체는 JS의 함수에도 적용이 됩니다.

 

즉 JavaScript의 함수는 입력 값을 받으면 결과를 반환하는 구조이면서(함수 자체의 특징) 함수 자체를 '값'으로 취급(1급 시민의 조건을 다 만족)할 수 있다는 특징이 있는 것이죠!

 

 

이걸 왜 알아야 하죠?

JS의 함수가 1급 객체인게 어쨌다는 거지?

단순하게 생각하면 함수를 1급 시민의 조건대로 다룰 수 있다는 의미겠죠?

이러한 장점이 세부적으로 들어가게 되면 여러 부분에서 큰 장점으로 작용되게 됩니다.

 

어떤 장점들이 있을까요?

 

  • 고차 함수가 가능하다.  - JS의 each, filter, map, sort 함수(내부적으로 돌아가는 구조가 Java 7의 Collections.sort 함수에 비해 훨씬 효율적)
  • 1급 객체+클로져 = 커링(Currying)메모이제이션(Memoization)이 가능해진다

이와 같은 장점들이 존재하네요!

 

 

두 번째 항목은 찾아보니 간단하게 기술할 수 있는 주제는 아닌 것 같아서 커링메모이제이션에 대해서는 또 다른 포스팅에서 공부해보도록 하겠습니다.

 

 

 

저보다 좀 더 JS의 함수에 대해 자세히 설명해주신 블로그 또한 첨부하겠습니다!

 

JavaScript에서는 함수(Function)도 객체(Object)다.

 지난 포스팅에서 배열(Array)가 객체(Object)로 취급된다는 것을 확인했다. 그리고 JavaScript에서는 함수(Function)도 객체다. 본격적인 이야기를 시작하기 전에, 1급객체(First-Class Citizens)에 대해 짚고..

preamtree.tistory.com

 

참고 자료

JavaScript의 함수는 1급 객체(first class object)이다