기본형 배열 작업하기
이전 단계에서는 참조 유형 (String) 의 배열로 작업했습니다. 그러나 Java 배열은 int, double 등과 같은 기본형도 포함할 수 있습니다. Java 제네릭은 참조 유형에서만 작동하므로 기본형 배열을 리스트로 변환하려면 추가 단계가 필요합니다.
이 프로세스를 보여주기 위해 새 예제를 만들어 보겠습니다.
새 Java 파일 생성하기
-
동일한 디렉토리에 PrimitiveArrayToList.java라는 새 Java 파일을 생성합니다.
WebIDE 에서 project/src/main/java로 이동하여 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다. 이름을 PrimitiveArrayToList.java로 지정합니다.
-
파일에 다음 코드를 추가합니다.
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class PrimitiveArrayToList {
public static void main(String[] args) {
System.out.println("Converting Primitive Arrays to Lists");
System.out.println("===================================");
// Create a primitive int array
int[] numbersArray = {10, 20, 30, 40, 50};
System.out.println("Original primitive array: " + Arrays.toString(numbersArray));
// Method 1: Manual conversion
System.out.println("\nMethod 1: Manual conversion");
List<Integer> numbersList1 = new ArrayList<>();
for (int number : numbersArray) {
numbersList1.add(number); // Autoboxing converts int to Integer
}
System.out.println("List after manual conversion: " + numbersList1);
// Method 2: Using Java 8 Streams
System.out.println("\nMethod 2: Using Java 8 Streams");
List<Integer> numbersList2 = Arrays.stream(numbersArray)
.boxed() // Converts IntStream to Stream<Integer>
.collect(Collectors.toList());
System.out.println("List after stream conversion: " + numbersList2);
// Modify the lists to demonstrate independence from the array
System.out.println("\nModifying the lists:");
numbersList1.add(60);
numbersList1.set(0, 15);
numbersList2.add(70);
numbersList2.remove(0);
System.out.println("List 1 after modifications: " + numbersList1);
System.out.println("List 2 after modifications: " + numbersList2);
System.out.println("Original array after List modifications: " + Arrays.toString(numbersArray));
// Create and convert other primitive type arrays
System.out.println("\nOther primitive type examples:");
double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};
List<Double> doubleList = Arrays.stream(doubleArray)
.boxed()
.collect(Collectors.toList());
System.out.println("Double array: " + Arrays.toString(doubleArray));
System.out.println("Double list: " + doubleList);
boolean[] boolArray = {true, false, true, true, false};
List<Boolean> boolList = new ArrayList<>();
for (boolean value : boolArray) {
boolList.add(value);
}
System.out.println("Boolean array: " + Arrays.toString(boolArray));
System.out.println("Boolean list: " + boolList);
}
}
- 프로그램을 컴파일하고 실행합니다.
cd ~/project
javac src/main/java/PrimitiveArrayToList.java
java -cp src/main/java PrimitiveArrayToList
다음과 유사한 출력을 볼 수 있습니다.
Converting Primitive Arrays to Lists
===================================
Original primitive array: [10, 20, 30, 40, 50]
Method 1: Manual conversion
List after manual conversion: [10, 20, 30, 40, 50]
Method 2: Using Java 8 Streams
List after stream conversion: [10, 20, 30, 40, 50]
Modifying the lists:
List 1 after modifications: [15, 20, 30, 40, 50, 60]
List 2 after modifications: [20, 30, 40, 50, 70]
Original array after List modifications: [10, 20, 30, 40, 50]
Other primitive type examples:
Double array: [1.1, 2.2, 3.3, 4.4, 5.5]
Double list: [1.1, 2.2, 3.3, 4.4, 5.5]
Boolean array: [true, false, true, true, false]
Boolean list: [true, false, true, true, false]
기본형 배열 변환 이해하기
기본형 배열로 작업할 때 두 가지 주요 고려 사항이 있습니다.
-
오토박싱 (Autoboxing): Java 는 컬렉션에 추가할 때 기본형 값을 해당 래퍼 클래스 객체로 자동 변환합니다. 예를 들어, int는 Integer로 변환됩니다.
-
스트림용 박싱 메서드: 기본형 배열과 함께 스트림을 사용할 때는 기본형 스트림을 객체 스트림으로 변환하기 위해 .boxed() 메서드를 호출해야 합니다.
변환 프로세스는 원래 배열과 독립적인 완전히 새로운 리스트를 생성합니다. 즉, 다음을 의미합니다.
- 리스트를 수정해도 원래 배열에는 영향을 미치지 않습니다.
- 리스트는 완전히 가변적입니다 (요소를 추가, 제거 또는 변경할 수 있음).
- 리스트의 각 요소는 배열의 값을 포함하는 새 객체 (래퍼) 입니다.
이러한 독립성은 원래 배열에 대한 변경 위험 없이 데이터를 조작해야 할 때 특히 유용합니다.