카테고리 없음

[Java] Arrays.asList vs new ArrayList

LeeBorn 2022. 9. 7. 08:00
반응형

자바

java에서 리스트로 만들 때 자주 사용하는 Arrays.asList() 

아래와 같이 사용할 수 있다.

    @Test
    void asListTest(){
        List<String> list = Arrays.asList("test1", "test2", "test3");

        // todo

        list.forEach(System.out::println);
    }

출력은 기대한 것과 같이 3개의 문자열을 출력한다.

출력 결과 1

 

여기서 list에 하나의 문자열을 추가해보면 기대와는 다른 결과를 확인할 수 있다.

    @Test
    void asListTest(){
        List<String> list = Arrays.asList("test1", "test2", "test3");
        
        list.add("test4");

        list.forEach(System.out::println);
    }

실행을 하면 아래와 같은 에러를 확인할 수 있다.(UnsupportedOperationException)

출력 결과 2

 

여기서 Arrays.asList의 설명을 보면 아래와 같이 기술되어 있다.

/**
 * Returns a fixed-size list backed by the specified array.
 * ...
 */
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

고정된 크기의 리스트를 반환한다고 되어 있다.

그리고 반환하는 new ArrayList<>(a)를 따라가 보면 Arrays 클래스 내부에 구현된 ArrayList를 볼 수 있다.

Arrays 내부의 ArrayList

그리고 해당 ArrayList에는 add()가 구현되어 있지 않아서 UnsupportedOperationException을 발생시킨다.

 

다음으로 List를 new ArrayList<>() 로 생성한 뒤 따라가 보면 ArrayList 클래스로 도착한다.

List<String> arrayList = new ArrayList<>();

ArrayList 클래스

 

결국 List라는 형태를 반환하지만, 서로 다른 동작을 하기 때문에 용도에 맞춰 사용을 해야 한다.

 

- 위 작성된 글에는 잘못된 부분이 있을 수 있습니다. 알려주시면 수정하겠습니다.

※ info
IDE : IntelliJ IDEA 2022.2 (Ultimate Edition)
Java : openjdk 11
OS : Windows 10 Pro
반응형