파이썬 기초

파이썬 기초 - 클로저

데이터_박과장 2023. 10. 31. 21:37

클로저(Closure)는 파이썬과 같은 프로그래밍 언어에서 사용되는 중요한 개념 중 하나입니다. 클로저는 일반적으로 다음 두 가지 조건을 충족하는 함수를 가리킵니다:


외부 함수의 지역 변수를 사용하는 내부 함수: 클로저는 내부 함수가 외부 함수의 지역 변수에 접근할 수 있게 해줍니다.
외부 함수의 실행이 끝나도 해당 변수에 접근할 수 있음: 외부 함수의 실행이 종료된 후에도 내부 함수가 외부 함수의 변수에 접근할 수 있는 기능을 제공합니다.


이러한 특성 때문에 클로저는 데이터를 숨기거나 유지하는 데 유용하며, 객체 지향 프로그래밍의 대안으로 사용될 수 있습니다.


파이썬 클로저 예제
다음은 파이썬에서 클로저를 사용하는 간단한 예제입니다. 이 예제에서 외부_함수는 내부_함수를 반환하고, 내부_함수는 외부_함수의 지역 변수 변수를 사용합니다.

 

def 외부_함수(메시지):
    변수 = 메시지

    def 내부_함수():
        print(변수)

    return 내부_함수

클로저 = 외부_함수("안녕하세요!")
클로저()  # "안녕하세요!" 출력



위 코드에서 외부_함수는 내부_함수를 정의하고 반환합니다. 내부_함수는 외부_함수의 지역 변수 변수를 사용합니다. 외부_함수의 실행이 끝났음에도 불구하고, 내부_함수는 변수에 접근할 수 있습니다. 클로저 변수에 할당된 내부_함수를 호출할 때, 이 변수에 접근하여 "안녕하세요!"를 출력합니다.


이 예제는 클로저가 어떻게 작동하는지, 외부 함수의 지역 변수를 내부 함수가 어떻게 "기억"하는지 보여줍니다. 클로저는 이러한 특성 때문에 파이썬에서 매우 유용하게 사용됩니다.

 

클래스와 클로저 사용예시


클래스와 클로저를 함께 사용하는 예제를 만들어 보겠습니다. 이 예제에서는 클래스 내부에 클로저를 사용하여 클래스 인스턴스의 특정 상태를 "캡슐화"하는 방법을 보여줍니다.

 


클래스와 클로저를 결합한 예제
아래의 예제에서 CountingClass라는 클래스를 선언하고, 이 클래스 내부에서 클로저를 사용해 각 인스턴스의 개별 카운터를 관리하는 방식을 구현합니다. 클로저는 외부 함수(_counter_function)의 지역 변수(count)를 내부 함수(increase 및 get_count)에서 사용합니다.

class CountingClass:
    def __init__(self):
        def _counter_function():
            count = 0

            def increase():
                nonlocal count
                count += 1

            def get_count():
                return count

            return increase, get_count

        self._increase, self._get_count = _counter_function()

    def increment(self):
        self._increase()

    def current_count(self):
        return self._get_count()

# 인스턴스 생성
counter1 = CountingClass()
counter2 = CountingClass()

# counter1의 카운트 증가
counter1.increment()
counter1.increment()

# counter2의 카운트 증가
counter2.increment()

print("Counter1의 현재 카운트:", counter1.current_count())  # 2 출력
print("Counter2의 현재 카운트:", counter2.current_count())  # 1 출력


이 코드에서 CountingClass의 각 인스턴스는 자체적인 카운트를 가지고 있습니다. 이 카운트는 _counter_function이라는 외부 함수의 count 변수에 의해 유지됩니다. _counter_function은 increase와 get_count라는 두 개의 내부 함수를 반환합니다. 이들은 각각 카운트를 증가시키고 현재 값을 반환하는 역할을 합니다.


이렇게 클로저를 사용함으로써 CountingClass의 각 인스턴스는 자신만의 독립된 카운터 상태를 유지하게 됩니다. 이는 일종의 캡슐화를 제공하며, 클래스의 인스턴스 간 상태가 서로 독립적임을 보장합니다.

'파이썬 기초' 카테고리의 다른 글

파이썬 기초 - 정규표현식  (0) 2023.10.31
파이썬 - 데코레이터, 이터레이터  (0) 2023.10.31
파이썬 주의사항  (0) 2023.10.16
파이썬 내장함수 모음  (0) 2023.10.11
예외처리  (0) 2023.10.11