클로저


클로저 에 대한 괜찮은 설명을 가져왔다.... 


클로저 clo.sure라는 단어를 들어본 독자라면 람다가 클로저 (Clojure라는 프로그래밍 언어를 가리키는 것이 아니다)의 정의에 부합하는지 궁금할 것이다.

 원칙적으로 클로저란 함수의 비지역 변수를 지유롭게 참조할 수 있는 함수의 인스턴스를 가리킨다. 예를 들어 클로저를 다른 함수의 인수로 전달할 수 있다. 클로저는 클로저 외부에 정의된 변수의 값에 접근하고, 값을 바꿀 수 있다. 자바 8의 람다와 익명 클래스는 클로저와 비슷한 동작을 수행한다. 

람다와 익명 클래스 모두 메서드의 인수로 전달될 수 있으며 자신의 외부 영역의 변수에 접근할 수 있다. 다만 람다와 익명클래스는 람다가 정의된 메서드의 지역 변수의 값은 바꿀 수 없다. 람다가 정의된 메서드의 지역변숫값은 final 변수여야 한다. 덕분에 람다는 변수가 아닌 값에 국한되어 어떤 통작을 수행한다는 사실이 명확해진다. 

이전에도 설명한 것처럼 지역 변숫값은 스택에 존재하므로 자신을 정의한스레드와생존을같이 해야하며 따라서 지역 변수는 final 이어야한다. 가변 지역 변수를 새로운 스레드에서 캡처할 수 있다면 안전하지 않은 동작을 수행할 가능성이 생긴다(인스턴스변수는 스레드가 공유하는 힘에 존재하므로 특별한 제약이 없다).



+ Recent posts