Java

[Java] Java 11 특징

kittity 2025. 1. 30. 16:28

Java 11은 2018년 9월에 출시된 LTS(Long Term Support) 버전으로 Java 11에서 추가된 기능과 특징에 대해 정리해보고자한다. 주요 특징에 대해 정리하면 다음과 같다.

  1. Collection Factory Method 강화
  2. var 키워드 추가
  3. 문자열 관련 Method 추가
  4. Reactive Stream
  5. ZGC(Z Garbage Collector) 추가

위의 항목을 하나씩 살펴보자.

 

1. Collection Factory Method 강화

  • Java9에서 도입된 기능이 강화되었다.
  • List, Set, Map과 같이 컬렉션을 생성할 수 있는 factory method를 사용할 수 있다.
  • of()를 통해 예시와 같이 생성 가능하며, 이때 생성 된 것은 불변하다.
  • 참고)
    • 불변 List에 추가/삭제 작업을 하려면 new ArrayList<>(list) 를 사용해야한다.
    • 불변 List에 add(), remove() 등 수정 작업을 시도하면 UnsupportedOperationException이 발생한다.
  • 예시
    // immutable (불변)
    Set<String> set = Set.of("A", "B", "C");
    List<String> list = List.of("A", "B", "C");
    Map<String, String> map = Map.of(
                                    "A", "Apple", 
                                    "B", "Banana",
                                    "C", "Coconut"
                                    );
    // 불변을 변하게
    Set<String> setResult = new HashSet<>(set);
    List<String> listResult = new ArrayList<>(list);
    Map<String, String> mapResult = new HashMap<>(map)
    map.put("D", "Donut");

 

2. var 키워드 추가

  • 로컬 변수의 타입 명시 없어도 추론 가능한 var 키워드가 추가되었다.
  • 단, 멤버 변수 또는 Method 파라미터로는 선언이 불가능하다.

 

3. 문자열 관련 Method 추가

  • 문자열을 다루는 Method가 새로 추가되었다.
  • 추가된 Method
    • isBlank() : 문자열이 비어있거나, 공백이면 True 반환
      • 비교) isEmpty()는 공백일때는 False 반환 ex) “ “
    • lines(): 줄 단위로 나뉘어 있는 문자를 배열로 반환
    • strip(): 문자열 공백 제거
    • stripLeading(): 문자열 앞의 공백 제거
    • stripTrailing(): 문자열 뒤의 공백 제거
    • repeat(): 문자열을 파라미터로 주어진 횟수만큼 반복
  • 예시
    public static void isBlankMethod() {
       "".isBlank();    // true
       "HN".isBlank();  // false
    }
    
    public static void linesMethod() {
       "Apple\nBanana\nCoconut".lines().toArray();  // [Apple, Banana, Coconut]
    }
    
    public static void stripMethod() {
       " HN ".strip();         // HN
       " HN ".stripLeading();  // HN 
       " HN ".stripTrailing(); //  HN
    }
    
    public static void repeatMethod() {
       "HN ".repeat(3); // HN HN HN 
    }

 

4. Reactive Stream

  • Reactive Stream은 비동기로 데이터 스트림을 처리하는 방식이다.
  • Publisher-Subscriber 모델 구현하였다.
  • 데이터를 소비하는 쪽에서 처리할 수 있는 만큼만 데이터를 요청하는 Back Pressure를 통해 데이터 흐름 제어가 가능하다.
  • Non-Blocking 방식으로 데이터를 처리한다.

 

5. ZGC(Z Garbage Collector) 추가

  • 대용량 힙 메모리를 효율적으로 처리하기 위해 설계된 확장 가능한 저지연 가비지 컬렉터이다.
  • GC로 인한 애플리케이션 중단 시간(Stop-the-world)로 인한 성능 저하를 개선하기 위해 추가되었으며 10ms 이내로 유지한다.
  • 8MB ~ 16TB 의 힙메모리를 지원한다.
  • GC 작업을 병렬 처리로 동시에 처리가 가능해 성능이 향상되었다.
  • 사용 예시
    java -XX:+UseZGC -jar DemoApplication.java


 

728x90