Java가 처음 설계되었을 때 익명의 기능을 사용하지 않는 것이 적절하다고 간주되었습니다. 나는 두 가지 이유를 생각할 수 있습니다 (그러나 공식적인 이유와 다를 수 있습니다).
- Java는 함수가없는 객체 지향 언어로 설계되었으므로 함수가없는 언어로 익명 함수를 갖는 것은 그리 자연스럽지 않았습니다. 또는 적어도 이것은 언어의 디자인에 많은 영향을 미쳤을 것입니다.
- 익명 함수는 Java가 유치하려는 프로그래머 커뮤니티에서 인기가 없었습니다 (C, C ++, Pascal?). 지금도 많은 Java 프로그래머는 이러한 기능을 매우 이색적인 것으로 간주하지만 Java 8에서는 매우 빠르게 변경 될 수 있습니다.
그 후 로버트 하비 (Robert Harvey)가 설명했듯이 썬의 정책은 항상 자바를 역 호환적이고 안정적으로 유지하는 것이었다.
반면에, 다른 경쟁 언어가 등장했습니다 (가장 중요한 것은 C #으로, Java 복제본으로 개발 된 후 자체 개발 방향을 취했습니다).
경쟁 언어는 다음 두 가지 이유로 Java에 압력을가했습니다.
표현력
새로운 기능은 특정 프로그래밍 관용구를보다 쉽게 작성하여 프로그래머에게 언어를 더 매력적으로 만들 수 있습니다. 일반적으로 언어에서 제공하는 기능 세트는 표현력, 언어 복잡성, 디자인 일관성 간의 절충입니다. 더 많은 기능을 추가하면 언어가보다 표현력이 높지만 복잡하고 마스터하기가 어렵습니다.
어쨌든 지난 몇 년 동안 Java 경쟁 업체는 Java에없는 많은 새로운 기능을 추가했으며 이것이 이점으로 간주 될 수 있습니다.
과대 광고
예, 불행히도 이것은 적어도 프로그래머로서의 일상 경험에서 볼 수있는 것 중에서 기술 선택의 요소입니다. 대부분의 팀원이 도구를 사용하는 방법을 모르더라도 도구에는 특정 기능이 있어야합니다. 그것을 사용할 수있는 사람들은 대부분 그것을 필요로하지 않습니다.
과대 광고는 특정 프로젝트의 플랫폼을 결정하는 관리자 일 수있는 관리자와 같은 비 기술적 인 사람들에게 더욱 중요 할 수 있습니다. 관리자는 때때로 람다, 병렬 처리, 멀티 코어, 기능 프로그래밍, 클라우드 컴퓨팅 등과 같은 키워드 만 기억합니다. 선택한 기술에 목록의 각 항목에 녹색 표시가 있으면 최신 상태입니다.
그래서 한동안 IMO는 Java가
- 언어 안정성 및 디자인 단순성에 대한 원래 정책, 거대한 코드 기반 및 개발자 커뮤니티
- Java 프로그래머, 처음에는 C #, 그리고 Scala, Clojure, F #을 유치 할 수있는 경쟁 언어의 압력 (저는 내가 알고있는 언어를 말하며 다른 언어가있을 수 있습니다).
결국 오라클은 Java를보다 경쟁력있게 만들기 위해 Java를 업그레이드하기로 결정했습니다. 내 의견으로는, 새로운 기능은 특히 C #으로 전환하려는 유혹을받는 스칼라와 클로저와 같은 다른 언어를 자바와 너무 다른 것으로 보는 자바 프로그래머를 대상으로한다. 반면에, 기능적 프로그래밍 경험이 있지만 여전히 JVM을 사용하려는 개발자는 이미 스칼라, 클로저 또는 다른 언어로 전환했을 것입니다.
따라서 새로운 Java 8 기능은 Java를 언어로 더욱 강력하게 만들고 선언 된 초점은 동시 및 병렬 프로그래밍이지만 업그레이드는 마케팅 측면도 해결하는 것으로 보입니다 (Oracle의 Java 수석 설계자 인 Mark Reinhold는 다음과 같이 말했습니다. 람다 표현을 추가하는 것은 멋진 아이들과 어울리는 것이라고, 사실에는 멀티 코어 프로세서가 있기 때문입니다. 그러나이를 처리하는 가장 좋은 방법은 람다를 사용하는 것입니다 "( 이 기사 참조 ).
따라서 많은 Java 8 기능이 이미 잘 알려져 있지만 기능이 언어에 추가되는 이유와시기는 대상 독자, 기존 커뮤니티, 기존 코드 기반, 경쟁사, 마케팅 등 많은 요인에 달려 있습니다.
편집하다
"... SIC (1996)의 스트림에 대해 읽었습니다."에 대한 간단한 설명 : 스트림을 구현하려면 Java 8 람다가 필요하다는 것을 의미합니까? 실제로 익명의 내부 클래스를 사용하여 구현할 수 있습니다.