[UE4] 람다식(Lambda), capture절, 람다식 장단점
📚 람다(Lambda)
람다는 알고리즘이나 비동기 함수에 전달되는 몇 줄의 코드를 캡슐화할 때 사용할 수 있다.
동기 함수는 스레드 간의 순서를 맞추면서 작동하지만, 비동기 함수는 순서를 맞추지 않기 때문에 어디서 사용될지 모르는 멀티 스레드같은 기능을 구현할 때 사용한다.
또한 람다는 함수의 선언과 수행이 끝난 뒤 그 자리에서 바로 소멸시키기 때문에 간단하게 사용할 때 유용하게 사용할 수 있다. (복잡한 함수를 구현할때는 사용하지 않는것이 좋다)

위 사진은 람다식의 구조를 파악해볼 수 있는 람다 구문의 일부이다.
1️⃣ [ ] 캡처절
람다식은 익명 메서드인 만큼 익명 이므로 함수 이름이 없다. 대신에 [ ] 기호가 이름을 대체하는 역할을 수행한다.
이러한 [ ] 기호 안에 들어가는 내용을 캡처절(Capture)라고 한다.
람다식을 수행할 때 새로운 변수를 도입할 수 있는데, 이러한 변수에 액세스하거나 캡처할 수 있다.
capture 절에는 캡처되는 변수와 캡처가 값에 의한 것인지, 참조에 의한 것인지를 결정해줘야 한다.
[ ] 처럼 아무것도 안쓴 캡처절은 외부 변수를 사용하지 않는다는 의미이고,
[=] 는 외부변수를 대입하여 사용한다는 의미이다.
[&] 는 외부변수를 참조하여 사용한다는 의미이다.
외부 변수의 종류에 따라 두 개의 캡처모드를 사용하고 싶은 경우에는 각각의 변수의 캡처모드를 초기화하여 사용할 수 있다.
total 외부변수는 참조하여 사용하고싶고, factor 외부변수는 그냥 값으로, 즉 대입하여 사용하고 싶다면
[&total, factor] 처럼 캡처절을 작성하면 된다.
순서를 바꿔 [factor, &total] 도 동일하고, [&, factor], [=, &total] 으로 작성해도 동일하다.
그러나 같은 식별자나 this 객체를 하나의 캡처절에 두 번 이상 나타낼 수 없다.
2️⃣ ( ) 매개변수
[ ] 가 함수명을 대체한다고 했으니, 함수명 뒤에는 ()가 온다.
따라서 람다식의 구조도 [ ] 기호 다음에 () 를 작성해주는 것이다. ( ) 가 Argument 구역이므로 매개변수가 있다면 ( ) 안에 정의할 수 있다.

위와 같이 일반 함수와 동일하게 매개변수를 작성하면 된다.
3️⃣ mutable
이후 mutable 키워드를 통해 람다의 기본 호출 방법인 const-by-value 를 무시하고 캡처절의 변수를 수정할 수 있도록 만들거나,
4️⃣ throw() 예외처리
noexcept 키워드를 통해 throw() 예외처리를 생략하도록 만들 수 있다.
5️⃣ Return 형식
람다식 안에 return 문이 포함되어 있다면 컴파일러는 반환 식의 형식에서 반환 형식을 추론해내고, return 문이 없다면 void로 반환 형식을 추론한다.
이처럼 람다식의 반환 값은 자동으로 추론되지만 -> 키워드를 통해 명시적으로 반환 형식을 지정해줄 수도 있다.
6️⃣ 람다 본문
여기까지가 함수의 선언부이고, 이후 { } 괄호 안에 함수의 정의부를 작성하여 함수내용인 람다 본문을 작성하면 된다.
📚 람다식의 장단점
⭕ 람다식(Lambda Expression) 의 장점
- 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있어 코드를 간결하게 만들 수 있다.
- 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다.
- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
- 멀티쓰레디를 활용하여 병렬 프로그래밍이 용이하다.
❌ 람다식(Lambda Expression) 의 단점
- 람다를 사용하면서 만든 무명함수는 재사용이 불가능하다.
- 람다식의 호출도 까다롭고 디버깅도 어렵다.
- 람다를 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있다.
- 재귀로 만들경우에 부적합하다.
- 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어진다.
참조
https://learn.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170
C++ 람다 식
자세한 정보: C++의 람다 식
learn.microsoft.com
[JAVA] 람다식(Lambda)의 개념 및 사용법
람다함수란? 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어입니다. 현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람
khj93.tistory.com
https://itkjspo56.tistory.com/m/289
[Java]람다(Lambda)를 사용하는 이유
람다를 사용하는 이유는 무엇일까? 먼저 이 Lambda라는 녀석을 한번 알아보자. 람다식(Lambda Expression)이란 무엇인가? Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어
itkjspo56.tistory.com