Decorator 개념을 공부하기 위해
작은 개념부터 공부해보도록 하겠습니다.

first class function이란
프로그래밍 언어가 first-class citizen으로 취급하는 함수를 뜻합니다.

다음과 같은 특성을 지닙니다.

  1. 다른 함수의 argument로 사용 가능
  2. 다른 함수의 return 값으로 사용 가능
  3. 변수에 할당 가능
  4. 데이터 구조 안에 저장 가능

1. 함수의 재사용

first class function의 특성을 이용하면 다음과 같이 함수의 재사용이 가능합니다.

def square(x):
    return x * x

def cube(x):
    return x * x * x

def quad(x):
    return x * x * x * x

def my_map(func, arg_list):
    result = []
    for i in arg_list:
        result.append(func(i)) # square 함수 호출, func == square
    return result

num_list = [1, 2, 3, 4, 5]

squares = my_map(square, num_list)
cubes = my_map(cube, num_list)
quads = my_map(quad, num_list)
print(squares)
>>>[1, 4, 9, 16, 25]
print(cubes)
>>>[1, 8, 27, 64, 125]
print(quads)
>>>[1, 16, 81, 256, 625]

2. Closure

Closure는 다른 함수의 변수를 그 함수가 종료된 이후에도 기억하고 있습니다.

def logger(msg):

    def log_message(): #1
        print 'Log: ', msg

    return log_message

log_hi = logger('Hi')
print log_hi # msg = 'Hi'인 것을 기억하는 log_message 오브젝트 출력
log_hi() # msg='Hi'인 것을 기억하는 log_message() 함수를 실행