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

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

컴퓨터 언어에서 클로저(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)를 복사한 클로저(Closure)를 반환한다.

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

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

참고로, 위의 짧은 소스코드(Script)는 자바스크립트(JavaScript)로 쓰였으며, 각각의 closure1과 closure2는 y + 1과 y + 2 값을 반환(return) 하는 함수의 역할을 한다.

역사와 어원[편집]

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