람다 함수(lambda function)는 짧고 간단한 함수를 코드 내에서 즉석으로 정의할 때 사용하는 문법입니다.
일반적인 함수처럼 이름을 붙이지 않고, 필요한 시점에 바로 작성해 사용할 수 있다는 점이 가장 큰 특징입니다.
람다는 기본적으로 이름이 없기 때문에 한 번 쓰고 버리는 용도로 많이 활용됩니다.
하지만 변수를 통해 할당하면 일반 함수처럼 재사용할 수도 있습니다.
auto square = [](int x) { return x * x; };
std::cout << square(5); // 25
길게 작성할 필요 없이 짧은 연산, 한 줄짜리 처리, 콜백(Callback) 등에 자주 쓰입니다.
예를 들어 std::for_each에서 단순 출력만 한다면, 굳이 별도의 함수 선언이 필요하지 않습니다.
std::vector<int> v = {1, 2, 3, 4, 5};
std::for_each(v.begin(), v.end(), [](int n){ std::cout << n << " "; });
람다의 강력한 기능 중 하나는 외부 변수를 캡처할 수 있다는 점입니다.
[] 안에 어떤 방식으로 외부 변수를 가져올지 지정할 수 있습니다.
int offset = 10;
auto func = [offset](int x) { return x + offset; }; // 값 캡처
auto funcRef = [&offset](int x) { return x + offset; }; // 참조 캡처
람다는 사실상 **함수 객체(functor)**처럼 동작합니다.
따라서 std::function과 호환되며, STL 알고리즘(std::sort, std::for_each)과 찰떡궁합입니다.
button.onClick([](){ std::cout << "Button clicked!\n"; });
std::sort(v.begin(), v.end(), [](int a, int b){ return a > b; });
auto square = [](int x) { return x * x; };
람다는 C++에서 짧고 지역적인 함수를 작성할 때 강력한 무기입니다.
특히 콜백, STL 알고리즘, 임시 연산에 많이 활용되며, 코드의 가독성과 유지보수성을 크게 향상시킵니다.
👉 필요 이상으로 복잡해지거나 재사용이 많은 경우에는 일반 함수를 쓰는 것이 더 적절할 수 있습니다.
👉 반대로, 한 번 쓰고 버리는 작은 연산이라면 람다가 최적의 선택입니다.