HOWTO · Java
Java에서 모든 배열 요소를 0으로 초기화하는 방법
Java에서 새 숫자형 배열의 기본값과 기존 배열의 요소를 0으로 설정하는 방법을 알아봅니다.
이 페이지의 내용
Java에서 새로 만든 기본 숫자형 배열의 각 요소는 기본값인 0으로 초기화되므로 별도 작업이 필요하지 않습니다. 기존 배열을 초기화하려면 Arrays.fill()을 사용하거나 각 요소에 직접 값을 지정할 수 있습니다. Integer[]와 같은 참조형 배열은 처음에 각 요소가 null입니다.
배열 초기화는 Java 튜토리얼의 핵심 데이터 경로의 일부로 다룹니다.
for 루프로 배열 요소를 0으로 초기화
for 루프를 사용하면 기존 배열의 각 인덱스에 값을 지정할 수 있습니다. 인덱스 0에서 시작해 numbers.length에 도달하기 전에 멈추므로 유효한 모든 요소를 순회합니다.
다음 완전한 Java 프로그램은 작은 배열에 여러 방법을 적용한 뒤 각 결과를 출력합니다.
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ArrayInitialization {
public static void main(String[] args) {
int[] loopValues = {4, 8, 12};
for (int i = 0; i < loopValues.length; i++) {
loopValues[i] = 0;
}
System.out.println("for loop: " + Arrays.toString(loopValues));
int[] filledValues = {4, 8, 12};
Arrays.fill(filledValues, 0);
System.out.println("fill: " + Arrays.toString(filledValues));
List<Integer> repeatedValues = Collections.nCopies(3, 0);
Integer[] boxedValues = repeatedValues.toArray(new Integer[0]);
System.out.println("boxed values: " + Arrays.toString(boxedValues));
int[] numbers = {4, 8, 12};
int[] oldReference = numbers;
numbers = new int[numbers.length];
System.out.println("replacement: " + Arrays.toString(numbers));
System.out.println("old reference: " + Arrays.toString(oldReference));
int[] generatedValues = {4, 8, 12};
Arrays.setAll(generatedValues, index -> 0);
System.out.println("setAll: " + Arrays.toString(generatedValues));
int[] newValues = new int[3];
System.out.println("new array: " + Arrays.toString(newValues));
}
}
프로그램은 다음 결과를 출력합니다.
for loop: [0, 0, 0]
fill: [0, 0, 0]
boxed values: [0, 0, 0]
replacement: [0, 0, 0]
old reference: [4, 8, 12]
setAll: [0, 0, 0]
new array: [0, 0, 0]
Java에서 fill() 메서드로 배열 요소를 0으로 초기화
Arrays.fill()은 지정한 값을 배열의 모든 요소에 씁니다. 기본 숫자형 배열에서는 Arrays.fill(numbers, 0)을 호출해 기존 배열을 제자리에서 초기화할 수 있습니다. 배열의 일부만 바꿔야 하는 경우에는 특정 범위를 채우는 오버로드도 사용할 수 있습니다.
nCopies() 메서드로 배열 요소를 0으로 초기화
Collections.nCopies(length, 0)은 동일한 박싱 값이 반복되는 수정 불가 List<Integer>를 반환합니다. 이 목록을 toArray(new Integer[0])으로 변환하면 Integer[]가 만들어집니다. int[]가 만들어지는 것도 아니고 기존 기본형 배열이 초기화되는 것도 아닙니다. 원본 배열을 수정하는 대신 목록이나 박싱 배열이 필요할 때 사용하세요.
Java에서 배열을 재할당해 요소를 0으로 초기화
new int[numbers.length]를 할당하면 numbers는 기본값을 가진 새 배열을 가리킵니다. 원래 배열을 가리키는 다른 변수가 있다면 그 변수에서는 기존 요소 값이 그대로 보입니다. 재할당은 한 참조를 바꾸는 작업이며, 같은 배열을 참조하는 모든 변수의 배열을 지우지는 않습니다.
Arrays.setAll()로 배열 요소를 0으로 초기화
Arrays.setAll()은 각 요소에 대해 인덱스를 받는 생성기를 호출하고, 생성된 값을 배열에 저장합니다. 예제의 index -> 0은 모든 인덱스에 같은 값을 지정합니다. 인덱스에 따라 값이 달라져야 할 때 유용하며, 모든 요소에 하나의 상수를 넣는 경우에는 Arrays.fill()이 더 직접적입니다.
결론
새 기본 숫자형 배열은 이미 0으로 초기화되어 있습니다. 기존 배열을 초기화해야 한다면 Arrays.fill()을 간편하게 사용할 수 있습니다. for 루프는 요소별 대입 과정을 명시하고, Arrays.setAll()은 인덱스에 따른 값을 지정할 수 있습니다. Collections.nCopies()는 반복되는 박싱 값을 목록으로 만들며, 재할당은 새 배열을 만들기 때문에 기존 배열을 가리키는 다른 참조에는 영향을 주지 않습니다.