뎁스노트 앱으로 보시겠습니까?
뎁스노트 앱을 설치하시면
주문 알림 및 다양한 기능을
편리하게 이용하실 수 있습니다.
뎁스노트 앱으로 보기
아니오, 모바일 웹에서 보겠습니다.
×
뎁스노트
로그인
홈
언어
프레임워크
개발도구
네크워크와 서버
데이터베이스
프로젝트 관리
데이터 사이언스
이야기
사진
모집 · 홍보
피토니의 블로그
피토니의 블로그
로그인
회원가입
글쓰기
글 올리기
개발 노트, 이야기를 작성해보세요.
질문하기
부담없이 무엇이든 질문하세요.
사진 올리기
사진을 올려보세요.
Python
Python 클로저(Closure): 함수 내의 함수 활용법
피토니
8일 전
팔로우
팔로잉
Python에서 클로저(closure)는 다른 함수 안에 정의된 함수가, 자신이 선언된 환경에서 필요한 변수를 기억하는 개념입니다. 클로저는 고급 함수형 프로그래밍의 기초로, 더 효율적인 코드 작성과 유지보수에 도움을 줄 수 있습니다. 이번 글에서는 Python에서 클로저가 무엇인지, 어떻게 사용하는지, 그리고 실용적인 예제를 통해 이해해보겠습니다. ### 클로저란 무엇인가요? 클로저는 외부 함수 내에서 정의된 내부 함수로, 외부 함수가 종료된 후에도 내부 함수가 외부 함수의 변수를 '기억'할 수 있는 기능을 의미합니다. 이를 통해, 특정 데이터를 감싸는 컨테이너처럼 작동할 수 있습니다. ### 클로저가 필요한 이유 클로저는 다음과 같은 상황에서 유용합니다: * 상태를 저장하여 이후의 호출에서 참조할 필요가 있을 때 * 함수형 프로그래밍의 장점을 살리고 싶을 때 * 변수의 범위를 제한하여 코드의 예측 가능성과 안전성을 높이고 싶을 때 이와 같은 상황에서 클로저를 사용하면 전역 변수 사용을 줄일 수 있고, 코드의 모듈성과 재사용성을 높일 수 있습니다. ### 클로저의 기본 구조 클로저는 다음과 같은 구조로 이루어집니다. ``` def 외부_함수(외부_변수): def 내부_함수(내부_변수): return 외부_변수 + 내부_변수 return 내부_함수 ``` 외부 함수(외부\_함수)가 호출되면 내부 함수(내부\_함수)를 반환하며, 내부 함수는 외부 함수의 변수를 자유롭게 참조할 수 있습니다. ### 간단한 클로저 예제 아래 예제에서는 클로저를 활용하여 여러 번 호출되는 함수의 상태를 유지하는 방법을 보여줍니다. ``` def make_multiplier(x): def multiplier(n): return x * n return multiplier times3 = make_multiplier(3) print(times3(10)) # 출력: 30 print(times3(20)) # 출력: 60 ``` 여기서 times3는 make\_multiplier 함수에서 반환된 클로저입니다. 이 클로저는 x 값을 3으로 고정하여 내부 함수 multiplier에 전달합니다. 따라서 times3는 항상 x \* n을 수행하며, x가 3으로 고정된 상태로 남아 있는 것입니다. ### 클로저의 활용 사례 클로저는 간단한 데코레이터를 만들 때 유용하게 사용됩니다. 예를 들어, 특정 작업의 실행 시간을 측정하는 데코레이터를 클로저를 사용해 만들 수 있습니다. ``` import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"실행 시간: {end_time - start_time} 초") return result return wrapper @timer_decorator def sample_task(): time.sleep(1) print("작업 완료") sample_task() ``` 위 코드에서 timer\_decorator 함수는 내부에 wrapper 함수를 정의하고 반환합니다. wrapper는 func의 실행 시간을 측정하고 출력합니다. ### 클로저의 장점과 주의점 Python에서 클로저는 데이터 은닉을 통한 함수형 프로그래밍의 이점을 제공합니다. 외부 변수의 참조를 유지하므로 함수 호출마다 동일한 환경을 유지할 수 있으며, 이를 통해 전역 변수의 남용을 방지하고 코드의 복잡도를 줄일 수 있습니다. 하지만 클로저는 과도하게 사용하면 코드 가독성을 떨어뜨릴 수 있으므로, 필요한 경우에만 사용하는 것이 좋습니다.
클로저
0
0
0
20
신고하기
사용자 차단하기
피토니
8일 전
팔로우
팔로잉
댓글
0
올리기
답변 작성
답변 모드로 쓰기
올리기
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)
0
0
0
신고하기
사용자 차단하기
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)