[Java] List를 배열로 바꾸는 방법

jina·2024년 8월 25일
0

Java

목록 보기
9/10
post-custom-banner

Java에서 List를 배열로 바꾸는 방법은 List 클래스에 있는 toArray() 메소드를 사용하는 것입니다. 구체적인 방법을 아래처럼 정리해 보았습니다.

방법 1: 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);
        }

방법 2: 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]; // 자동으로 언박싱
        }
    }
}

방법 3. (Java 8 이상) stream()으로 각 요소를 기본형으로 변환 후 toArray()를 사용해 배열로 변환

Java 8 이상에서는 스트림을 사용하여 한 줄로 변환할 수 있습니다.

int[] intArray = list.stream().mapToInt(Integer::intValue).toArray();

이 방법은 리스트를 스트림으로 변환하고, 각 요소를 int로 변환한 다음 int[]로 변환하는 과정입니다. 간결하지만 경우에 따라 코드가 직관적이지 않아 가독성이 떨어질 수 있습니다.

🔎 스트림
스트림은 Java에서 데이터를 처리하기 쉽게 제공하는 파이프라인입니다. 데이터를 차례대로 흘려보내면서 필터링, 변환, 계산 등을 쉽게 할 수 있게 도와주는 기능을 제공합니다. 특히, 리스트나 배열 같은 데이터 모음을 쉽게 다루는 데 유용합니다.

정리

  1. toArray()를 사용해서 Object 배열로 받은 후 원하는 타입으로 형변환해서 사용
  2. toArray()를 사용해서 변환할 때 타입을 직접 지정해서 원하는 배열로 변환
  3. stream()을 사용해서 각 요소를 기본 타입으로 변환 후 toArray()를 사용해 요소를 모아서 배열로 변환
profile
오늘의 기록은 내일의 보물
post-custom-banner

0개의 댓글