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 |