CS/Programming 일반
[python] 일급 객체 (First-class citizen)
pikabite
2022. 5. 14. 23:40
일급 객체(First-class citizen)란?
OOP (Object Oriented Programming) 에서 사용되는 개념으로, 아래와 같은 몇가지 조건을 만족하는 개념
- 변수나 데이터 구조 안에 담을 수 있음
- 매개변수로 전달이 가능함
- 리턴값으로 사용 될 수 있음
일반적으로 생각 할 때 int, char 등의 데이터형이 이 일급 객체에 속하고,
만약 함수가 일급 객체로 쓰일 수 있다면, 그 언어는 일급 함수를 지원한다고 함.
Python에서는 일급 함수를 지원함.
def func1 (param1, param2) :
local_var = "123"
def local_fun () :
print(local_var)
param1()
return local_fun
def first_fun () :
print("asdasd")
tmp_fun = func1(first_fun, 2)
tmp_fun() # "123" 하고 "asdasd" 프린트 됨
- func1 함수의 인자로 first_fun이 전달 됨
- func1 내부의 local_fun이 반환
- tmp_fun은 결국 func1로부터 받은 local_fun을 실행시킴
- local_fun이 func1 내부의 local_var를 print하고 param1로 받은 일급함수 first_fun을 실행함 (이 때 local_var가 계속 살아있음 => 클로저 개념 + func1의 인자로 first_fun을 받아서 decorator 함수로도 쓸 수 있음)
고차 함수 (Higher-order function)와 callback
- 이 때 first_fun 은 일급함수라고 하고, func1은 고차함수라고 함.
- 또한 이를 통해 callback 구조의 코드를 작성 할 수 있음.
- callback 구조는 javascript에서 자주 사용 됨
일급함수 개념을 이용한 클로저(clusure)개념과 데코레이터 개념은 다음 포스팅에서 다룹니다.