프로그래밍에서의 일급 객체

프로그래밍에서의 일급 객체

정의

프로그래밍에서 일급 객체First Class Object는 다음의 조건을 만족하는 요소를 말한다.

예시

쉽게 말해 보통 수처럼 다룰 수 있는 것을 일급 객체라고 하는데, 이는 자명하게도 ‘보통 수’라는 것이 일급 객체기 때문이다. 정수 $3$ 을 예로 들어보면

수학도를 위한 설명

이러한 일급 객체의 개념은 주로 함수형 언어를 설명하기 위해 언급된다. 수학적으로 보았을 때는 사실 일급 객체라는 개념 자체가 이상하다. 수학에서 말하는 함수의 정의에 따르면 논리학자들조차 어려워할 정도로 추상적이지 않은―거의 모든 객체는 당연히 일급 객체여야한다. 애초에 함수라는 것조차도 어떤 집합의 원소기 때문에 함수 자체를 변수로 갖는 함수를 정의하고, 그 값이 함수이며, 함수를 정의하거나, 함수를 비교하는 것은 얼마든지 가능할 수 있어야한다.

그러나 이는 어디까지나 수학의 이야기다. 사람마다 관점은 다를 수 있으나 보편적으로 프로그래밍이란 컴퓨터 공학의 영역에 있고, 일단은 다른 분야다. 위와 같이 설명했을 때 쉽게 받아들이려면 충분히 수학과 추상적인 논리에 익숙해야한다. 1

사실 고등학교 과정을 막 마친 학습자만해도 함수를 객체로 보는 것은 자연스럽지 않을 수 있다. 수학자들에게야 $f(x) = x^2 + 1$ 라는 함수는 이차함수 집합의 원소 $f \in p_{2}(x)$ 혹은 연속함수의 집합의 원소 $f \in C(\mathbb{R})$ 로 보이겠지만, 교과과정 수준의 추상화 능력만을 갖추고 있다면 $x$ 를 넣었을 때 $x^2+1$ 이 반환되는 개념으로 받아들여도 충분할 수 있기 때문이다.

공학도를 위한 설명

함수끼리 더하는 것―함수의 덧셈으로 함수가 반환될 수 있다는 것은 벡터 공간을 안다면 자연스럽지만, 사실 그렇게까지 몰라도 충분히 받아들일 수 있다. 그러나 함수 자체가 입력값이 된다는 건 곧바로 상상하기 어려울 수 있다. 예를 들어 다음의 함수 $I$ 를 새로 정의해보자. $$ I(f) := \int_{0}^{6} f(x) dx $$ 함수 $I$ 는 어떤 함수를 인수로 받아 $0$ 부터 $6$ 까지의 정적분을 구해주는 함수다. 그러면 ‘입력되는’ 함수에 따라 그 ‘반환’은 다음과 같이 계산될 것이다. $$ f(x) = x^2+1 \implies I(f) = 78 \\ g(x) = x-1 \implies I(g) = 12 $$ 이렇듯 함수 그 자체가 일급 객체면 함수형 언어의 한가지 성질을 가지게 된다고 말할 수 있다. 물론 이것만으로 함수형 언어라고 부르지는 않고, 명령형 언어일지라도 이러한 개념을 받아들인 언어는 점차 늘어가는 추세다. 물론 러프하게는 그냥 ‘함수형 언어기도 하다’라고 표현해도 의미 전달 자체에는 큰 문제가 없다.


  1. 실제로 프로그래머의 관점에서 일급 객체를 설명한 글들은 구체적으로 어떤 언어들을 예시로 드는 경우가 많다. ↩︎

댓글