프로그래밍 언어에서 first-class citizen 속성을 가진다는 것은 아래와 같은 조건을 만족하는 객체를 의미합니다.
파이썬의 정수 자료형들은 first-class citizen입니다. 다른 객체에게 매개변수로 전달될 수 있고, 변수나 자료구조에 할당되며 반환값으로 사용될 수 있기 때문입니다. 반면 C 언어에서 array는 first-class citizen이 아닙니다. array가 전달될 때 array의 첫번째 원소 주소값이 전달되는 것이기 때문에 array 자체가 매개변수로 사용되지 못하기 때문입니다.
이처럼 자료형이나 함수 등을 그 자체 매개변수로 전달하거나 반환값으로 사용될 수 있으면, first-class citizen 속성을 가지고 있다고 표현하게 됩니다.
함수가 first-class citizen 속성을 가지고 있다면, 해당 함수를 first-class function입니다. 자료형과 마찬가지로 변수에 함수를 할당하고, 매개변수나 반환값으로 함수를 전달할 수 있습니다.
def square(x):
return x*x
f = sqare
print(sqare(10)) # 100
print(f(10)) # 100
square 함수를 정의하여 변수 f에 할당하였고, f를 함수처럼 매개변수를 사용하여 호출하였습니다.
def sqare(x):
return x*x
def bind(func, arg_list):
result = []
for arg in arg_list:
result.append(func(arg))
return result
arg_list = [1,2,3]
print(bind(square, arg_list)) # [1,4,9]
이번에는 함수를 다른 함수의 매개변수로 전달하여 호출하였습니다. 이처럼 함수를 하나의 객체로서 매개변수로 전달하고, 반환값으로 사용함으로서 코드를 다양한 방법으로 사용하고 동작을 구현할 수 있습니다.