개요
컬렉션 프레임워크를 사용하다 보면 List를 배열로 변환해야 하는 경우가 종종 있습니다.
예를 들어, 특정 API가 배열을 요구하거나 배열 기반의 연산이 필요할 때가 이에 해당합니다. 특히 Java에서는 프리미티브 타입 배열(int[], double[] 등)과 레퍼런스 타입 배열(Integer[], String[] 등)을 명확히 구분해야 합니다.
List ➡️ 프리미티브 타입 배열로 변환하기 (int[], double[] 등)
프리미티브 타입 배열로 변환할 때는, List의 요소를 하나씩 언박싱(unboxing)하여 배열에 저장해야 합니다.
[TIL, 일일 회고] 2024.11.18 - 박싱(Boxing)과 언박싱(UnBoxing)
개요Java 개발을 하다 보면 기본 데이터 타입(primitive type)과 객체형 래퍼 클래스(wrapper class) 간의 변환 과정을 자주 만나게 됩니다. 이를 박싱(Boxing)과 언박싱(Unboxing)이라고 합니다. 이번 글
pixx.tistory.com
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 |