일급 객체란?

pastaCoder·2022년 8월 5일
0

일급 객체(1급객체, First Class Object)란?

일급 객체에 대한 정의

일급객체(First-class Object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. [위키백과]

이름이 왜 일급객체일까 찾아봤는데 이런 이유가 있다.

일단 말 그대로 first class citizen, second class citizen 이란 무엇일까요? first class citizen이란 자유롭게 거주하고 일 할 수 있고, 출입국의 자유를 가지며, 투표의 자유를 가지는 시민을 의미한다면, second class citizen이란 시민 또는 합법적 거주자이지만 시민권 및 사회 경제적 기회가 제한되어있는 시민을 의미합니다. 예를 들면, 19세기 초 참정권을 가진 남성이 first class citizen이라면, 참정권을 가지지 못했던 여성은 second class citizen이라고 할 수 있는 것이죠.
프로그래밍 세계에서도 비슷한 개념이 존재합니다.

프로그래밍 언어 디자인에서, 특정 언어의 first-class citizens(first-class type, 또는 first-class object, 또는 first-class value라고도 할수 있는데)이란 보통 다른 객체들에게 적용 가능한 연산을 모두 지원하는 객체를 말합니다. 이러한 연산에는 보통 매개변수로 전달되고, 함수에서 반환되고 수정되고 변수에 할당되는 작업이 포함되는데요.
출처 - javascript에서 함수가 왜 1급객체일까요?

일급 객체의 조건

변수에 할당(assignment)할 수 있다.
다른 함수를 인자(argument)로 전달 받는다.
다른 함수의 결과로서 리턴될 수 있다.

위에 대한 조건으로 인해 알 수 있는 것은 함수를 데이터(string, number, boolean, array, object) 다루 듯이 다룰 수 있다는 점이다.

const a = () => {
 doSomething(); 
}

데이터를 다룬다는건 변수에 할당이 가능하다는건데, 위의 정의에 의해서 함수 역시 변수에 할당 가능하다.

자바스크립트에서는 함수가 일급객체이다.

실제로 자바에서는 함수를 선언하고 변수에 담는건 본적이 없는 것 같다.

그렇다면, 함수가 일급객체이기 때문에 할 수 있는 것은 무엇인가?

그 이전에 일급객체의 조건 예시를 살펴보자

  1. 변수에 할당한다.
const mul = function (num) {
  return num*num;
}
  1. 다른 함수를 인자로 받는다.
  1. 고차함수(Higher order function)를 만들 수 있다.
  2. 콜백(callback)을 사용할 수 있다.

고차함수와 콜백에 대해서는 아래에 더 설명을 이어가겠다.
우선, 일급객체의 조건 예시를 살펴보겠다.

function mul(num) {
  return num*num;
}

// func는 매개변수임, 이름은 아무거나 지정해도 상관없음
function mulNum(func, number) {
  return func(number);
}

let result = mulNum(mul, 3); // 9
  1. mul()에서 매개변수가 하나이기 때문에 mulNum()의 매개변수(number)가 하나임
  2. 만약 mul()의 매개변수가 2개라면 mulNum()의 매개변수도 2개이여야함
  3. mulNum()의 매개변수인 func는 위의 mul()을 나타내는 것임
  4. 마지막 result변수에 mulNum()을 할당하고 인자로 mul()을 받아옴
  5. 이 때 mulNum()인자로 다른 함수(mul())를 받아오기 때문에 고차함수임
  1. 다른 함수의 결과로 리턴 될 수 있다.
function add(num1) {
  return function (num2) {
    return num1 + num2;
  }
}

add(3)(4); // 7

고차함수(Higher-order function)

함수를 전달인자(argument) 또는 매개변수(parameter)로 받거나 함수를 리턴하는 함수를 말한다.
2번예시와 3번예시가 고차함수의 예임

콜백함수

전달인자(Argument)로 받는 함수이다.

출처 - 1급객체란 무엇인가

0개의 댓글