ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 10. 주요 변경 내용
    BackEnd/Java 2024. 12. 5. 23:00
    반응형

    var

      지역 변수의 타입을 추론하는 새로운 예약어가 등장했습니다.

    var num = 3;
    num = 10;    // 가변 변수이기에 값을 변경할 수 있습니다.
    num = "ABC"; // Error !! 한 번 값이 추론되면 그 이후에 다른 타입의 값은 넣을 수 없습니다.
    var list = List.of(1, 2, 3);
    
    var map = Map.of("A", "B"); // Map<String, String> map

     

      var 예약어는 if나 while 처럼 '키워드'가 아니기 때문에 변수 이름으로도 사용이 가능합니다. 기존 코드와의 호환성을 가지기 위함입니다.

    var var = 3;

     

      var는 타입을 추론하는 예약어이기 때문에 값이 없거나 null이면 안됩니다. 또한, 람다식 혹은 배열 타입은 추론할 수 없습니다.

    var num;                                     // Error !!
    var a = null;                                // Error !!
    var b = (String s) -> System.out.println(s); // Error !!
    var c = {"A", "B", "C"};                     // Error !!

     

      다이아몬드 연산자와 var을 함께 사용하면, <Object>로 간주합니다.

    // ArrayList<Object>로 간주합니다.
    var nums = new ArrayList<>();

     

    copyOf()

      copyOf() 메소드는 List / Set / Map의 원본 컬렉션을 깊게 복사합니다.

      public static void copyOfExample() {
        List<Integer> oldNums = new ArrayList<>();
        oldNums.add(1);
        oldNums.add(2);
        
        List<Integer> newNums = List.copyOf(oldNums);
        
        oldNums.add(3);
        
        oldNums.forEach(x -> System.out.println("old : " + x)); // 1, 2, 3
        newNums.forEach(x -> System.out.println("new : " + x)); // 1, 2
      }

     

      Collections.unmodifiableXXX() 와는 다릅니다. Collections.unmodifiableXXX()는 View 처럼 동작합니다.

      public static void unmodifiableExample() {
        List<Integer> oldNums = new ArrayList<>();
        oldNums.add(1);
        oldNums.add(2);
        
        List<Integer> newNums = Collections.unmodifiableList(oldNums);
        
        oldNums.add(3);
        
        oldNums.forEach(x -> System.out.println("old : " + x)); // 1, 2, 3
        newNums.forEach(x -> System.out.println("new : " + x)); // 1, 2, 3
      }

     

    Collectors.toUnmodifiableXXX()

      해당 메서드를 사용하면 스트림의 결과를 안전하게 불변 컬렉션으로 변환할 수 있습니다. 이는 데이터의 무결성을 보장하고 예기치 않은 수정을 방지할 수 있습니다. List, Set, Map 모두 존재합니다.

    List<Integer> list = Stream.of(1, 2, 3, 4, 5)
      .filter((x) -> x % 2 == 0)
      .collect(Collectors.toUnmodifiableList());

     

    orElseThrow()

      Optional에 추가된 API로, 매개변수 없이 사용할 수 있습니다. NoSuchElementException이 발생합니다.

      public static void main(String[] args) {
        Optional.ofNullable(3)
            .orElseThrow();
      }
    반응형

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

    Java 12. preview feature  (0) 2024.12.07
    Java 11. 주요 변경 내용  (2) 2024.12.06
    Java 9. 주요 변경 내용 (2)  (0) 2024.12.04
    Java 9. 주요 변경 내용 (1)  (0) 2024.12.03
    Java 9. JPMS  (0) 2024.12.02

    댓글

Designed by Tistory.