Java8 이후 변경사항

JoongHyeok.Velog·2022년 3월 31일
0

Java

목록 보기
4/5
post-thumbnail

JAVA8에서의 변경 사항

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

Java SE 8에서 변경되거나 새롭게 추가된 사항 중에서 주목할 만한 특징은 다음과 같습니다.

  1. 람다 표현식(lambda expression) : 함수형 프로그래밍
  2. 스트림 API(stream API) : 데이터의 추상화
  3. java.time 패키지 : Joda-Time을 이용한 새로운 날짜와 시간 API

1. 람다 표현식

람다 표현식이란 간단히 말해 메소드를 하나의 식으로 표현한 것입니다.람다 표현식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다.
메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 "익명함수" 이라고도 합니다.

int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1);

이 람다표현식이 하는 일을 메서드로 표현하면 다음과 같다.

public int method(){
	return (int)(Math.random() * 5) + 1)
};

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

2. 스트림 API

자바에서는 많은 양의 데이터를 저장하기 위해서 배열이나 컬렉션을 사용합니다.또한, 이렇게 저장된 데이터에 접근하기 위해서는 반복문이나 반복자(iterator)를 사용하여 매번 코드를 작성해야 했습니다.

하지만 이렇게 작성된 코드는 길이가 너무 길고 가독성도 떨어지며, 코드의 재사용이 거의 불가능합니다.또한, 데이터베이스의 쿼리와 같이 정형화된 처리 패턴을 가지지 못했기에 데이터마다 다른 방법으로 접근해야만 했습니다.

이러한 문제점을 극복하기 위해서 Java SE 8 버전부터 도입된 방법이 바로 스트림(stream) API입니다.스트림 API는 데이터를 추상화하여 다루므로, 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 방법을 제공합니다.따라서 스트림 API를 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방법으로 다룰 수 있습니다.

3. java.time 패키지

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

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

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

따라서 많은 자바 개발자들은 Calendar 클래스뿐만 아니라 더 나은 성능의 Joda-Time이라는 라이브러리를 함께 사용해 왔습니다.Java SE 8 버전에서는 이러한 Joda-Time 라이브러리를 발전시킨 새로운 날짜와 시간 API인 java.time 패키지를 제공합니다.

java.time 패키지는 위와 같은 문제점을 모두 해결했으며, 다양한 기능을 지원하는 다수의 하위 패키지를 포함하고 있습니다.

Java8 이전의 Date 와 Calender 클래스의 문제점

  • 불변 객체가 아니다.
    - 멀티 스레드 환경에서 언제든 문제가 발생할 수 있습니다
  • Calender는 월(Month)값 설계가 잘못되었습니다
    - 10월을 나타내는 Calender.OCTOBER 숫자값는 ‘9’이다
    - 당연히 ‘10’ 으로 생각했던 개발자들에게는 큰 혼란이 왔습니다

JodaTime이라는 오픈소스를 사용해서 문제점들을 피했었고 ,Java8에서는 LocalDate를 통해 해결했습니다.

더 자세한 내용 : https://d2.naver.com/helloworld/645609

profile
영차영차

0개의 댓글