[Java] Java 8 특징
Java SE 8 (LTS)
2014년 3월에 공개했으며 대표적인 변경 사항은 다음과 같다.
람다 표현식(Lambda Expression)
람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다.
람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.
Predicate<Apple> p = (Apple a) -> a.getWeight();
자세한 내용은 [람다 표현식 소개], [람다 타입/검사/추론] 이 글들을 참고하자
메서드 참조(Method Reference)
메서드 참조는 람다 표현식을 축약한 형태이다.
메서드 참조를 사용하면 람다 표현식을 더 줄일 수 있는데, 상황에 따라 가독성이 더 좋아보일 수 있다.
Predicate<Apple> p = Apple::getWeight;
자세한 내용은 [메서드 참조] 이 글을 참고하자
Interface의 Default Method
Java 8 이전에는 인터페이스에 선언만 할 수 있었지만 Java 8 부터는 인터페이스에 default 메서드를 선언하고 구현 내용을 포함할 수 있다.
public interface Car {
default void run() {
System.out.println("부릉");
}
}
Optional
Java 8 부터 Optional을 이용하여 값이 비어있음을 명시적으로 표현할 수 있고 NPE(NullPointerException)에 잘 대응할 수 있다.
// 생성
Optional<String> alpha = Optional.of("abc");
Optional<String> nullableAlpha = Optional.ofNullable("abc");
// 추출
String alphaStr = alpha.orElse("abc");
// 확인
if (alpha.isEmpty()) {
System.out.println("isEmpty");
}
Stream API
Java 8 부터 순차, 병렬 작업을 지원하는 Stream API가 추가되었다. Stream은 선언형으로 컬렉션 데이터를 처리할 수 있다.
여기서 선언형이란 데이터를 처리하는 구현 코드 대신, 질의로 표현하는 것을 말한다.
List<String> highRatingMoviesName =
movies.stream()
.filter(m -> m.getRating() > 7) // 평점 7 이상 영화 선택
.sorted(comparing(Movie::getRating)) // 평점 순으로 정렬
.map(Movie::getName) // 영화명 추출
.collect(Collectors.toList()); // 리스트에 저장
자세한 내용은 [스트림(Stream)] 이 글을 참고하자.
새로운 날짜, 시간 API
기존 Date와 Calendar 클래스의 기능 부족과 비 표준적인 명명 규칙, 일관되지 못한 속성 값의 문제를 해결하기 위해 새로운 날짜 API가 추가되었다.
//javax.time.Clock
Clock.systemUTC(); //current time of your system in UTC.
Clock.millis(); //time in milliseconds from 1/1/1970.
//javax.tme.ZoneId
ZoneId zone = ZoneId.of(“Europe/London”); //zoneId from a timezone.
Clock clock = Clock.system(zone); //set the zone of a Clock.
//javax.time.LocalDate
LocalDate date = LocalDate.now(); //current date
String day = date.getDayOfMonth(); //day of the month
String month = date.getMonthValue(); //month
String year = date.getYear(); //year
PermGen Area 제거
Java 8 이전에는 초기 설정 시 PermSize와 MaxPermSize를 설정해주어야 했으나, Java 8 부터는 Permanent Generation이 Metaspace로 대체되었다.
Metaspace는 런타임 시 메모리 요구사항에 따라 자체 크기를 조정하며, 필요하다면 MaxMetaspaceSize 매개변수를 설정하여 Metaspace의 양을 조절할 수 있다.
이외 변경사항은 다음과 같다.
- Annotation on Java Types
- Unsigned Integer 계산
- Repeating Annotation
- static Link JNI Library
32 비트를 지원하는 마지막 공식 Java 버전으로, 이후 버전의 32비트 지원은 오직 서드파티를 통해서만 지원된다.
'Language > Java' 카테고리의 다른 글
[Java] Java 11 특징 (0) | 2023.04.13 |
---|---|
[Java] Java 9 특징 (0) | 2023.04.13 |
[Java] 숫자형 스트림 (0) | 2023.04.11 |
[Java] 스트림 연산 (0) | 2023.04.07 |
[Java] HttpServlet (0) | 2023.04.06 |
댓글
이 글 공유하기
다른 글
-
[Java] Java 11 특징
[Java] Java 11 특징
2023.04.13 -
[Java] Java 9 특징
[Java] Java 9 특징
2023.04.13 -
[Java] 숫자형 스트림
[Java] 숫자형 스트림
2023.04.11 -
[Java] 스트림 연산
[Java] 스트림 연산
2023.04.07