프로그래밍을 하다 보면 "스코프(scope)", "클로저(closure)" 같은 용어를 자주 접하게 됩니다.
하지만 실제 코드를 작성하면서 정확히 이해하지 못한 채 지나가는 경우가 많죠.
이번 글에서는 클로저가 무엇인지,
그리고 변수 스코프와 어떤 관계가 있는지를 직관적인 예제를 통해 이해해보겠습니다.
1. 먼저 스코프(Scope)란?
스코프란 변수가 유효한 범위를 뜻합니다.
즉, 어디서 선언된 변수를 어디까지 사용할 수 있느냐를 결정합니다.
파이썬의 스코프 규칙: LEGB
| 스코프 종류 | 설명 |
| Local | 함수 내부에서 정의된 변수 |
| Enclosing | 중첩 함수의 바깥 함수에 있는 변수 |
| Global | 전역 영영(파일 전체)에서 정의된 변수 |
| Built-in | 파이썬 내장 함수 등 기본 제공 영역 |
2. 클로저(Closure)란?
클로저란 함수가 종료된 후에도 해당 함수의 지역 변수를 기억하는 함수 객체입니다.
다시 말해,
내부 함수가 외부 함수의 변수를 참조하고, 그 외부 함수가 이미 끝났음에도 그 변수를 유지할 수 있는 구조입니다.
클로저 구조 예제
def outer(x):
def inner(y):
return x + y # 외부 변수 x 참조
return inner
add_five = outer(5)
print(add_five(3)) # 8
이 코드에서 일어나는 일:
- outer(5)가 실행되며 x = 5를 기억한 inner() 함수가 반환됨
- add_five는 이제 x = 5를 기억하고 있음
- 비록 outer()는 끝났지만, inner()는 여전히 x에 접근할 수 있음
→ 이게 바로 클로저
3. 클로저는 왜 유용할까?
- 상태를 기억하는 팩토리 함수처럼 사용 가능
- 객체 없이도 상태 저장 기능을 흉내 낼 수 있음
- 데코레이터, 콜백 함수, 커링 등에 활용됨
정리하면
| 개념 | 설명 |
| 스코프 | 변수가 유요한 범위(Local, Enclosing, Global, Built-in) |
| 클로저 | 함수가 외부 함수의 지역 변수를 기억한 채 리턴되는 함수 객체 |
클로저는 단순히 '중첩 함수'가 아니라,
외부 스코프의 변수를 기억하고 활용할 수 있다는 점에서 매우 강력한 도구입니다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 파이썬에서 *args와 시퀀스 언패킹의 차이 이해하기 (0) | 2025.09.06 |
|---|---|
| ()의 진짜 의미: 함수와 실행, 객체와 결과의 차이 (1) | 2025.06.22 |
| 래퍼(Wrapper)와 데코레이터(Decorator): 파이썬 함수 확장의 핵심 (0) | 2025.06.22 |
| 기능을 코드로 추상화 개념 (0) | 2025.06.22 |
| 반복 가능한 객체와 흐름 제어 키워드 (return, break, continue, pass)의 동작 방식 정리 (0) | 2025.06.22 |