BackEnd/자바 개념스터디

LIST의 .toArray() 메서드

Leo.K 2023. 6. 5. 17:02

평상시에 코드를 개발하던 중 인텔리제이에서 자주 보이는 경고에 대해 자세히 알아보았다. 
List 컬렉션은 정말 없으면 안 될 정도로 실무에서도 많이 사용을 하는데, 해당 컬렉션을 배열 형태로 바꾸어 사용하고자 할 때, toArray()메서드를 자주 사용한다. 리스트의 요소 타입이 Integer나 String 같은 기본 Wrapper 타입이라면 단순하게 Stream을 활용해 변환할 수 있겠지만, 개인적으로 만든 클래스 객체의 인스턴스에 대해서는 캐스팅의 문제로 불가능하다.
그래서 결론적으로 toArray를 많이 사용하게 된다. 

상식적으로 생각했을 때, 리스트를 배열로 전환하려면 리스트의 요소 개수 만큼 배열의 크기를 지정해야 하기 때문에 리스트의 사이즈 만큼 지정하면 매번 아래와 같은 경고가 발생하여 의문이 들어서 파악해보기로 했다.

Src>
goodsFilterSet = filterSetList.toArray(new FilterSet[filterSetList.size()]);

Alert>
Call to 'toArray()' with pre-sized array argument 'new FilterSet[filterSetList.size()]'

 

toArray() 메서드의 대한 핵심을 요약해서 알아보자

  1. toArray 메서드에 인자로 넘어가는 배열 객체의 크기와 동일한 크기로 리스트를 배열로 전환한다. 
  2. 단, 해당 리스트의 크기가 인자로 넘어간 배열 객체의 사이즈 보다 큰 경우 자동으로 더 큰 리스트의 크기로 배열이 만들어진다. 
  3. 반대로 해당 리스트의 크기가 인자로 넘어가는 배열객체의 크기보다 작을 때는, 인자로 넘어가는 배열 객체의 크기 만큼 배열이 만들어진다. 

아래의 예시 코드와 결과를 확인해보자. 

ArrayList<String> testList = new ArrayList<>();

testList.add("1");
testList.add("2");
testList.add("3");

/** 리스트의 크기가 인자로 넘어온 배열보다 큰 경우   : 3 > 0 **/
String [] testArr = testList.toArray(new String[0]);
System.out.println("testArr.length = " + testArr.length);


/** 리스트의 크기가 인자로 넘어온 배열보다 작은 경우 : 3 < 5 **/
testArr = testList.toArray(new String[5]);
System.out.println("testArr.length = " + testArr.length);


Result >>>>>
Big testArr.length = 3
Small testArr.length = 5

 

결론

  1. 동적으로 크기를 할당해주기 때문에 실제 사이즈를 입력할 필요가 없이 0 으로 크기를 잡아도 된다.

'BackEnd > 자바 개념스터디' 카테고리의 다른 글

자바 컬렉션 프레임워크  (0) 2022.04.23