본문 바로가기

프로그래밍/C++

C++ 람다식 익명함수

각종 라이브러리들에서 리스너, 특정 작업이 실행되었을때 발동되는 함수를 직접 하나하나 정의하지는 않고, 그대로 익명함수로 쓰는 표기법이 있어서 찾아 보았습니다. C++에서도 익명함수를 사용할 수 있더군요. 바로 "람다식" 이라는 표기법이었습니다.


람다식의 가장 쉽고 간단한 표기법

C++ 람다식은 다른 언어의 람다식과 다르게 특이한 것들이 많습니다. 다른 언어들이 편하게 함수를 만들고 이용하는 데에 초점을 뒀다면, 여기서는 그저 "익명 함수"를 만들기 위한 방법인듯 합니다.

이런 람다식에서 간단하게 필요한 부분만 뽑아내면 다음과 같습니다.


[](매개변수) -> 리턴타입 { 실행내용 }

여기서 매개변수는 함수를 정의할때 인수로 들어갈 수 있는 것들과 같은 의미이고, 리턴타입은 리턴값의 타입(int, string 등)을 지정해 줍니다. 그리고 실행내용에는, 이 함수가 실행할 내용을 적어 주시면 됩니다.

여기서 몇개가 생략이 가능한데요, "[](매개변수) { 실행내용 }" 이나 "[] { 실행내용 }" 등으로 줄여서 쓸 수도 있습니다. 인수도 없고 리턴값도 없는 함수다, 하면 그냥 가장 간단하게 []{} 하면 됩니다. 다만 약간 구문이 평소에 보던 것과 달라 이상하다는 느낌을 받을 수도 있는데, 그러면 위에 있는 구문처럼 풀로 쓰는것도 괜찮은 방법입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
#include "iostream"
 
using namespace std;
 
int main() {
    auto f = [](int a) -> int {
        return a * a;
    };
 
    cout << f(5);
 
    return 0;
}
cs

위처럼 간단히 저장하고 사용할 수 있습니다.

auto 라는 것을 처음보실수도 있는데, auto는 변수 내에 저장할 값의 타입을 인식해 자동으로 변수형식을 정해주는 녀석입니다. 이렇게 변수타입이 뭔지 잘 모를때 사용하면 정말 편리해요!


작동시켜보면 25가 출력되는 것을 볼 수 있습니다. f 함수를, 들어온 값의 재곱(들어온값 * 들어온값) 해주도록 만들었기에, f(5) 를 출력했을때 25가 출력되는 것입니다. 정확히 말하자면 f 함수가 아닌, f 라는 이름의 변수 안에다가 이름없는 함수(익명함수)를 넣어두고 그걸 f라고 칭하며 사용하는 것이죠.

이런 익명함수는 익명이라는 특징 덕에 특정 행위에 대한 처리를 설정할 때 필요한 리스너에 가장 많이 쓰이게 됩니다. 리스너가 나오는 라이브러리가 상당히 많으니 잘 공부해 두었다 잘 써먹어 보자구요.

C++ 람다식, 익명함수. 어렵지 않으니 적극 활용해 봅시다.


'프로그래밍 > C++' 카테고리의 다른 글

C++ 수학 헤더(math.h) 사용하기  (1) 2017.12.15