모든 내용은 YOUTUBE 코드없는프로그래밍 채널의 내용을 토대로 작성했습니다.
C++ 는 oop 중심의 언어이지만, fuctional programming 의 핵심 feature 인 lmbda function 지원하기 시작했다.
functional programming 의 핵심은 "함수들을 "Object" 나 "Variable" 처럼 다룰 수 있는 것에서 부터 시작된다.
함수들을 object 처럼 다루는 것 부터 살펴보자.
#include <iostream>
class Plus
{
public:
explicit Plus(int a) : localVar{ a }{}
int operator() (int x) const
{
return localVar + x;
}
private:
int localVar;
};
int main()
{
Plus plus3(3);
Plus plus5(5);
std::cout << plus3(10) << std::endl; //함수를 object 처럼 호출해서 사용할 수 있게됨
std::cout << plus5(10) << std::endl;
return 0;
}
그런데 이 방법은 local variable 을 이용해서 fuction call operator 를 오버로딩한 함수를 호출한 것에 불과하다.
(연산자 오버로딩에 대해서 잘 모르면 이 부분부터 한 번더 살펴보고 오자.)
#include <iostream>
int main()
{
auto lambdaPlus3 = [localVar = 3](int x)
{
return localVar + x;
};
std::cout << lambdaPlus3(10) << std::endl;
return 0;
}
compiler exprorer 를 통해서 function object 를 이용해서 작성한 코드와 lamda fuction 으로 작성한 코드를 어셈블리어로 확인해보자
완전히 똑같은 것을 확인할 수 있다.
결국 코드로 볼때는 많이 다르지만 어셈블리어와 메모리상에서는 똑같이 작용한다는 것을 알 수 있다.