Java8에서 변경된 사항들에 대하여

람다 표현식을 통한 함수형 프로그래밍, 스트림 API를 사용한 데이터 추상화, java.time 패키지를 이용한 날짜와 시간 API의 변화, 그리고 나즈혼을 통한 자바스크립트 엔진의 변화 등에 대해 자세히 알아볼 수 있다.
각 기능의 특징과 예시를 통해 Java8의 변화와 발전을 이해하는 데 도움을 준다.
특히, 기존 방식과 비교하여 Java8에서 어떤 개선점이 생겼는지에 대해 집중적으로 다루고 있다.

 

 

 

Java8

람다 표현식 (Lambda Expression)

  • 함수형 프로그래밍

 

식별자 없이 실행할 수 있는 함수 표현식으로, 익명 함수 (anonymous function)라고도 부른다.

 

메소드를 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있으며 메소드의 매개변수로 전달될 수도 있고, 메소드의 결괏값으로 반환될 수도 있다.

기존의 불필요한 코드를 줄여주고 작성된 코드의 가독성을 높여준다.

new Thread(new Runnable() {
    public void run() {
        System.out.println("전통적인 방식의 일회용 스레드 생성");
    }
}).start();

new Thread(()->{
    System.out.println("람다 표현식을 사용한 일회용 스레드 생성");
}).start();

 

 

 

스트림 API (Stream API)

  • 데이터 추상화

 

많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용하며, 이렇게 저장된 데이터에 접근하기 위해 반복문이나 반복자 (iterator)를 사용해 매번 코드를 작성했으나, 이렇게 작성된 코드는 길이가 너무 길고 가독성이 떨어지며 코드의 재사용이 거의 불가능하다.
또, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못해 데이터마다 다른 방법으로 접근해야만 했다.

 

스트림 API는 데이터를 추상화하여 다루기에 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공한다.

String[] arr = new String[]{"넷", "둘", "셋", "하나"};

// 배열에서 스트림 생성
Stream<String> stream1 = Arrays.stream(arr);
stream1.forEach(e -> Systehttp://m.out.print(e + " "));
System.out.println();

// 배열의 특정 부분만을 이용한 스트림 생성
Stream<String> stream2 = Arrays.stream(arr, 1, 3);
stream2.forEach(e -> Systehttp://m.out.print(e + " "));

 

 

 

java.time 패키지

  • Joda-Time 이용한 새로운 날짜 및 시간 API

 

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

JDK 1.1부터 제공된 Calendar 클래스는 날짜와 시간에 대한 정보를 얻을 수 있으나, 다음과 같은 문제점을 가지고 있다.

 

  • Calendar 인스턴스는 불변 객체 (immutable object)가 아니라 값이 수정될 수 있다.
  • 윤초(leap second)와 같은 특별한 상황을 고려하지 않는다.
  • Calendar 클래스는 월 (month)을 나타낼 때 1월부터 12월을 0부터 11까지로 표현해야 하는 불편함이 있다.

 

따라서 많은 자바 개발자들은 Calendar 클래스뿐만 아니라 더 나은 성능의 Joda-Time이라는 라이브러리를 함께 사용했다.

Java SE 8 버전에서는 Joda-Time 라이브러리를 발전시킨 새로운 날짜와 시간 API인 java.time 패키지를 제공한다.

java.time 패키지는 위의 문제점을 모두 해결하고, 다양한 기능을 지원하는 하위 패키지를 포함하고 있다.

LocalDate today = LocalDate.now();
System.out.println("올해는 " + today.getYear() + "년입니다.");

LocalDate otherDay = today.withYear(1982);
System.out.println("올해는 " + otherDay.getYear() + "년입니다.");

 

 

 

나즈혼 (Nashorn)

자바스크립트 새로운 엔진

자바스크립트의 기본 엔진으로는 모질라의 리노 (Rhino)가 사용되어 왔다.

세월이 흐르며 리노는 자바의 최신 개선 사항 등을 제대로 활용하지 못하는 등 노후화된 모습을 보여주어 Java SE 8 버전부터는 새로운 엔진으로 오라클의 나즈혼 (Nashorn)을 도입하게 된다.

이는 기존 사용되던 리노에 비해 성능과 메모리 관리 면에서 크게 개선된 스크립트 엔진이다.

 

 

 

📜참고