Java에서 List
를 배열로 바꾸는 방법은 List
클래스에 있는 toArray()
메소드를 사용하는 것입니다. 구체적인 방법을 아래처럼 정리해 보았습니다.
toArray()
사용해 Object 배열 변환이 방법은 Object 배열을 반환합니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Integer 리스트 생성
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// List를 배열로 변환
Object[] array = list.toArray();
for (Object obj : array) {
System.out.println((String) obj);
}
}
}
다만 이 방법을 사용할 때는 Object 배열로 변환하기 때문에, 변환한 배열에서 요소를 사용할 때 원하는 타입으로 다시 형변환이 필요합니다.
예시: Object 배열의 요소를 Integer로 변환해 사용
// array라는 이름으로 받은 Object 배열에서 요소를 꺼내 Integer로 변환해서 출력
for (Object obj : array) {
Integer number = (Integer) obj;
System.out.println(number);
}
toArray()
사용해 타입이 지정된 배열로 변환이 방법은 지정한 타입의 배열을 반환합니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// List를 String 배열로 변환
String[] array = list.toArray(new String[0]);
for (String s : array) {
System.out.println(s);
}
}
}
타입이 지정된 배열로 변환된 경우, 형변환 없이 사용할 수 있다는 장점이 있습니다. 하지만 다시 형변환을 거쳐야하는 경우도 있는데요. List<Integer>
를 int[]
배열로 변환해서 사용해야 하는 경우입니다.
이 경우에는 먼저 List<Integer>
를 Integer[]
로 변환한 다음, 이 Integer[]
를 int[]
로 다시 한 번 변환하는 과정을 거쳐야 합니다. Java에서 기본 타입(int)과 래퍼 클래스(Integer) 사이의 차이 때문에 필요합니다.
🔎 래퍼 클래스
래퍼 클래스는객체
입니다. new 키워드를 사용해서 생성되거나 자동 박싱으로 만들 수 있습니다. 기본 타입보다 더 많은 메모리를 쓴다는 단점이 있지만, Integer의 경우 숫자 데이터를 편하게 처리하도록 도와주는 메소드들을 제공한다는 장점이 있습니다. (Integer.parseInt(), Integer.toString() 등)🔎 기본 타입
반면, 기본 타입은메모리에 실제 값을 저장
합니다. 객체가 아니기 때문에 메소드 호출이나 참조는 불가능합니다. 래퍼 클래스로 자동 형변환이 가능한데 이를Auto-boxing
이라고 합니다.
List<T>
는 Java가 제공하는 제네릭 기능을 사용하기 때문에 기본 타입을 직접 사용할 수 없고, 대신 래퍼 클래스를 사용해야 합니다. 즉, List는 int 대신 Integer를 사용하며, 이를 배열로 변환할 때는 Integer 배열을 거쳐 int 배열로 변환이 가능하게 됩니다.
🔎 제네릭
- Java에서 컴파일 시 타입 안정성을 높이기 위해 도입한 기능
- 클래스나 메소드 정의시 타입 매개변수
<T>
를 사용해서 코드 호출시 데이터 타입을 지정할 수 있음- 기본 타입은 제네릭 타입으로 사용할 수 없고 래퍼 클래스만 사용 가능
아래는 List<Integer>
를 int[]
로 변환하는 예시입니다.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
// List<Integer>를 Integer[]로 변환
Integer[] integerArray = list.toArray(new Integer[0]);
// Integer[]를 int[]로 변환
int[] intArray = new int[integerArray.length];
for (int i = 0; i < integerArray.length; i++) {
intArray[i] = integerArray[i]; // 자동으로 언박싱
}
}
}
Java 8 이상에서는 스트림을 사용하여 한 줄로 변환할 수 있습니다.
int[] intArray = list.stream().mapToInt(Integer::intValue).toArray();
이 방법은 리스트를 스트림으로 변환하고, 각 요소를 int
로 변환한 다음 int[]
로 변환하는 과정입니다. 간결하지만 경우에 따라 코드가 직관적이지 않아 가독성이 떨어질 수 있습니다.
🔎 스트림
스트림은 Java에서 데이터를 처리하기 쉽게 제공하는 파이프라인입니다. 데이터를 차례대로 흘려보내면서 필터링, 변환, 계산 등을 쉽게 할 수 있게 도와주는 기능을 제공합니다. 특히, 리스트나 배열 같은 데이터 모음을 쉽게 다루는 데 유용합니다.
toArray()
를 사용해서 Object 배열로 받은 후 원하는 타입으로 형변환해서 사용toArray()
를 사용해서 변환할 때 타입을 직접 지정해서 원하는 배열로 변환stream()
을 사용해서 각 요소를 기본 타입으로 변환 후 toArray()
를 사용해 요소를 모아서 배열로 변환