본문 바로가기
Programming

C++ 람다 함수

by 느리게 걷는 즐거움 2024. 6. 7.
반응형

C++ 람다 함수

C++11이 도입되면서 람다 함수는 C++ 프로그래머들에게 강력하고 유연한 도구가 되었습니다. 람다 함수는 익명 함수라고도 불리며, 코드를 간결하게 만들고 일시적인 함수 객체를 생성하는 데 유용합니다. 이번 글에서는 람다 함수의 기본 개념부터 고급 활용 방법까지 자세히 살펴보겠습니다.

람다 함수의 기본 개념

람다 함수는 함수 객체를 간단하게 정의할 수 있는 문법입니다. 다음은 기본적인 람다 함수의 형태입니다.

auto lambda = []() {
    // 코드 블록
};

 

여기서 `[]`는 람다 시작을 나타내고, `()`는 매개변수 리스트, `{}`는 함수 본체를 나타냅니다. 람다 함수는 `auto` 키워드를 사용하여 변수에 할당할 수 있습니다.

기본적인 예제

먼저, 간단한 예제를 통해 람다 함수를 살펴보겠습니다.

#include <iostream>

int main() {
    auto greet = []() {
        std::cout << "Hello, World!" << std::endl;
    };
    
    greet(); // "Hello, World!" 출력
    
    return 0;
}

 

위 예제에서 `greet`는 "Hello, World!"를 출력하는 람다 함수입니다. `greet()`를 호출하면 람다 함수가 실행됩니다.

매개변수와 반환 값

람다 함수는 일반 함수처럼 매개변수를 받을 수 있으며, 반환 값도 가질 수 있습니다.

#include <iostream>

int main() {
    auto add = [](int a, int b) -> int {
        return a + b;
    };
    
    int result = add(3, 4); // 7
    
    std::cout << "Result: " << result << std::endl; // "Result: 7" 출력
    
    return 0;
}

 

위 예제에서는 두 개의 정수를 더하는 람다 함수를 정의하고 있습니다. `-> int` 부분은 반환 타입을 명시합니다.

캡처 리스트

람다 함수는 외부 변수들을 캡처하여 사용할 수 있습니다. 캡처 리스트는 `[]` 안에 작성됩니다.

#include <iostream>

int main() {
    int x = 10;
    int y = 20;
    
    auto add = [x, y]() {
        return x + y;
    };
    
    int result = add(); // 30
    
    std::cout << "Result: " << result << std::endl; // "Result: 30" 출력
    
    return 0;
}

 

위 예제에서는 외부 변수 `x`와 `y`를 캡처하여 람다 함수 안에서 사용하고 있습니다.

값 캡처와 참조 캡처

캡처 리스트에는 값 캡처와 참조 캡처 두 가지 방식이 있습니다.

- 값 캡처: 외부 변수의 값을 복사하여 람다 함수 내에서 사용
- 참조 캡처: 외부 변수에 대한 참조를 람다 함수 내에서 사용

#include <iostream>

int main() {
    int value = 10;
    
    auto byValue = [value]() {
        return value;
    };
    
    auto byReference = [&value]() {
        return value;
    };
    
    value = 20;
    
    std::cout << "By Value: " << byValue() << std::endl; // "By Value: 10" 출력
    std::cout << "By Reference: " << byReference() << std::endl; // "By Reference: 20" 출력
    
    return 0;
}
캡처 리스트의 다양한 사용법

람다 함수는 캡처 리스트를 통해 다양한 방법으로 외부 변수를 사용할 수 있습니다.

- `[=]`: 모든 외부 변수를 값으로 캡처
- `[&]`: 모든 외부 변수를 참조로 캡처
- `[this]`: 클래스의 멤버 변수를 캡처
- `[a, &b]`: 변수 `a`는 값으로, `b`는 참조로 캡처

고급 사용법

람다 함수는 함수 객체로 사용할 수 있으며, 표준 라이브러리와 함께 강력한 기능을 발휘합니다.

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

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    
    std::for_each(numbers.begin(), numbers.end(), [](int n) {
        std::cout << n << " ";
    });
    // "1 2 3 4 5" 출력
    
    return 0;
}

위 예제에서는 `std::for_each` 알고리즘을 사용하여 벡터의 각 요소를 출력하는 람다 함수를 전달하고 있습니다.


반응형

'Programming' 카테고리의 다른 글

JWT (JSON Web Token)?  (0) 2024.06.09
MongoDB와 SQL: 명령어 비교  (0) 2024.06.09
C++ 벡터(Vector) 초기화  (0) 2024.06.05
__VA_ARGS__ 가변인자  (0) 2024.06.05
우분투에 Doxygen 설치 방법  (0) 2024.06.05