Array가 있고 ArrayList가 있고 List가 있다.
쉽지않다.
StringBuilder로 문자열을 동적으로 조작하는건 익혔다.
배열은 쉽지가 않았다.
List<type> name = new ArrayList<>(); 로 ArrayList를 생성하는건 알았다.
그런데 다시 배열로 돌려보낼 때 단순 toArray()를 사용하는것이 아니라
toArray(new type[0]); 을 사용하더라.
왜 크기가 0인 배열을 전달하는지 도저히 이해가 안되어서 GPT형님의 도움을 받았다.
단계별 설명
- 배열 크기 확인:
- new String[0] 배열을 전달했기 때문에, 이 배열의 크기는 0입니다.
- resultList.size()는 3입니다.
- 따라서 new String[0] 배열의 크기는 resultList.size()보다 작습니다.
- 새 배열 생성 및 요소 복사:
- toArray 메서드는 resultList.size()와 동일한 크기(3)의 새로운 배열을 생성합니다.
- resultList의 요소들을 이 새로운 배열에 복사합니다.
- 배열 반환:
- 요소들이 복사된 새로운 배열이 반환됩니다.
- answer는 이제 {"hello", "world", "java"}를 담고 있는 배열이 됩니다.
요약
- new String[0]을 전달하면, toArray 메서드는 resultList의 크기에 맞춰 새로운 배열을 생성하고, 그 배열에 요소들을 복사합니다.
- 이는 타입 안정성을 제공하며, 필요한 경우 자동으로 적절한 크기의 배열을 생성하는 유연성을 가집니다.
라고 한다.
결국 정적인 자바 특성때문에 명시적으로 타입을 지정해주기 위해 사용하는거였다.
어차피 크기가 0인 배열을 toArray메소드에 전달해도 알아서 ArrayList.size의 크기로 반환해주니까...
이것까지 지정해줘야해? 싶지만서도 진짜 코드로 뭔가를 구현하는 느낌이라 재미는 있는것같다.
그럼에도 불구하고 아직
배열, List, ArrayList와 기본 타입 배열, 기본 타입 ArrayList 너무 종류가 많아 헷갈린다.
collection 클래스에도 익숙해져야할텐데 갈길이 진짜 멀다.
'java' 카테고리의 다른 글
System.arraycopy vs Arrays.copyOfRange (0) | 2024.06.27 |
---|---|
내 마음의 위험한 배열 (0) | 2024.06.27 |
자바 타입 확인 메소드 (0) | 2024.06.21 |
자바를 공부하며 (0) | 2024.06.21 |
valueof가 뭘까 (0) | 2024.06.20 |