728x90
개요
컬렉션 프레임워크를 사용하다 보면 List를 배열로 변환해야 하는 경우가 종종 있습니다.
예를 들어, 특정 API가 배열을 요구하거나 배열 기반의 연산이 필요할 때가 이에 해당합니다. 특히 Java에서는 프리미티브 타입 배열(int[], double[] 등)과 레퍼런스 타입 배열(Integer[], String[] 등)을 명확히 구분해야 합니다.
List ➡️ 프리미티브 타입 배열로 변환하기 (int[], double[] 등)
프리미티브 타입 배열로 변환할 때는, List의 요소를 하나씩 언박싱(unboxing)하여 배열에 저장해야 합니다.
Java의 기본 List는 프리미티브 타입을 직접 지원하지 않기 때문에, List<Integer>와 같은 형태에서 int[]로 변환이 필요합니다.
방법 1 : 반복문 사용
가장 기본적인 방법은 for 반복문을 사용하는 것입니다. 각 요소를 순회하며 배열에 값을 직접 할당합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i); // Integer -> int 언박싱
}
- 장점: Java의 가장 기본적인 기능만 사용하므로 버전 제한 없이 동작
- 단점: 코드가 다소 장황할 수 있음.
방법 2 : Java 8 Stream API 활용
Java 8 이상에서는 Stream API를 이용하여 더욱 간결하게 변환할 수 있습니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int[] result = list.stream().mapToInt(i -> i).toArray();
- mapToInt(i -> i)는 Integer를 int로 언박싱.
- toArray()를 통해 최종적으로 int[]를 반환.
- 장점: 코드가 간결하며 읽기 쉬움.
- 단점: Java 8 이상에서만 사용 가능.
List ➡️ 레퍼런스 타입 배열로 변환하기 (Integer[], String[] 등)
레퍼런스 타입 배열로 변환할 경우, List에서 제공하는 toArray() 메서드를 사용하면 간단히 처리할 수 있습니다.
방법 1. toArray(T[]::new) 사용
Java 8 이상에서는 배열 생성기를 사용할 수 있습니다. 이를 통해 배열의 크기를 자동으로 맞추며 타입 안정성을 보장합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Integer[] result = list.toArray(Integer[]::new);
- 장점: Java 8 이상의 최신 방식으로 간결.
- 단점: Java 8 이상에서만 사용 가능.
방법 2: 기존 toArray(T[]) 메서드 사용
Java 7 이하에서도 동작하는 전통적인 방법으로, 빈 배열을 전달하여 변환합니다.
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Integer[] result = list.toArray(new Integer[0]);
- new Integer[0]는 배열의 크기를 동적으로 맞추기 위해 사용.
- 장점: Java 7 이하에서도 사용 가능.
- 단점: 빈 배열 생성 과정이
직관적이지 않을 수 있음.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.11.29 - CS 간단 정리 : TCP와 UDP 차이 (0) | 2024.11.29 |
---|---|
[TIL, 일일 회고] 2024.11.28 - CS 간단 정리 : HTTP와 HTTPS 차이 (2) | 2024.11.28 |
[TIL, 일일 회고] 2024.11.26 - Udemy 동영상이 안보일 때 해결방법 (0) | 2024.11.26 |
[TIL, 일일 회고] 2024.11.25 - Interactive vs Non-Interactive Shell 알아보기 (0) | 2024.11.25 |
[TIL, 일일 회고] 2024.11.23 - 이진수에서 마지막 비트 확인: 나머지 연산 vs 비트 연산 (0) | 2024.11.23 |