Programming/C++

람다 식(Lambda Expression)

moxie2ks 2025. 1. 30. 18:01
728x90
반응형

개요

람다식은 C++11 이상에서 도입된 기능으로, 함수의 인수로 호출되거나 전달되는 위치에서 정의되는 함수 객체이다. 이는 개발자가 특정한 동작을 수행할 수 있도록 코드 블록을 간편하게 캡슐화할 수 있게 해준다. 람다식은 특히 간단한 연산이나 조건을 필요로 하는 경우에 유용하다. 본 글에서는 람다식의 정의, 주요 기능 및 다양한 예제를 살펴보고자 한다.

설명

람다식의 기본 구조는 다음과 같다:

1. 캡처(capture): 외부 변수에 접근하기 위한 방법으로, 값으로 캡처할 것인지 참조로 캡처할 것인지를 지정한다. 예를 들어, [&]는 모든 외부 변수를 참조로 캡처(외부 변수에 대한 업데이트를 반영이 가능)하고, [=]는 값으로 캡처한다. [ ]는 람다 식의 본문이 외부 변수에 액세스하지 않음을 나타낸다.

2. 매개 변수(parameters): 람다에 입력으로 제공되는 매개 변수를 지정한다. 매개 변수를 명시하지 않을 수도 있다.

3. mutable(선택사항): 이 키워드를 이용하여 값으로 캡처된 변수를 수정할 수 있다. 또한, 예외 사양을 통해 예외를 던지지 않는 람다로 정의할 수 있다.

4. exception-specification(선택사항): 예외를 던질 수 있는지 또는 던지지 않는지를 명시적으로 지정할 수 있다. 이는 함수의 예외 안전성을 강화하고, 호출자가 이를 기반으로 최적화를 수행할 수 있다.

5. 반환 형식(return type): 함수의 반환 값을 명시하는 데 사용된다. 자동으로 유추될 수 있으나, 필요에 따라 지정할 수 있다.

6. 본문(body): 람다식이 수행할 실제 작업을 정의하는 코드 블록이다.

예제 코드

다양한 상황에서의 람다식 활용을 보여주는 예제는 다음과 같다.

예제 1: 기본적인 람다식

단순히 두 수를 더하는 람다식:

#include <iostream>
#include <functional>

int main() {
    auto add = [](int x, int y) -> int { return x + y; };
    std::cout << "Sum: " << add(5, 3) << std::endl; // Output: Sum: 8
}

예제 2: 람다식을 std::function에 할당하기

람다식을 std::function 객체에 할당하여 사용할 수 있다. 반환형이 지정된 경우:

#include <iostream>
#include <functional>

int main() {
    std::function<int(int, int)> add = [](int x, int y) { return x + y; };
    std::cout << add(2, 3) << std::endl; // Output: 5
}

예제 3: 정적 변수와 함께 사용하기

람다식에서 정적 변수를 사용하여 상태를 유지하면서 값을 생성할 수 있다:

#include <iostream>
#include <vector>
#include <algorithm>

void fillVector(std::vector<int>& v) {
    static int nextValue = 1;
    std::generate(v.begin(), v.end(), [] { return nextValue++; });
}

int main() {
    std::vector<int> values(5);
    fillVector(values);
    for (int val : values) {
        std::cout << val << " "; // Output: 1 2 3 4 5
    }
}

실행 결과

위의 예제들을 실행했을 때 다음과 같은 결과가 나타난다:

Sum: 8
5
1 2 3 4 5

결론

람다식은 C++ 프로그래밍에서 코드의 가독성과 유연성을 높여주는 중요한 기능이다. 이를 통해 개발자는 복잡한 구문 없이 함수 객체를 손쉽게 정의할 수 있으며, 코드를 더욱 간결하게 유지할 수 있다. 다양한 예제를 통해 람다식을 활용하는 방법을 이해하면 프로그래밍 실력을 한층 더 높일 수 있을 것이다.

참고 문헌

C++ 람다 식

람다 식의 예

728x90
반응형