-----------------------------------------------------------------------------------------------
출처: http://slee0303.tistory.com/12
-----------------------------------------------------------------------------------------------
Closure in C++
Closure 는 Lexical binding 을 지원하는 함수형 언어에서 주로 쓰이던 개념으로서,
코드 블럭이 자신이 정의될 때의 주변 환경(코드 블럭이 정의될 때의 로컬 변수들의 값)을 기억하여
나중에 수행될 때도 원래의 환경에 따라 수행되는 것을 말한다.
보통 closure를 람다 함수(익명 함수)와 혼동하는 경우가 많은데 둘은 완전히 다른 개념이며
구분해서 사용해야 한다. 이러한 혼동이 생기는 이유는 closure 가 익명함수와 묶여서 사용되는
경우가 많기 때문이다. 또 closure 를 함수의 인수 또는 결과값으로 사용될 수 있는 코드 블록이라 이해하는 것은 closure 자체에 대한 이해라기 보다는 closure 용도에 대한 이해에 해당한다.
C++ 은 대표적인 절차적 언어이고 포인터를 지원하는 low level language 로서 성능 면에서는
가장 파워풀한 언어이다. 하지만 C++ 은 또한 가장 유연한 언어로서 라이브러리를 통해 확장될 수 있다. Template 와 Boost 라이브러리를 이용하여 C++ 에서 함수형 언어의 장점을 아주 쉽게 사용할 수 있으며, 함수형 언어의 대표적 개념들인 anonymous function, closure, higher order function 등이 지원된다.
1. Closure 의 개념
일단 closure 를 사용하기 위해서는 언어가 lexical binding 을 지원해야 한다.
다음의 C++ 코드를 보면,
int a = 7, b = 3;
// 함수 f 는 일차 함수 f(x) = a*x + b 에 해당하는 람다 함수 |