쉬운 설명 :
굳이 코드 바깥(혹은 별도 파일, 클래스 등)에 선언, 정의할 필요 없이, 함수 선언과 구현을 필요한 자리에서 "한꺼번에" inline으로 해 주는 편의성을 제공함.
c++의 경우를 생각해 보면 함수 정의는 저 바깥에 있고 내부에선 그저 call을 하니 이것의 동작 여부를 알기 위해선 이곳 저곳 이동해야 한다. 그러나 lambda는 그 모든게 한 자리에 있어 가독성이 뛰어나다.
거기에 이름도 필요없고 주변 변수도 캡처하여 사용 가능하며 일회성으로 간단한 연산에 매우 경제적으로 사용 가능하다!
1. 람다 함수를 사용한 예시
사용 문법 : auto add = [](int x,int y){…};
#include <iostream>
int main() {
// 1) 람다를 정의해서 add 변수에 저장
auto add = [](int x, int y) {
return x + y;
};
// 2) 람다 호출
std::cout << "C++: 2 + 3 = " << add(2, 3) << "\n";
// 3) 즉시 호출(IIFE)도 가능
std::cout << "C++: 4 * 5 = "
<< [](int a, int b){ return a * b; }(4, 5)
<< "\n";
return 0;
}
2. 일반 함수를 사용한 예시
위 람다 함수를 사용한 예시와 얼마나 다른지 잘 비교해 보자.
#include <iostream>
// 1) 이름 있는 함수 정의
int add(int x, int y) {
return x + y;
}
int multiply(int a, int b) {
return a * b;
}
int main() {
std::cout << "C++: 2 + 3 = " << add(2, 3) << "\n";
std::cout << "C++: 4 * 5 = " << multiply(4, 5) << "\n";
return 0;
}
- 일반 함수는 선언부와 정의부(또는 한 곳에)로 나뉘어야 한다.
- 호출 시에는 이름을 통해 사용한다.
- 람다와는 달리 귀찮게 외부의 정의부를 봐야 이해가 된다. 예시는 코드가 간단하지만 수천 줄의 코드라고 생각해 보자.
3. 클로저 기능 사용 가능
lambda 함수는 closure 기능을 사용하여 별도 매개변수를 추가하지 않고 연산에 사용 가능하다.
#include <iostream>
int main() {
int factor = 5;
// factor를 캡처(capture)해서 mul 람다 내부에서 사용
auto mul = [factor](int x) {
return x * factor; // 함수 매개변수로 받지 않았지만 외부 변수 factor 사용 가능
};
std::cout << "3 * factor(5) = " << mul(3) << "\n"; // 15
return 0;
}
- [factor] 부분이 “외부의 factor 값을 복사해서 이 람다 안에 보관”하라는 의미이다.
- mul(3) 을 호출하면, 내부에서 3 * 5 연산이 이뤄진다.
- 이처럼 클로저는 “람다 함수가 정의될 때 주변 변수(환경)를 함께 묶어서 보관”하기 때문에, 별도의 매개변수 없이도 함수 내부에서 그 값을 활용할 수 있게 해 주는 강력한 기능이다.
4. 파이썬 동일 예시
1) 람다 함수 예시
def main():
# 1) 람다를 정의해서 add 변수에 저장
add = lambda x, y: x + y
# 2) 람다 호출
print(f"Python: 2 + 3 = {add(2, 3)}")
# 3) 즉시 호출(IIFE)도 가능
print("Python: 4 * 5 =",
(lambda a, b: a * b)(4, 5))
if __name__ == "__main__":
main()
2) 일반 함수 예시
def add(x, y):
return x + y
def multiply(a, b):
return a * b
def main():
print(f"Python: 2 + 3 = {add(2, 3)}")
print(f"Python: 4 * 5 = {multiply(4, 5)}")
if __name__ == "__main__":
main()
3) 클로저 기능 예시
def make_multiplier(factor):
# factor를 클로저로 캡처한 람다를 반환
return lambda x: x * factor
mul5 = make_multiplier(5)
print(mul5(3)) # 15
'Computing technics > C++' 카테고리의 다른 글
| Lambda Functions (0) | 2025.04.25 |
|---|---|
| Delete 메모리 해제 (Malloc 에러) (2) | 2024.10.24 |