Java8 변경사항

Published: by Creative Commons Licence

  • Tags:


JAVA8 변경사항

2014년에 발표된 자바의 최신 버전인 Java SE버전에는 많은 사항이 변경되거나 새롭게 추가되었다.

새롭게 추가된 사항 중 주목할 만한 특징은 다음과 같다.

  1. 람다 표현식
  2. 스트림 API
  3. java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API
  4. 나즈혼 : 자바 스크립트의 새로운 엔진

람다 표현식

  • 메소드를 하나의 식으로 푠현한것.
  • 식별자 없이 실행할 수 있는 함수 표현식을 의미하며, 익명 함수라고도 부른다.
  • 메소드를 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있다.
  • 람다 표현식은 메소드의 매게변수로 전달될 수 있고, 메소드의 결과값으로 반환될수도 있다.
  • 람다 표현식은 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높이는 데 그 목적이 있다.

Stream API

  • 자바는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용한다. 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자를 사용하여 매번 코드를 작성해야 했다.
  • 이렇게 작성된 코드는 길이가 너무 길고 가독싱어 떨어지며, 코드의 재사용이 거의 불가능하며, 데이터베이스 쿼리오 ㅏ같이 정형화된 처리 패턴을 가지지 못하기에 데이터마다 다른 방법으로 접근해야 했다.
  • 이 문제를 극복하기 위하여 Java SE 8 버전부터 도입된 방법이 스트림 API이다.
  • 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다.
  • 함수형으로 처리할 수 있어서 가독성이 좋아지고 병렬처리가 가능하다는 장점이 있다.
  • 하지만 Stream.forEach()를 사용하면 전통적인 for-loop를 사용할때보다 오버세드가 생긴다.

Java.time 패키지

JDK 1.0에서는 Date 클래스를 사용하여 날짜에 관한 처리를 수행하였다. 하지만 Date 클래스는 현재 대부분의 메소드가 사용을 권장하지 않고 있다.

JDK 1.1 부터 새롭게 제공된 Calendar 클래스는 날짜와 시간에 대한 정보를 얻을 수 있지만, 이 또한 문제가 있다.

  • Calanar, Date class의 문제점
    1. 불변 객체가 아니다.
      • set으로 변경 가능하다는 점은 누군가 악의적으로 변경 가능하기 때문에 get/set 메서드에서 직접 Date 클래스를 사용하는 것은 위험하다.
    2. 상수 필드 ㄴ마용
      • calendar.add(Calendar.SECOND,2);
    3. 헷갈리는 월 지정
      1. 0월을 0으로 표현하는 문제 + Calendar.OCTOBER로 월을 지정하지만 실질적인 값은 9
    4. 일관성 없는 요일 상수

이러한 문제점을 해결하고자 Joda Time Library가 생성되었다.

이후 새로운 날짜/시간 관련 API가 java.time 패키지에 추가되었다. Instant, LocalDate, LocalDateTime, ZonedDateTime이 추가되었다.

나즈혼

Java SE 8 버전부터는 자바스크립트의 새로운 엔진으로 오라클의 나즈혼을 도입하게 된다.


참고