python

Closure

hyundy 2021. 10. 21. 01:52

Closure 단어를 찾아보면 페쇄, 종료 라는 뜻을 지닌다. 

 

 무슨말인지 이해가 잘 안가니 코드로 이해해보자

def outer_func(msg):
    message = 'Hi '+ msg 

    def inner_func(): 
        print(message) 

    return inner_func 

my_func = outer_func('bye')

my_func()

코드를 보면 outer_fun 함수를 호출 한뒤 message 변수 선언해서 값을 저장 한다.

다음 inner_func 함수를 return 하면서 message 를 출력하게 된다. 

 

즉 inner_func 함수에서 outer_func 함수의 변수 message를 참조 한다는 것이다. 

 

무슨 말인지는 알겠지만 그래서 정확한 정의가 뭐냐?

자신을 포함하고 있는 외부함수보다 내부함수가 더 오래 유지되는 경우, 외부 함수 밖에서 내부함수가 호출되더라도 외부함수의 지역 변수에 접근할 수 있는데 이러한 함수를 클로저(Closure)라고 부른다.

 

클로저가 되기 위한 조건은 3가지가 있으니 코드를 보여 찾아가면 이해하기 쉬울것 같다

1. 어떤 함수의 내부 함수여야한다.
2. 자신을 둘러싼 함수의 상태를 참조한다.
3. 외부함수는 해당 함수를 반환해야 한다

 

파이썬 에서는 class 가 있기에 자주 사용하지 않는다. 하지만 이후 decorator 문법을 이해하기 위해 클로저가 무엇인지는 알고 있자