lambda 와 closure 의 차이점 ?

Java SE 8에 도입되기 전부터 관심을 받던 람다식과 closure. 이 둘의 차이는 뭘까?

한마디로 lambda는 이름이 없는 익명 함수( anonymous function ) 를 가르키며,
closure는 하나 이상의 엮인(bound) 변수가 있는 환경에서 실행( or 평가)되는 함수 정도로 이해할 수 있겠다.

자유변수(메소드 파라메터도 아니고 코드 내부에도 저장되지 않는 변수)의 값을 포함하는 코드 블록의 기술용어가 클로저 closure이다.누군가 자신이 사용하는 언어에 클로저가 있다고 흐뭇해한다면, 자바에도 클로저가 있으니 안심해도 좋다. 자바에서는 람다 표현식이 클로저다. 사실 이너 클래스가 클로저로 존재해왔다. 다만, 자바8에서는 매력적인 문법으로 클로저를 제공한다.
- 가장 빨리 만나는 자바8 (길벗) 에서.


두 의미에 대한 깊은 논의는 다음 링크에서 확인 할 수 있음.
http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda
http://www.langdev.org/posts/38

그럼, Clojure 는?
http://clojure.org/ 에서 정의하고 있는것과 같이 JVM(Java Virtual Macine) , CLR(Common Language Runtime), JavaScript 엔진에서의 동작을 목표하는 dynamic programing language. 단어를 처음 접했을 때 정의를 찾아보지 않고, Kroisse님이 알려주기전까지 두 단어가 혼용되어 쓰이고 있다고 적당해 생각해 버렸던게 부끄럽넹...

2014/06/25 15:13 2014/06/25 15:13
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Clojure는 프로그래밍 언어 이름이고, 말씀하시는 개념은 closure입니다.

  2. Blog Icon
    서비

    Kroisse님. 고맙습니다.
    영미권 검색 시에 Clojure, closure 모두 검색되어서 혼용해서 사용하는 줄 알았습니다. 알려주신 내용으로 좀 더 명확하게 공부하도록 하겠습니다.

뜻밖에도 JDK7에 Closure가 도입됩니다.

이전 Java 7 로드맵 업데이트와 커뮤니티의 반응. 포스팅을 통해 JDK7에서의 클로저 누락에 대한 언급을 한 적이 있는데요. 뜻밖에도 JDK7에 클로저를 포함하기로 했다는 뉴스를 접했습니다.

Java SE의 수석 엔지니어 Mark Reinhold는 지난 자신의 의견에 반하여 JDK7에 클로저를 도입하기로 했다는군요. JDK 출시 일정은 조금 지연되어 2010년 9월께가 될 듯합니다.

Coin 프로젝트의 수석 엔지니어인 Joseph D. Darcy는 다음 버전의 JDK7에는 BGGA의 제안과 유사한 방식의 "경량의" 클로저가 포함되며 Java 7에서 약간의 언어상 변화가 있을 것이라고 말했습니다.

썬은 java 클로저에 회의적이었지만 자바 커뮤니티는 이미 3가지의 클로저 구현 방법을 제안했었습니다.
2009/12/04 15:46 2009/12/04 15:46
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다

Java 7 로드맵 업데이트와 커뮤니티의 반응.

2009년 12월 수정 : Java 7에 클로저를 도입하기로 했네요.( http://www.yunsobi.com/blog/513 )

2010년 초반 출시를 목표하고있는 Java 7의 기능을 Java SE의 수석 엔지니어 Mark Reinhold가 Devoxx에 게시한 이후 여러 반응이 나오고 있습니다. 비록 그의 발표가 완전히 결정나지 않은 사항에 대한 잠정적인 내용이라곤 해도 커뮤니티 - 특히 클로저(Closure)의 누락을 주시하는 - 의 반응은 대단합니다.

Mark의 소식을 전한 Hamlet D'Arcy는 그의 블로그에 Java 7 Update from Mark Reinhold at Devoxx란 제목으로 Devoxx에 발표한 Java 7 중요한 새로운 기능을 요약해 올렸습니다.
모듈화 - JSR-294와 Project Jigsaw.
JSR 292 - JVM의 dynamic language 지원
JSR 203 - 진정한 비동기 I/O( non blocking I/O가 아닌)로 구현되는 더 새로워진 I/O API
JSR TBD - 아래에 기술하는것 같은 약간의 언어적 변화
   - 안전한 rethrow
   - Null dereference 표현식 : '?' 신택스를 이용한 Null 체크
   - 향상된 타입 추론
   - Multi-catch : catch 절에 ','를 이용하여 다수의 Exception 기술
JSR 296 - 스윙 어플리케이션 프레임워크
6u10 기능들의 개선(자바 커널, 퀵스타트,플러그인 등)

위 내용과 함께, 심사숙고했지만 Java 7에 포함되지 않을 몇몇 기능도 언급했습니다.
Closure - 의견을 통일하지 못해서.
구상화 제네릭 ( Reified generics )
퍼스트 클래스 프로퍼티
연산자 오버로딩
BigDecimal Syntax
JSR 295 - Beans Binding

이에대해 Java.net 에는 "Java 7에서 제외된 아래 기능 중 당신이 가장 관심을 두고 있는것은 무엇?"이란 주제로 투표가 진행되고 있습니다.
Java 7 and closure

많은 이들이 Closure의 부재에 대해 관심을 갖고 있군요.


Ricky Clarkson같은 사람은 극단적으로 Closure없이는 자바는 죽을 것이라고까지 표현하고있습니다.
So it's confirmed. Despite James Gosling wanting closures, despite 3 working closure prototype compilers, despite every other JVM language supporting closures, Java 7 will not have closures.
Martin Kneissl 역시 Java7에 Closure가 빠진것을 아쉬워하는 사람 중 하나입니다.
It should have closures instead of the new style "for" loop added in Java 5. It should have closures in Java 6. Now it seems that it will not get closures in Java 7. Closures are not that difficult to understand. At least when you compare them to anonymous inner classes in Java. Others disagree. I don't follow the reasoning of the closure opponents when they say that because there are stupid Java programmers out there you should limit the Language trying to prevent them from doing too much harm. That's just impossible. Incompetent programmers will shoot themselves in the foot in any language. Fortunately there are other languages on the JVM that can use the real strength of Java: libraries, portability, and (to some extent) tooling.
이 외에도 정말 많은 개발자들이 자바언어의 Closure 미 지원을 아쉬워합니다.

이번 발표와 커뮤니티의 반응을 통해 너무나 많은 개발자들이 클로저를 원하고 있다는 사실을 알수 있었습니다. 아직 Java 7의 모든 기능 확정되지 않은 상황이기에 커뮤니티의 반응에따라 기능이 추가될 여지도 배제할 순 없지만 개인적으로도 개발의 편의성을 고려하여 언어차원에서 클로저를 지원하면 좋겠다는 생각입니다.
현재 한국 자바 개발 현장에선 1.4가 주류를 이루고 있다고 보여지고 많지 않은 곳에서 1.5 이상이 쓰이고 있는 현실에 비추어보면 1.7이 현장에서 침투하기까진 적지않은 시간이 필요하겠지만요..

Closure에 대해 관심을 갖으신 자바개발자라면 "Neal Gafter의 자바를위한 클로저 프리젠테이션" 을 훑어 보시는것을 추천합니다.
2009/01/05 21:52 2009/01/05 21:52
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 전 자바팬은 아니지만 어째 제가 더 아쉽군요^^

  2. Blog Icon
    서비

    Generics(JSR-14 였었나요?)가 JSR에 올라가서 1.5에 추가되기까지 8년이라는 시간이 걸렸죠.
    기존 코드와의 역방향 호환성을 유지하면서 도입의 영향을 최소화하기 위해 그렇게나 긴 시간을 들여 고민을 한 것인데요.
    클로저를 도입하는데도 저런 긴 시간을 들인다면 그 사이 어떤 전개가 펼쳐질지 궁금합니다.