클로저

Python SELF KO
레벨 13 , 레슨 3
사용 가능

3.1 클로저와의 만남

클로저는 자신의 외부 범위에서 변수를 캡처하는 함수로, 이 범위가 완료된 후에도 계속 작동하지. 즉, 클로저는 외부 범위에서 변수 값을 "기억"하고, 이 범위가 더 이상 활성이 아니더라도 계속 작업할 수 있다는 의미야.

클로저가 어떻게 작동하는지 이해하려면, 다음 예를 보자:


def outer_function(x):
    def inner_function(y):
        return x + y

    return inner_function
    
closure = outer_function(10)
print(closure(5))  # 출력: 15

여기서 무슨 일이 일어나고 있는지 알아보자:

외부 함수 (outer_function): 이 함수는 x라는 인수를 받아들이고, inner_function이라는 내부 함수를 정의해. 이 내부 함수는 y라는 인수를 받아 xy의 합계를 리턴해. inner_functionouter_function 내에서 호출되지 않고, 단지 선언될 뿐이야.

내부 함수 (inner_function): 이 함수는 outer_function에서 리턴되며, outer_function에 전달된 x 값에 대한 참조를 내부에 저장해.

클로저: 변수 closurex 값(이 경우, 10)을 "기억"하고 호출 시 사용할 수 있는 클로저가 돼.

보통 처음부터 클로저로 제대로 작업할 수 있는 사람은 없지. 그럼 예제를 통해 클로저에 대한 이해를 높여보자.

3.2 클로저 사용 예제

함수 생성기 만들기

클로저는 값을 생성하는 함수-생성기를 만드는 데 사용될 수 있어.


def make_counter():
    count = 0

    def counter():
        nonlocal count
        count += 1
        return count

    return counter
    
counter = make_counter()
print(counter())  # 출력: 1
print(counter())  # 출력: 2
print(counter())  # 출력: 3

설명:

함수-생성기 (make_counter): 이 함수는 count 변수를 생성하고, 그 값을 증가시키고 리턴하는 내부 함수 counter를 리턴해.

클로저: 함수 countercount 변수의 상태를 저장하고 호출 시마다 이를 변경할 수 있어.

설정된 함수 만들기

클로저는 미리 정의된 설정으로 함수를 만드는 데 사용될 수 있어.


def make_multiplier(factor):
    def multiplier(x):
        return x * factor

    return multiplier
    
double = make_multiplier(2)
triple = make_multiplier(3)
    
print(double(5))  # 출력: 10
print(triple(5))  # 출력: 15

설명:

설정 함수 (make_multiplier): 이 함수는 factor라는 인수를 받아들이고, 입력 값을 factor로 곱하는 내부 함수 multiplier를 리턴해.

클로저: 함수 doubletriplefactor의 고유 값을 저장하고 이를 곱셈에 사용하는 클로저야.

파라미터가 있는 데이터 필터링

클로저는 파라미터가 있는 필터링 함수를 만드는 데 유용해.


def make_filter(threshold):
    def filter_func(value):
        return value > threshold
        
    return filter_func
    
filter_above_10 = make_filter(10)
data = [5, 10, 15, 20]
filtered_data = list(filter(filter_above_10, data))
print(filtered_data)  # 출력: [15, 20]

설명:

필터 함수 (make_filter): 이 함수는 threshold라는 인수를 받아들이고, 값이 이보다 큰지 확인하는 내부 함수 filter_func를 리턴해.

클로저: 함수 filter_functhreshold 값을 저장하고 데이터를 필터링하는 데 사용해.

3.3 클로저의 장단점

클로저 사용의 장점

상태 캡슐화: 클로저는 전역 변수를 사용하지 않고도 함수 내 상태를 캡슐화할 수 있어, 코드의 가독성과 유지보수를 높여줘.

유연성: 클로저는 특정 설정이나 동작을 가진 함수를 생성하는 데 사용할 수 있어 코드가 더 유연하고 적응 가능해져.

함수형 프로그래밍: 클로저는 함수형 프로그래밍의 중요한 개념으로, 고차 함수나 다른 함수형 구조를 생성할 수 있어.

제한 사항 및 잠재적 문제

많은 장점에도 불구하고, 클로저는 몇 가지 제한 사항이 있어:

메모리 사용: 클로저는 더 이상 사용되지 않는 객체에 대한 참조를 유지할 수 있어 메모리 누수가 발생할 수 있어.

디버깅 난이도: 클로저는 코드의 디버깅을 어렵게 만들 수 있어, 왜냐면 변수의 상태가 명확하지 않을 수 있기 때문이야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION