클로저
클로저는 함수의 재사용성을 사용하여 만든 함수입니다. python의 디자인 패턴과 관련된 요소로서 단순히 python에서만 쓰이는 것이 아닌 다른 언어에서도 디자인 패턴이 존재합니다.
입력
출력
그런데 이 함수를 굉장히 많이 사용할 것이라 하나의 패턴으로 패턴화 하고 싶다면 어떻게 해야할까요?
입력
출력
이렇게 함수의 재사용성을 좀 더 다르게 해서 만든 것이 closer입니다.
지금 작성한 '함수'가 생각보다 간단하기 때문에 앞에서 배웠던 lambda로 한번 처리해 볼까요?
입력
출력
함수 내 지역 변수는 내부에서만 처리되며 클로저 외부에 전달된 내부 함수를 활용해서 함수 내부를 이용하거나 변경할 수 있습니다.
외부에 전달된 내부 함수가 변수에 할당되었기 때문에(여기서는 a, b, c에 할당되었어요) 클로저 환경은 항상 재사용이 가능한 상태로 남아 프로그램이 종료되기 전 까지 외부 함수도 계속 남아있게 됩니다.
함수 내에서의 함수, 함수 밑에서의 변수 등 메모리의 관계는 직접 정리해 보는 것이 좋아요.
전역변수 global도 함수 안에서 어떤 값을 사용할 것 인지에 대한 키워드이기 때문에 예제를 한번 보도록 할게요.
입력
출력
이 예제에서는 global이라는 키워드를 사용했기 때문에 가까운 변수인 함수1의 x, y에 접근하는 것이 아닌 전역변수 즉, 함수 밖에 있는 x, y에 접근하게 됩니다.
입력
출력
반면 이 예제에서는 nonlocal을 사용했기 때문에 함수1에 재정의 한 x, y를 접근하게 됩니다.