람다 표현식 입문
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 42번째.
람다 표현식은 필요한 곳에서 즉시 작고 익명인 함수를 만들 수 있게 해주는 강력한 C++ 기능입니다. 별도의 함수 선언을 작성할 필요 없이 정의하고 사용할 수 있는 미니 함수라고 생각하면 됩니다.
람다 표현식의 기본 구문은 다음과 같은 패턴을 따릅니다: [](){}. 대괄호 []는 캡처 절(capture clause)이라고 불리며, 소괄호 ()는 (일반 함수와 마찬가지로) 매개변수를 포함하고, 중괄호 {}는 함수 본문을 포함합니다.
캡처 절은 람다가 주변 범위(scope)에서 어떤 변수를 사용할 수 있는지를 제어합니다. 가장 일반적인 형태는 다음과 같습니다:
[=] — 모든 지역 변수를 값에 의해(by value) 캡처합니다 (람다는 자체 복사본을 가집니다)[&] — 모든 지역 변수를 참조에 의해(by reference) 캡처합니다 (람다는 원본에 접근합니다)[] — 아무것도 캡처하지 않습니다 (람다는 외부 변수를 사용할 수 없습니다)간단한 람다를 생성하고 호출하는 방법은 다음과 같습니다:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // 람다 함수 호출변수에 저장하지 않고 람다를 즉시 정의하고 실행할 수도 있습니다:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();람다 표현식은 별도로 정의하고 싶지 않은 짧고 일회성인 함수에 특히 유용합니다. 람다 표현식은 코드를 더 간결하게 만들고 관련 로직을 가깝게 유지해 줍니다.
챌린지
쉬움람다 표현식의 기본 구문과 실행을 보여주는 프로그램을 작성하세요. 이 챌린지는 매개변수가 없는 간단한 람다 함수를 정의하고 호출하는 방법에 대한 이해도를 테스트합니다.
프로그램은 다음을 수행해야 합니다:
Hello from Lambda!를 출력하는 람다 표현식을 생성합니다.auto키워드를 사용하여 이 람다를 변수에 저장합니다.- 람다 함수를 호출하여 실행합니다.
Lambda executed successfully!를 출력하는 두 번째 람다 표현식을 생성합니다.- 이 두 번째 람다를 변수에 저장하지 않고 즉시 실행합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
Hello from Lambda!
Lambda executed successfully!람다 표현식은 [](){} 구문을 사용하며, 대괄호 []는 캡처 절(capture clause), 괄호 ()는 매개변수(이 챌린지에서는 비어 있음), 중괄호 {}는 함수 본문을 포함한다는 점을 기억하세요. auto variableName = [](){...};를 사용하여 람다를 변수에 저장한 다음 variableName();으로 호출할 수 있습니다. 즉시 실행을 위해서는 [](){...}(); 구문을 사용할 수 있으며, 이는 한 문장에서 람다를 정의하고 호출합니다.
치트 시트
람다 표현식은 인라인으로 정의할 수 있는 익명 함수입니다. 다음과 같은 [](){} 구문을 사용합니다.
[]- 캡처 절 (외부 변수에 대한 접근을 제어)()- 매개변수{}- 함수 본문
일반적인 캡처 절 형식:
[]- 아무것도 캡처하지 않음[=]- 모든 외부 변수를 값에 의해 캡처[&]- 모든 외부 변수를 참조에 의해 캡처
람다 저장 및 호출:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // 람다 함수 호출람다 즉시 실행:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();직접 해보기
#include <iostream>
using namespace std;
int main() {
// TODO: 아래에 코드를 작성하세요
// "Hello from Lambda!"를 출력하는 람다 식을 만듭니다
// auto 키워드를 사용하여 변수에 저장합니다
// 람다 함수를 호출합니다
// "Lambda executed successfully!"를 출력하는 두 번째 람다를 만듭니다
// 변수에 저장하지 않고 즉시 실행합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.