Nagie's DevStory

[CPP] 36. 람다식(Lambda Expression) 본문

Programming/C++

[CPP] 36. 람다식(Lambda Expression)

Nagie 2023. 10. 22. 22:40
728x90

람다식은 C++11 부터 도입된 기능이며 익명 함수를 정의해 사용하는 방법이다.

람다식은 간결하고 가독성이 높은 코드를 작성하는 데 도움을 주기 위해 만들어진 문법이지만 

때론 가독성을 챙기기 위해 사용한 람다식이 되려 가독성을 해치는 원인이 되기도 해 사용 시 주의가 필요하다.

람다식은 다음과 같이 사용할 수 있다.

 

[캡처 목록](매개변수 목록) -> 반환형식 {

    // 람다식의 본문
}

 

'[캡처 목록]'은 람다식에서 외부 변수를 캡처하는 방법을 지정한다.

외부 변수에 대한 읽기 또는 쓰기 액세스를 허용하거나 제한할 수 있다.

기호는 '=' 또는 '&'를 사용할 수 있으며

'='을 지정 시 값을 받아올 수는 있어도 값을 바꾸는 것은 불가능하며

'&' 지정 시 변수에 대한 참조를 받아올 수 있기에 람다식에서 값을 변경하면 원래 변수에도 영향을 끼친다.

 

'(매개변수 목록)'은 람다 함수의 입력 매개변수를 정의한다.

함수의 파라미터를 생각해 보면 이해가 빠를 것이다.

 

'-> 반환형식'은 람다 함수의 반환 값의 데이터 형식을 지정한다.

 

'{}'는 람다 함수의 본문을 감싸며 이 부분에 실제 동작을 정의한다.

 

다음은 람다식을 사용한 간단한 예시이다.

 

#include <iostream>

int main() {

    int x = 5;
    int y = 10;

    // 간단한 람다식: 두 정수를 더하여 반환
    auto add = [](int a, int b) -> int {
    
        return a + b;
    };

    int result = add(x, y);
    std::cout << "결과: " << result << std::endl;
}

 

또한 람다식은 기본적으로 외부 변수의 값을 변경할 수 있는 권한이 없지만

'mutable' 키워드를 사용하게 된다면 외부 변수의 값을 변경할 수 있게 된다.

다음은 'mutable' 키워드를 사용한 람다식의 구성이다.

 

[캡처 목록](매개변수 목록) mutable -> 반환형식 {

    // 외부 변수 수정
}

 

위의 구성을 기반으로 실제 사용 시 아래의 코드처럼 구현이 가능하겠다.

 

#include <iostream>

int main() {
    int x = 5;

    // x를 수정하려면 mutable 키워드 사용
    auto modifyX = [x]() mutable {
        x = 10;
        std::cout << "람다 내부: x = " << x << std::endl;
    };

    modifyX();
    std::cout << "람다 외부: x = " << x << std::endl;
}

 

다만 람다식은 기본적으로 외부의 값에 개입을 못 하므로

'mutable' 키워드를 사용하면 코드의 유연성을 챙길지는 모르겠지만

코드를 이해하기 어렵게 만들 수 있으므로 조심해서 사용하자.

728x90
Comments