자바(SE)

[JDK] 버전별 특징 - JDK10

은서파 2023. 5. 22. 09:18

이번 포스트에서는 JDK10에 추가된 특징을 살펴보자.

 

JDK 10

 

로컬 변수에 var 타입 적용

local 변수를 선언할 때 var 키워드를 사용할 수 있게 되었다.  이때 var 키워드를 사용하면 변수에 타입을 명시적으로 선언하지 않아도 컴파일러가 변수의 초기값을 통해 타입을 유추한다.할당되는 값에 따라 타입이 추정된다. 특히 제네릭 타입과 깉이 복잡한 타입의 선언을 간소화 하는데 유용하다.

public class LocalVar {
    public void method(){
        var msg = "Hello";
        System.out.println(msg.length());
    }
}

참고로 javascript의 var 처럼 할당되는 변수의 타입을 바꿀 수 있는 만행은 허용되지 않는다.(여전히java는 strongly typed language이다.)

 

Unmodifable Collections 작성 강화

List와 Set에 기존의 배열을 복사해 와서 수정 없이 사용하기 위한 copyOf 메서드가 추가되었다. 만약 값을 수정하거나 새로운 요소를 추가하는 경우 UnsupportedOperationException이 발생한다.

@Test
@DisplayName("기존 Collection을 복사해서 수정 불가한 List, Set 생성 가능")
public void test1() {
    List<Integer> preList = List.of(1, 2, 3, 4, 5);

    List<Integer> copyList = List.copyOf(preList);
    UnsupportedOperationException e2 = assertThrows(UnsupportedOperationException.class, ()->{
        // 새로운것 추가하면 안됨
        copyList.add(4);
    });

    UnsupportedOperationException e3 = assertThrows(UnsupportedOperationException.class, ()->{
        // 요소를 바꾸는 것도 안됨
        copyList.set(1, 100);
    });
}

참고로 immutable과 unmodifable은 다르다. immutable은 내용은 변경할 수 있지만 unmodifable은 내용까지 그냥 읽기 전용이다.