일급객체(First-Class Citizen) 이란?

 일급 객체는 OOP에서 사용되는 개념 중 하나로 아래의 조건을 만족하는 객체를 의미한다.

  1. 변수 혹은 데이터구조(자료구조) 안에 담을 수 있어야 한다.
  2. 매개변수로 전달할 수 있어야 한다.
  3. 리턴값으로 사용될 수 있어야 한다.

  파이썬에서는 함수도 위의 일급 객체의 조건을 만족합니다. 즉 함수를 변수에 할당할 수 있고, 매개변수로 전달도 가능하며, 리턴 또한 가능합니다. 이는 추후 클로저(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

 

 

 

 

 

 

 

 

 

 

'Python 프로그래밍' 카테고리의 다른 글

[Python] Method Type  (0) 2022.05.10
[Python] Closer  (0) 2022.05.02
[Python] enumerate 함수  (0) 2022.04.28
[Python] 익명함수 lambda  (0) 2022.04.26
[Python] List & Dictionary & Tuple & Set  (0) 2022.04.24

+ Recent posts