[컴][프로그래밍] closure 클로져

Closure
루비(Ruby) 를 접하면서 closure 라는 개념을 들었다. 도대체 뭐가 그렇게 다른 점이 있는 건지 궁금해 이리저리 뒤지다 얻은 정보를 바탕으로 생각을 정리해 보려 한다.
종합하면, 클로저는 코드 블록이다. 이 코드 블록이 일상의 코드 블록과 다른 것은 처음 만들어지는 환경에서 바인딩을 더할 수 있다.
밑은
http://newlord.egloos.com/1978181 에서 가져온 소스 이다.
#--------------------------------------------
def paidMore(amount)
return Proc.new {|e| e.salary > amount}
end
#--------------------------------------------
이 함수는 클로저를 리턴한다.

#--------------------------------------------
highPaid = paidMore(150)
#--------------------------------------------
이러면 highPaid 에서는 paidMore(150) 에서 return 하는 closure 를 갖게 된다. 그러면 highPaidamount150closure 를 갖게 되는 것이다. 이것이 바인딩이라고 할 수 있다. 재미있는 점은 우리가 흔히 알고 있는 scope 라는 개념이다.
Closure C 함수 와의 차이점
많이 알고 있는 C 를 가지고 얘기 하겠다. 대부분의 language 가 그렇지만, 함수의 호출을 하고 return 을 이루면 함수가 끝이난다. 이 때 함수의 local variable 들은 stack 에 생성이 되고, 함수의 return 과 함께 사라지는 운명에 놓여있다.
그렇기 때문에 함수 안의 어떤 특정한 variable 의 값을 지정해 주기 위해서라면, 언제나 함수를 호출하는 시점에서 그 variable 이 갖는 값을 parameter로 넘겨 줘야 하고, 다시 함수를 호출하는 시점에서 또다시 같은 값을 넘겨 주어야 한다.
Closure 사용
하지만 closure 를 쓴다면 위와 같이 가능하다. 한 번 parameter 로 값을 넘겨주고, 넘겨받은 parameter 의 값으로 variableset 하고 난 code blockhighPaid 가 갖는 것이다.
highPaid 변수는 150이상의 급여를 갖는 객체를 테스트하는 코드 블록 (루비의 Proc 에 의해 만들어진) 을 갖게 된다. 이를 가지고 다음과 같이 사용할 수 있을 것이다.
#--------------------------------------------
john = Employee.new
john.salary = 200
print highPaid.call(john)
#--------------------------------------------
그 다음 문법의 단순함이 좋은 점이라고 한다. 자세한 얘기는 참조를 통해 확인하자.

null

by 쿠...살 | 2007/04/29 23:19 | 기본테마 | 트랙백 | 덧글(0)

트랙백 주소 : http://i5on9i.egloos.com/tb/4840651
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶