본문 바로가기
STUDY/Python

[Python] 클로져

이번에는 클로져(Closure)에 대해 알아보자.

 

클로져에 대해 알기 위해서는 파이썬의 내부함수 구조를 이해해야한다.

 


내부함수(inner)

 

내부함수는 중첩의 개념으로 쉽게 말해, 함수 안의 함수를 의미한다.

함수 안에서 또 다른 함수가 선언되는 것이다.

 

>>> def outer(num):
	def inner(a, b):
		return a + b
	return inner(num, 20)

>>> num = 10
>>> result = outer(num)
>>> result
30

 

구조 자체는 어렵지 않다.

 


클로져(Closure)

 

클로저의 기본 구조도 내부함수와 유사하다.

클로져의 가장 큰 특징을 2 가지로 설명하고 있다.   ( 책에서 )

   

   # 내부함수가 외부함수의 인자값을 직접 접근할 수 있다.

   # 함수 호출 시, 내부함수를 직접 호출하지 않지만, 반환한다.

 

클로져를 선언하는 구조는 아래와 같이 내부함수와 유사하다.

단, 내부함수를 직접 호출하지 않고 있다.

 

>>> def outer(word):
	def inner():
		return "Word : %s" % word
	return inner

 

이렇게 생성한 클로져를 사용해보자.

>>> word = "Closure"
>>> func = outer(word)
>>> func
<function outer.<locals>.inner at 0x000000F86F00BC10>
>>> func()
'Word : Closure'

클로져를 사용해보면, 결과로는 'inner()' 함수가 호출되고 외부함수의 인자값을 전달하지 않아도 사용한 것을 확인할 수

있다.

이는 외부 함수가 호출되면서, 내부함수의 복사본을 내부적으로 하나 생성해서 반환하기 때문이다.

때문에 내부함수로 인자를 전달하지 않아도 외부함수의 파라미터 값을 사용할 수 있는 것이다.

 

 

'STUDY > Python' 카테고리의 다른 글

[Python] 예외처리(try-except)  (0) 2020.02.23
[Python] 함수  (0) 2020.02.17
[Python] 조건문 & 제어문  (0) 2020.02.16
[Python] 리스트 & 튜플  (0) 2020.02.09
[Python] 변수 및 기본타입  (0) 2020.02.09