1급객체란?

일급객체(First-class object) 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.

출처 : 위키백과

 

 

1급객체의 조건

그렇다면 1급 객체가 되기 위한 구체적인 조건은 무엇일까?

이는  Robin Popplestone이 명확하게 게 정의했다.

  • 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있다.
  • 모든 일급 객체는 함수의 반환값이 될 수 있다.
  • 모든 일급 객체는 할당의 대상이 될 수 있다.
  • 모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있다.

이렇게만 봐서는 그림이 그려지지 않으니 예시를 통해서 확인해 보겠다. 

우리가 흔히 사용하는 C언어의 배열, Java의 객체, 모든 언어의 Int형을 생각해보자.

 

1급객체의 조건 예시

  • 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있다.
    C언어의 배열 : C언어에서는 배열을 함수에 매개변수로 전달할 때 배열 그 자체가 아닌 포인터를 전달한다. 따라서 배열은 함수의 실질적인 매개변수가 될 수 없고, 1급객체의 조건에 어긋난다.
    Java의 객체 : 가능하다.(method(new MyObj()))
    Int : 가능하다.
  • 모든 일급 객체는 함수의 반환값이 될 수 있다.
    C언어의 배열 : C언어에서는 배열을 함수의 return값으로 전달 때 배열 그 자체가 아닌 포인터를 전달한다. 따라서 배열은 함수의 실질적인 return값이 될 수 없고, 1급객체의 조건에 어긋난다.
    Java의 객체 : 가능하다(return obj;)
    Int : 가능하다. (return 13;)
  • 모든 일급 객체는 할당의 대상이 될 수 있다.
    C언어의 배열 : 가능하다.(int a[] = [1,2,3,4,5])
    Java의 객체 : 가능하다. (Object obj = new MyObject();)
    Int : 가능하다. (int x = 3)
  • 모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있다.
    C언어의 배열 : C언어의 배열은 주소값이 같은지는 비교연산으로 확인할 수 있지만, 다른 주소에 있는 두 배열의 값이 같은지는 확인할 수 없다. 따라서 1급객체의 조건에 어긋난다.
    Java의 객체 : 가능하다.(equal연산을 지원한다.)
    Int : 가능하다.(==연산을 지원한다.)

+ Recent posts