Python 프로그래밍
[Python] 일급 객체 (First-Class Citizen)
DayOff
2022. 4. 30. 15:23
일급객체(First-Class Citizen) 이란?
일급 객체는 OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다.
- 변수 혹은 데이터구조(자료구조) 안에 담을 수 있어야 한다.
- 매개변수로 전달할 수 있어야 한다.
- 리턴값으로 사용될 수 있어야 한다.
파이썬에서는 함수도 위의 일급 객체의 조건을 만족합니다. 즉 함수를 변수에 할당할 수 있고, 매개변수로 전달도 가능하며, 리턴 또한 가능합니다. 이는 추후 클로저(closure)와 데코레이터(Decorator)를 이해하는데 필수적인 개념이므로 제대로 알고 넘어가보자.
1. 변수 혹은 데이터 구조 안에 함수를 담을 수 있다.
def func1(a, b): # 두 수를 더한 값을 리턴하는 func1 함수 선언
return a + b
f1 = func1 # f1이라는 변수에 func1 함수를 할당
print(func1)
print(f1) # func1함수와 f1의 메모리 주소를 출력, 같은 주소를 가리킴
print(f1 is func1) # is 함수로 비교
print(f1(1, 2))
print(func1(1, 2))
# [ 출력결과 ]
<function func1 at 0x000001A568285D38>
<function func1 at 0x000001A568285D38>
True
3
3
상기한것 처럼 단순히 변수가 아니라 자료구조에 할당 할 수 도 있다.
# 리스트에 할당
def add(a, b):
return a + b
def mins(a, b):
return a - b
calc = [add, mins]
for i in calc:
print(i(10, 5)) # 15와 5를 출력
# 딕셔너리에 할당
def add(a, b):
return a + b
def mins(a, b):
return a - b
calc = {
"add": add,
"mins": mins,
}
num1 = calc["add"](10, 5)
num2 = calc["mins"](10, 5)
print(num1) # 15
print(num2) # 5
2. 매개변수로 함수를 전달할 수 있다.
def add(a, b):
return a + b
def add_manager(func, a, b): # 함수를 매개변수로 받음
print(func(a, b)) # 매개변수로 받은 함수를 통한 연산
add_manager(add, 1, 2) # 매개변수로 add함수를 전달하고 3을 출력하게 됨
3. 함수를 리턴값으로 사용할 수 있다. (또한 함수를 함수 내에서 선언 가능하다.)
def hello(name): # 1
def printer(): # 2
print(f"Hello {name}!") # 3
return printer # 4
func = hello("Fox") # 5
func() # 6