본문 바로가기
카테고리 없음

클로저(Closure)와 람다(lambda)의 실용적 사용법

by python note 2025. 6. 4.

파이썬 클로저와 람다 함수 - 코드를 더 똑똑하게 만들기

파이썬에서 함수는 단순한 작업 지시를 넘어, 더 강력하고 유연한 코드를 만드는 데 중요한 역할을 합니다. 이번 시간에는 여러분의 코드를 한 단계 더 발전시킬 수 있는 흥미로운 개념인 클로저(Closure)람다(lambda) 함수에 대해 배워보겠습니다.

클로저는 함수가 주변 환경을 '기억'하게 하고, 람다는 짧고 간단한 함수를 만들 때 매우 유용합니다. 이 두 가지 개념을 이해하면 복잡한 문제를 더 간결하고 효율적으로 해결하는 방법을 알게 될 것입니다. 마치 복잡한 도면을 단순화된 그림으로 바꾸거나, 필요한 순간에 뚝딱 만들 수 있는 작은 도구를 얻는 것과 같습니다. 여러분의 파이썬 실력을 한층 더 업그레이드할 준비가 되셨나요?

클로저(Closure)란 무엇일까요?

클로저는 조금 어려운 개념으로 들릴 수 있지만, 쉽게 말해 '바깥 함수가 끝나도 안쪽 함수가 바깥 함수의 정보를 기억하고 사용할 수 있게 해주는 기능'입니다. 파이썬에서는 함수 안에 또 다른 함수를 만들 수 있는데, 이때 안쪽 함수가 바깥 함수의 변수를 마치 자기 것처럼 계속 사용하는 경우에 클로저가 만들어집니다.
마치 부모님이 주신 물건(바깥 함수의 변수)을 자녀(안쪽 함수)가 부모님이 외출하셔도(바깥 함수가 끝나도) 계속 사용할 수 있는 것과 같습니다. 클로저는 특정 정보를 계속 유지하면서 여러 번 사용해야 할 때 유용합니다.

클로저 사용 예시 1: '기억하는' 계산기 만들기

이 예제에서는 클로저를 이용해 특정 숫자를 '기억'하고, 그 숫자에 계속해서 더하거나 빼는 계산기를 만들어보겠습니다. make_calculator 함수는 initial_value를 기억하는 calculator 함수를 반환합니다. calculator 함수는 자신이 만들어질 때의 initial_value를 계속해서 사용합니다.

Python
# 클로저를 활용한 계산기 팩토리 함수 def make_calculator(initial_value): # 바깥 함수가 끝난 뒤에도 initial_value를 기억합니다. def calculator(add_value): return initial_value + add_value return calculator # 10을 초기값으로 가지는 계산기 생성 calc_start_10 = make_calculator(10) # 5를 초기값으로 가지는 계산기 생성 calc_start_5 = make_calculator(5) # 각 계산기 사용 print(f"10에서 시작하여 2를 더하면: {calc_start_10(2)}") print(f"5에서 시작하여 3을 더하면: {calc_start_5(3)}")

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
10에서 시작하여 2를 더하면: 12
5에서 시작하여 3을 더하면: 8

람다(Lambda) 함수란 무엇일까요?

람다(lambda) 함수는 'def' 키워드를 사용하지 않고 만들 수 있는 작은 함수입니다. 보통 한 줄로 간단하게 표현되는 함수를 만들 때 사용하며, '이름 없는 함수'라고도 부릅니다.
마치 복잡한 설계도(일반 함수) 없이, 필요한 순간에 쓱싹 그려서 사용하는 간단한 그림(람다 함수)과 같습니다. 주로 다른 함수의 인자(값)로 넘겨줄 때나, 짧은 계산이 필요할 때 활용됩니다.

람다 사용 예시 2: 두 숫자 더하기

이 예제는 람다 함수를 사용하여 두 숫자를 더하는 간단한 함수를 만드는 방법을 보여줍니다. lambda x, y: x + y는 'x와 y를 입력받아 x + y 값을 반환하는 함수'를 의미합니다. 이렇게 짧은 함수는 변수에 할당하여 일반 함수처럼 호출할 수도 있습니다.

Python
# 람다 함수로 두 숫자 더하기 add_numbers = lambda x, y: x + y # 람다 함수 사용 print(f"5 + 3 = {add_numbers(5, 3)}") print(f"10 + 7 = {add_numbers(10, 7)}")

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
5 + 3 = 8
10 + 7 = 17

람다 사용 예시 3: 리스트 정렬 기준 지정하기

람다 함수는 sorted()와 같은 다른 함수의 인자로 전달될 때 그 진가를 발휘합니다. 아래 예제에서는 학생들의 이름과 점수가 담긴 리스트를 점수 기준으로 정렬할 때 람다 함수를 사용합니다. 람다 함수가 없다면 별도의 def 함수를 정의해야 하지만, 람다를 사용하면 코드 한 줄로 간결하게 해결할 수 있습니다.

Python
# 학생들의 이름과 점수가 담긴 리스트 students = [ {'name': '철수', 'score': 85}, {'name': '영희', 'score': 92}, {'name': '민수', 'score': 78} ] # 람다 함수를 사용하여 'score'를 기준으로 정렬 sorted_students = sorted(students, key=lambda student: student['score']) # 정렬된 결과 출력 print("점수 기준 정렬된 학생 목록:") for s in sorted_students: print(f" 이름: {s['name']}, 점수: {s['score']}")

위 코드를 실행하면 다음과 같은 결과가 화면에 나타납니다.

출력 결과
점수 기준 정렬된 학생 목록:
이름: 민수, 점수: 78
이름: 철수, 점수: 85
이름: 영희, 점수: 92

주의:

람다 함수는 오직 하나의 표현식(expression)만 포함할 수 있습니다. 즉, 복잡한 로직이나 여러 줄의 코드를 포함할 수 없습니다. 복잡한 함수가 필요할 때는 반드시 def 키워드를 사용하여 일반 함수를 정의해야 합니다.

중요:

클로저는 함수가 생성될 때의 환경을 '기억'하는 것이며, 람다는 짧고 간단한 함수를 만들 때 사용합니다. 두 개념 모두 파이썬의 함수형 프로그래밍을 이해하는 데 중요한 요소입니다.

핵심 : 클로저는 안쪽 함수가 바깥 함수의 변수를 기억하여 사용할 수 있게 하는 기능입니다. 람다는 def 없이 한 줄로 간단한 함수를 정의할 때 사용되며, 특히 다른 함수의 인자로 자주 쓰입니다.

마무리 요약

이번 시간에는 파이썬에서 코드를 더 똑똑하고 유연하게 만들 수 있는 클로저람다 함수에 대해 알아보았습니다. 클로저는 함수가 특정 상태를 기억하게 하여 재사용 가능한 함수를 만들 때 유용하며, 람다는 짧은 코드를 한 줄로 표현할 때 매우 효과적입니다. 이 두 가지 개념은 파이썬 함수 사용의 깊이를 더해주며, 앞으로 더 효율적인 코드를 작성하는 데 큰 도움이 될 것입니다. 다음 강의에서는 파이썬의 강력한 기능 중 하나인 '데코레이터'에 대해 학습해 보겠습니다.

질문이 있다면 댓글에 남겨주세요.

실제 코딩이 잘 되었는지 터미널 출력 결과도 꼭 확인하세요.