본문 바로가기

카테고리 없음

First-class citizen(일급 객체) 란?

반응형

일급 객체의 역사

일급 객체, 일급 함수라는 개념은 영국의 크리스토퍼스트레이치라는 컴퓨터 과학자가 1960년에 처음 소개한 개념이다. 일급 객체가 되려면 다음과 같은 조건을 충족해야 한다

 

조건

변수나 데이터 구조 안에 담을 수 있다.

매개변수로 전달이 가능하다.

리턴값으로 사용될 수 있다.

 

 

  • 변수나 데이터 구조 안에 담을 수 있다.
>>>def citizen():
...    print('human')
>>>
>>>nation = citizen #변수나 데이터 구조 안에 담음
>>>nation()
human

>>>print(nation)
<function citizen at 0x031D94B0>

>>>print(type(nation))
<class 'function'>

 

  • 매개변수로 전달이 가능하다
>>> def add(a,b):
...     return a + b
...
>>> def calculate(func, arg1, arg2):
...     print('calulation: ', func.__name__)
...     print('result: ', func(arg1,arg2))
...
>>> calculate(add, 4, 6) #add 함수를 calculate 함수에 인자값으로 전달하였다
calulation:  add
result:  10

 

  • 리턴값으로 사용될 수 있다.
>>> def document_it(func):
...     def new_function(*args, **kwargs):
...         print('Running function:', func.__name__)
...         print('Positional arguments:', args)
...         print('Keyword arguments:', kwargs)
...         result = func(*args, **kwargs)
...         print('Result:', result)
...         return result
...     return new_function #리턴값으로 함수를 리턴해 준다
...
>>>
>>> def add_ints(a, b):
...     return a + b
...
>>> # add_ints(3, 5) = 8
... decorated_add_ints = document_it(add_ints) #인자값으로 함수를 넣어주고 함수를 변수에 할당
>>> print(decorated_add_ints(3, 5))

Running function: add_ints
Positional arguments: (3, 5)
Keyword arguments: {}
Result: 8
8

 

함수가 일급 객체인 언어와 그렇지 않은 언어

  • 함수가 일급 객체인 언어: JavaScript, Python, Scala, Go 등등
  • 함수가 일급 객체가 아닌 언어: C, Java
반응형