728x90
개요
Java에서 배열을 초기화할 때 주로 사용하는 두 가지 방법이 있습니다.
Arrays.fill() 메서드를 사용하는 방법과 for 반복문을 사용하는 방법입니다. 오늘은 이 두 방식의 성능을 비교하고 실제 어떤 상황에서 어떤 방법을 선택하는 것이 좋을지 알아보겠습니다.
두 가지 초기화 방법
1. Arrays.fill() 사용
int[] arr1 = new int[size];
Arrays.fill(arr1, 5);
2. for 반복문 사용
int[] arr2 = new int[size];
for(int i = 0; i < size; i++) {
arr2[i] = 5;
}
성능 테스트
다양한 크기의 배열에서 두 방식의 성능을 비교해보았습니다.
public class ArrayInitializationTest {
public static void main(String[] args) {
test(10_000_000); // 천만
test(50_000_000); // 오천만
test(100_000_000); // 일억
test(200_000_000); // 이억
}
public static void test(int size) {
System.out.println("\n배열 크기: " + size);
long startFill = System.nanoTime();
int[] arr1 = new int[size];
Arrays.fill(arr1, 5);
long endFill = System.nanoTime();
long startFor = System.nanoTime();
int[] arr2 = new int[size];
for(int i = 0; i < size; i++) {
arr2[i] = 5;
}
long endFor = System.nanoTime();
System.out.println("Arrays.fill() 시간: " +
(endFill - startFill) / 1_000_000.0 + " ms");
System.out.println("for문 시간: " +
(endFor - startFor) / 1_000_000.0 + " ms");
}
}
실행 결과
위와 같이 실행 결과가 나오는데, 물론 매 실행마다 결과는 달라집니다.
그러나 반복문이 배열의 크기가 큰 경우 대체로 더 좋은 성능을 보이는 것을 알 수 있습니다.
이는 Arrays.fill() 메서드가 내부적으로 처리하는 작업들이 큰 배열에서는 오히려 오버헤드로 작용할 수 있다는 것을 의미합니다.
특히 배열 크기가 매우 큰 경우(1억 이상)에서는 반복문이 Arrays.fill()보다 약 2-3배 정도 더 빠른 성능을 보이는 경향이 있습니다.
물론 배열의 크기가 1억 이상일 경우는 일반적이지 않습니다. 따라서 일반적인 상황에서는 코드의 가독성과 유지보수성을 고려하여 Arrays.fill() 메서드를 사용하는 것이 더 좋은 선택일 것입니다.
Arrays.fill()은 메서드 이름 자체로 배열을 특정 값으로 채운다는 의도가 명확하게 드러나고, 실제 사용되는 배열 크기에서는 성능 차이가 크지 않기 때문입니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2025.02.05 - 하노이 탑 알고리즘, 왜 재귀여야 할까❓ (0) | 2025.02.05 |
---|---|
[TIL, 일일 회고] 2025.02.04 - Docker : Container Inspect로 컨테이너 세부 정보 확인하기 (0) | 2025.02.04 |
[TIL, 일일 회고] 2025.02.02 - 그래프 탐색(DFS, BFS)에서 방문 배열(visited)의 차원 결정하기 (0) | 2025.02.02 |
[TIL, 일일 회고] 2025.02.01 - 퍼스트 파티(First Party)와 세컨드 파티(Second Party) (0) | 2025.02.01 |
[TIL, 일일 회고] 2025.01.31 - 써드파티(3rd party) (0) | 2025.01.31 |