Java Integer List 를 Int Array 로 변환하기

JavaBeginner
지금 연습하기

소개

이 랩에서는 Java 에서 Integer List 를 int Array 로 변환하는 과정을 안내합니다. List 에 데이터를 수집한 후 기본 배열 (primitive array) 로 작업해야 할 때 Java 프로그래밍에서 흔히 사용되는 작업입니다.

이 변환을 수행하기 위해 두 가지 다른 접근 방식을 살펴볼 것입니다.

  1. Java 의 Stream API 와 stream.mapToInt() 메서드 사용
  2. Apache Commons Lang 의 ArrayUtils.toPrimitive() 메서드 사용

이 랩을 마치면 두 가지 방법 모두 이해하고 자체 Java 애플리케이션에 적용할 수 있게 됩니다.

실험을 위한 Java 클래스 생성

이 첫 번째 단계에서는 변환 방법을 시연하기 위해 Java 클래스를 생성합니다. Maven 을 사용하여 종속성 (dependency) 과 프로젝트 구조를 관리합니다.

  1. 먼저, 프로젝트 디렉토리에 있는지 확인합니다.
cd /home/labex/project
  1. Maven 소스 디렉토리에 새 Java 파일을 생성합니다.
cd src/main/java
Create Java File
  1. 다음 내용으로 IntegerListToIntArray.java를 생성합니다.
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;

public class IntegerListToIntArray {
    public static void main(String[] args) {
        System.out.println("Converting Integer List to int Array Demo");
        System.out.println("---------------------------------------");

        // We'll add our code here in the following steps
    }
}
  1. Maven 을 사용하여 코드를 컴파일합니다.
cd /home/labex/project
mvn compile
  1. 프로그램을 실행하여 작동하는지 확인합니다.
mvn exec:java

콘솔에 헤더 텍스트가 출력되는 것을 볼 수 있습니다. 오류가 없으면 다음 단계로 이동할 준비가 된 것입니다.

Integer List 생성 및 채우기

이 단계에서는 Integer List 를 생성하고 몇 개의 숫자를 추가합니다. 코딩을 시작하기 전에 이 변환이 왜 필요한지 이해해 보겠습니다.

Integer List 와 int Array 간 변환이 필요한 이유

Java 에서는 숫자로 작업하는 두 가지 방법이 있습니다.

  1. 기본 타입 (int):

    • 숫자만 저장하는 기본 숫자 타입
    • 메모리를 덜 사용
    • List 와 같은 컬렉션에서 직접 사용할 수 없음
    • 예시: int x = 5;
  2. 래퍼 클래스 (Integer):

    • 숫자를 포함하는 객체
    • List 와 같은 컬렉션에서 사용할 수 있음
    • 추가적인 메서드와 기능을 가짐
    • 예시: Integer x = 5;

우리는 종종 List 에 숫자를 수집합니다 (이 경우 Integer가 필요함). 하지만 일부 메서드는 더 나은 성능을 위해 기본 int 배열이 필요합니다. 이것이 바로 두 타입 간 변환이 필요한 이유입니다.

Java 코드 업데이트

IntegerListToIntArray.java 파일을 수정하여 숫자 목록을 생성하고 표시해 보겠습니다.

  1. 프로젝트 디렉토리에 있는지 확인합니다.
cd /home/labex/project
  1. src/main/java/IntegerListToIntArray.java를 열고 기존 print 문 뒤의 main 메서드 안에 다음 코드를 추가합니다.
// Create a List of Integer objects
List<Integer> integerList = new ArrayList<>();

// Add some numbers to the list
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);

// Display the list contents
System.out.println("Original Integer List:");
for (Integer num : integerList) {
    System.out.print(num + " ");
}
System.out.println("\n");
Add numbers to the list
  1. 프로그램을 컴파일하고 실행합니다.
mvn compile
mvn exec:java

다음과 유사한 출력을 볼 수 있습니다.

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

이 출력은 Integer List 를 성공적으로 생성하고 숫자로 채웠음을 확인합니다. 다음 단계에서는 이 목록을 기본 int 배열로 변환하는 방법을 배우겠습니다.

Stream API 를 사용하여 List 를 Array 로 변환

이 단계에서는 Java 의 Stream API 를 사용하여 Integer List 를 int 배열로 변환하는 첫 번째 방법을 배우겠습니다. Stream API 는 데이터 컬렉션을 처리하는 현대적이고 효율적인 방법을 제공합니다.

Java Stream 이해하기

Java 의 Stream 은 데이터를 단계별로 처리할 수 있는 파이프라인과 같습니다.

  • 소스 (List) 에서 데이터를 가져옵니다.
  • 데이터를 처리합니다 (Integer 를 int 로 변환).
  • 결과를 수집합니다 (배열로).

변환 코드 추가

  1. 프로젝트 디렉토리에 있는지 확인합니다.
cd /home/labex/project
  1. src/main/java/IntegerListToIntArray.java를 열고 목록 생성 코드 뒤에 다음 코드를 추가합니다.
// Method 1: Using Stream API
System.out.println("Converting using Stream API:");

// Convert Integer List to int array using Stream
int[] intArrayUsingStream = integerList.stream()    // Create a stream from the list
                                     .mapToInt(Integer::intValue)  // Convert Integer to int
                                     .toArray();    // Collect results into an array

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingStream) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. 프로그램을 컴파일하고 실행합니다.
mvn compile
mvn exec:java

다음과 같은 출력을 볼 수 있습니다.

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

코드 이해하기

변환이 어떻게 작동하는지 자세히 살펴보겠습니다.

  1. integerList.stream() - 목록에서 스트림을 생성합니다.
  2. .mapToInt(Integer::intValue) - 각 Integer 를 int 로 변환합니다.
  3. .toArray() - 모든 int 값을 배열로 수집합니다.

Integer::intValue는 메서드 참조 (method reference) 라고 합니다. 이는 number -> number.intValue()를 간결하게 작성하는 방법입니다.

ArrayUtils 를 사용하여 List 를 Array 로 변환

이 단계에서는 Apache Commons Lang 라이브러리의 ArrayUtils 클래스를 사용하여 목록을 변환하는 두 번째 방법을 배우겠습니다. 이 방법은 더 간단하며 초보자에게 이해하기 쉬울 수 있습니다.

ArrayUtils 이해하기

ArrayUtils 클래스는 배열로 작업하기 위한 많은 유용한 메서드를 제공합니다. toPrimitive() 메서드는 특히 래퍼 타입 (예: Integer) 에서 기본 타입 (예: int) 으로 변환하는 데 도움이 됩니다.

ArrayUtils 변환 코드 추가

  1. Stream API 코드 뒤에 있는 IntegerListToIntArray.java 파일에 이 코드를 추가합니다.
// Method 2: Using ArrayUtils
System.out.println("Converting using ArrayUtils:");

// First convert List<Integer> to Integer[]
Integer[] intermediateArray = integerList.toArray(new Integer[0]);

// Then convert Integer[] to int[]
int[] intArrayUsingArrayUtils = ArrayUtils.toPrimitive(intermediateArray);

// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingArrayUtils) {
    System.out.print(value + " ");
}
System.out.println("\n");
  1. 프로그램을 컴파일하고 실행합니다.
mvn compile
mvn exec:java

이제 출력에서 두 가지 변환 방법을 모두 볼 수 있습니다.

Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

Converting using Stream API:
Converted int Array:
1 2 3 4 5

Converting using ArrayUtils:
Converted int Array:
1 2 3 4 5

코드 이해하기

ArrayUtils 메서드는 두 단계로 작동합니다.

  1. integerList.toArray(new Integer[0]) - List 를 Integer 객체의 배열로 변환합니다.
  2. ArrayUtils.toPrimitive() - Integer 배열을 int 배열로 변환합니다.

이 방법은 더 간단하지만 Apache Commons Lang 라이브러리가 필요합니다.

요약

이 Lab 에서는 Java 에서 Integer List 를 int Array 로 변환하는 두 가지 방법을 배웠습니다.

  1. Java 의 Stream API 사용:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • 현대적이고 함수적인 접근 방식
  • Java 에 내장되어 있음
  • 단계별 데이터 처리에 적합
  1. Apache Commons Lang 의 ArrayUtils 사용:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • 더 간단한 접근 방식
  • 외부 라이브러리가 필요함
  • 이해하고 사용하기 쉬움

두 방법 모두 동일한 결과를 얻으며, 필요에 더 적합한 방법을 선택할 수 있습니다.

  • 현대적이고 함수적인 접근 방식을 원할 때는 Stream API 를 사용합니다.
  • 더 간단하고 읽기 쉬운 코드를 원할 때는 ArrayUtils 를 사용합니다.

이제 Java 애플리케이션에서 Integer List 와 int 배열 간에 변환하는 데 필요한 지식을 갖추게 되었습니다.