[Java] Java 8 특징

LTS 버전

  • LTS(Long Term Support) 버전이란, 장기간에 걸쳐 지원을 해주겠다는 뜻으로, 출시 이후 8년간 보안 업데이트와 버그 수정을 지원해줍니다.
  • 반면, non-LTS버전은 6개월 간격으로 출시되는데, 이러한 버전들은 짧은 기간만 해당 버전을 지원해줍니다.

Java 8

  • 오라클이 java를 인수한 후 첫번째 LTS 출시 버전으로, 32비트를 지원하는 공식적인 마지막 버전입니다.
  • 유로버전(Oracle JDK)와 무료버전(Open JDK)로 나뉩니다.
  • 2025년에 지원을 종료할 예정이었지만, 아직까지도 많은 사용자가 java 8 버전을 사용하고 있기 때문에 2030년 12월까지 연장되었습니다.
  • Spring Boot 2.7.x, Spring Framework 5.3.x

Java 8을 선택하는 이유

  • 이미 많은 기업과 개발자 커뮤니티에서 널리 사용되고 검증된 버전
  • 국내/외에서 현재까지 많이 사용되는 버전
  • 2030년까지 오랜 Support를 보장
  • 기존 서비스와의 호환

** 현재는 Java 17로 많이 전환하고 있습니다.

추가된 기능

1. Lambda Expression 및 Method Reference 도입

- 함수를 간단한 하나의 식으로 표현할 수 있어 가독성이 좋습니다.

/* 문자열 길이 순으로 정렬 */

// 익명 내부 클래스 사용
Arrays.sort(words, new Comparator<String>() {
   @Override
   public int compare(String s1, String s2) {
      return Integer.compare(s1.length(), s2.length());
   }
});

// 람다식 적용
Arrays.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length()));

// 메서드 참조 사용
Arrays.sort(words, Comparator.comparingInt(String::length));

 

2. Stream API

- 데이터를 처리하는 데 자주 사용하는 함수를 정의한 것으로, 순차 및 병렬 집계 작업을 용이하게 합니다.

- 데이터를 읽는 것으로, 원본 데이터를 변경하지 않습니다.

- 내부적으로 반복 작업을 처리합니다.

- 일회용이기 때문에 재사용이 불가능합니다.

- 데이터 종류에 상관없이 같은 방식으로 데이터 처리가 가능합니다.

// 리스트의 각 요소를 대문자로 변환
List<String> upperCaseWords = words.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());

// 배열에서 짝수만 필터링
int[] evenNumbers = Arrays.stream(numbers)
                          .filter(n -> n % 2 == 0)
                          .toArray();

// 리스트에서 문자열 길이의 합 계산
int totalLength = words.stream()
                       .mapToInt(String::length)
                       .sum();

// 배열의 평균 계산
double average = Arrays.stream(arr).average().orElse(0.0)

 

 

3. Interface Default Method 도입

- 이전에 인터페이스는 메서드 정의만 가능하고 구현은 할 수 없었지만, default method 개념이 생기면서 구현 내용도 인터페이스에 포함할 수 있게 되었습니다.

- 공통적으로 들어갈 함수를 인터페이스에서 구현이 가능합니다.

- default method는 인터페이스를 구현한 클래스에서 재정의가 가능합니다.

public interface DefaultInterface {
	void initMethod();
    default void defaultMethod() {
        System.out.println("default method");
    }
}

 

 

4. Optional Class 도입

- Null Point Exception이 발생할 상황을 방지하여, 간단하게 Null 처리를 할 수 있습니다.

// 기본 값 제공
Optional<String> food = foodRepository.findById(foodId).orElse("default food");

System.out.println(food.get()); // 값 반환

// ifPresent 구현
food.ifPresent(
	value -> System.out.println("Food found: " + value), // 값이 있는 경우
    () -> { // 값이 없는 경우
     	System.out.println("Food not found for id: " + foodId);
        throw new RuntimeException("Food not found for id: " + foodId);
    }
);

// orElseThrow 구현
String foodValue = food.orElseThrow(() -> {
	return new RuntimeException("Food not found for id: " + foodId);
});

 

 

 

 

 

'BackEnd > Java' 카테고리의 다른 글

[Java] Java 21 특징  (3) 2024.07.15
[Java] Java 17 특징  (0) 2024.06.24
[Java] Java 11 특징  (0) 2024.06.21
[Java] Virtual Thread  (0) 2024.06.06