이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Java] Java 8 특징

  • 2023.04.13 17:18
  • Language/Java
글 작성자: SeoArc

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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [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
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • 자바
  • algorithm
  • java
  • network
  • graph
  • 그래프
  • 네트워크

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바