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" 프린트 됨
  1. func1 함수의 인자로 first_fun이 전달 됨
  2. func1 내부의 local_fun이 반환
  3. tmp_fun은 결국 func1로부터 받은 local_fun을 실행시킴
  4. 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)개념과 데코레이터 개념은 다음 포스팅에서 다룹니다.