[Java] 배열을 리스트로 변경

Henson·2024년 11월 8일

Java

목록 보기
22/22
post-thumbnail

배열을 리스트로 변경

List.of()

Integer[] intArr = {1, 2, 3, 4};
//List<Integer> intList = new ArrayList<>(intArr);	// 불가능(생성자 인자로 Collection 타입만 들어 올 수 있음)
List<Integer> intList = List.of(intArr);

Java에서는 위와 같이 List.of() 메서드로 배열을 리스트로 변경할 수 있다. 하지만 List.of() 메서드로 생성한 리스트는 불변 객체이기 때문에, 수정 및 추가, 삭제가 불가능하다.

따라서, 배열에서 리스트로 전환한 리스트를 수정 및 추가, 삭제가 필요하다면 가변 객체로 전환해야 되는데, 불변 컬렉션을 가변 컬렉션으로 전환하는 방법을 통해 가변 객체로 전환할 수 있다.

※ 참고로 List.of()의 인자로는 Integer[]와 같이 래퍼 클래스 배열을 사용해야 된다. 컬렉션 프레임워크는 기본적으로 제네릭 타입이기 때문에, int[] 기본형 배열을 사용해서는 안된다.

Arrays.asList()

Integer[] intArr = {1, 2, 3};
List<Integer> intList = Arrays.asList(intArr);

List.of() 메서드말고도, Arrays.asList()를 통해서도 배열을 리스트로 변경할 수 있다. 하지만 Arrays.asList()로 생성된 리스트는 불변 객체도 아니고 가변 객체도 아닌 애매한 객체가 생성된다.

set() 메서드를 통해 리스트 안의 값을 변경할 수 있지만, add()remove()와 같이 리스트의 size를 변경하는 메서드를 사용할 경우에 예외가 발생한다.

그리고 Arrays.asList()로 생성된 리스트는 위의 코드의 intArr와 같은 배열 객체의 참조값을 그대로 사용하여, 리스트로 변경하기 때문에, 생성한 리스트에서 값을 변경하게 되면, intArr 배열 안에 있는 값도 같이 변경된다. 이로 인해 사이드 이펙트와 같은 문제가 발생할 수 있으므로 주의해서 사용해야 된다.

정리

정리해보자면, Java의 배열을 리스트로 변경하고 싶다면, 불변 객체로 리스트를 생성해주는 List.of() 메서드를 사용하는 것이 안정적이다.

다만, 매우 큰 데이터를 가진 배열을 리스트로 변경하려면 기존의 배열의 참조값을 사용하는 Arrays.asList()를 사용하는 방법도 고려해보면 좋을 것 같다. (단, 사이드 이펙트와 같은 문제가 발생할 수 있기 때문에 이 부분에 대해서는 주의해야 한다.)

profile
세계 최고의 개발자가 되고 말겠어.

0개의 댓글