Nagie's DevStory
[CPP] 36. 람다식(Lambda Expression) 본문
람다식은 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' 키워드를 사용하면 코드의 유연성을 챙길지는 모르겠지만
코드를 이해하기 어렵게 만들 수 있으므로 조심해서 사용하자.