클로저 (컴퓨터 프로그래밍)

컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩 하기 위한 일종의 기술이다. 기능상으로, 클로저는 함수를 저장한 레코드(record)이며, 스코프(scope)의 인수(Factor)들은 클로저가 만들어질 때 정의(define)되며, 스코프 내의 영역이 소멸(remove)되었어도 그에 대한 접근(access)은 독립된 복사본인 클로저를 통해 이루어질 수 있다.

예제. 다음의 짧은 스크립트(Script)는 고계함수(higher-order function)인 startAt에 대해서 정의한다. startAt은 x 인수와 incrementBy 중첩함수로 이루어져 있다.

incrementBy 함수는 코드 블록(lexical scope)에 속해 있으므로, 인수인 x에 대한 접근이 가능하다. startAt 함수는 x의 값(Value)이나 참조(Reference)를 복사한 클로저를 반환한다.

startAt과 incrementBy는 x와 y의 값을 더한다.

function startAt(x){
    function incrementBy(y){
        return x + y
    }
    return incrementBy
}
    
var closure1 = startAt(1)
var closure2 = startAt(2)

참고로 위 예제는 자바스크립트(JavaScript)로 작성되었다. closure1과 closure2는 각각 y + 1과 y + 2 값을 반환(return) 하는 함수의 역할을 한다.

역사와 어원 편집

클로저(closure)의 개념은 1960년대 람다 표현식에 의하여 만들어졌다. 1970년 대 펄(PAL) 프로그래밍 언어가 일급 객체 함수(first-class functions)를 지원하기 시작했다.