2017. 1. 31. 20:19 General
익명함수, 람다(Lambda), Closure
익명함수, 람다(Lambda), Closure
처음 익명함수를 본 것은 javascript였다.
function(...) { .... }
함수의 이름은 없고 function이라는 예약어에 함수 형태를 알리는 (). 도대체 이것이 뭣일까?
오래전 범용(저급-고급)언어와, 객체 지향 언어를 알고 그것에만 집중하는 동안, 함수형 언어 등에 대해서는 까막눈이 되어 있었다. Javascript에서도, 단순히 변수에 함수를 대입해서 사용하는 구나 정도에서 그쳤다.
어디서는 lambda 라고, 또 어디서는 closure라고 하고.... 아 도대체 뭔 이야를 하는 건지.
나중에 알고 보니, 유사어였다.
결론부터 말하자면,
함수형 언어에서, 함수도 하나의 객체로 취급되며, 객체지향의 object 처럼 최상위에 위치한다고 보면 된다. (사실 이 이야기도 쉬운 이야기가 아닐 수는 있지만...)
그렇기에, 함수에 인자(parameter)로 또 반환값으로 존재할 수도 있는 것이다. 변수명, 함수명 같은 이름이 필요하지 않기에, 익명함수(Anonymous Function)라고 불리는 것이다. 1936년에 이런 함수가 공식적으로 공개되었으며, 어떤 언어에서는 람다(Lambda)라고 불리기도 했다. (상세한 내용은 위키를 참조)
객체지향 언어인 java에서도 8버전부터 lamda expression 공식적으로 도입되었고 , 그 이전에는 Anonymous Inner-class를 통해 지원하고 있었다.
( 인자 ) -> ......;
new Interface() { ..... }
XOS용 언어인 Objective-c, swift에서도 closure 라는 명칭으로 제공된다.
'General' 카테고리의 다른 글
무료 호스팅 (0) | 2017.02.01 |
---|---|
프로그래밍 언어 학습 사이트 모음 (0) | 2016.12.01 |
컴퓨터 프로그래밍 (Computer Programming) (0) | 2016.10.25 |