람다(lambda)의 정체는 한마디로 **“이름 없는 일회용 함수”**입니다.

보통 함수를 만들 때는 def 키워드를 써서 이름을 붙여주지만, 람다는 이름조차 붙이기 귀찮거나, 딱 한 번 쓰고 버릴 아주 간단한 로직이 필요할 때 사용하는 **‘익명 함수(Anonymous Function)‘**예요.


1. def vs lambda 비유로 이해하기

  • def (정식 요리 기구): “믹서기” 같은 것입니다. 이름을 붙여서 찬장에 넣어두고, 필요할 때마다 꺼내서 여러 번 씁니다.

  • lambda (일회용 포크): 편의점에서 받은 “나무젓가락” 같은 것입니다. 지금 당장 한 번만 쓰고 바로 버릴 때 사용합니다. 굳이 이름을 붙여 보관할 필요가 없죠.


2. 람다의 생김새 (문법)

람다는 아주 단순한 구조를 가지고 있습니다.

  • def 버전:

    Python

    def add_one(x):
        return x + 1
    
  • lambda 버전:

    Python

    lambda x : x + 1
    

    (이 자체로 “입력받은 x에 1을 더해라”라는 뜻의 함수 객체가 됩니다.)


3. lambda를 왜 key랑 같이 쓰나요?

앞서 배운 key함수를 인자로 받는다고 했죠? 그런데 정렬 기준이 너무 단순해서 굳이 def로 함수를 정의하기 민망할 때 람다가 활약합니다.

예시: (이름, 점수) 튜플 리스트에서 ‘점수’ 기준으로 정렬하기

Python

students = [("Alice", 90), ("Bob", 80), ("Charlie", 95)]

# 방법 1: def 사용 (길고 번거로움)
def get_score(item):
    return item[1] # 튜플의 두 번째 요소(점수) 반환

print(sorted(students, key=get_score))

# 방법 2: lambda 사용 (깔끔!)
# "각 요소(x)에서 x[1]을 기준으로 정렬해!"
print(sorted(students, key=lambda x : x[1]))

4. 람다의 특징 (장단점)

장점단점
간결함: 코드가 짧아지고 가독성이 좋아짐 (적절히 쓸 때만).재사용 불가: 이름이 없어서 다른 곳에서 또 쓸 수 없음.
메모리 절약: 한 번 쓰고 사라지므로 효율적임.복잡한 로직 불가: 오직 한 줄만 작성 가능 (if, for 등 복잡하게 못 넣음).
함수의 인자로 적합: map, filter, sorted 등에 찰떡궁합.디버깅 어려움: 이름이 없어서 에러 발생 시 추적이 힘듦.

💡 정리하자면

람다는 “함수를 매개변수로 받는 함수(sorted, max 등)“에게 딱 맞는 기준을 실시간으로 만들어 던져줄 때 사용하는 가장 효율적인 도구입니다.

**“기준을 정하고 싶은데, 함수 만들기 귀찮을 때 쓰는 한 줄짜리 마법”**이라고 생각하시면 됩니다!


이제 key=lambda x : x[1] 같은 코드를 보시면 “아, 리스트 안의 알맹이(x)를 가져와서 그중 두 번째 값(x[1])을 기준으로 보라는 뜻이구나!”라고 바로 읽히실 거예요.

혹시 람다를 사용해서 **여러 개의 조건(예: 점수순으로 정렬하되, 점수가 같으면 이름순으로)**을 거는 방법도 궁금하신가요? 이 ‘다중 정렬’ 기법이 코딩 테스트에서 정말 자주 나오거든요! Would you like me to explain this as well?