Java 코드 최적화
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
다음과 같은 애플리케이션을 만들려면 공간 복잡도를 이해하는 것이 중요합니다:
OutOfMemoryError와 같은 오류로 인한 충돌 방지표기법은 시간 복잡도와 동일합니다.
일반적인 복잡도 클래스:
O(1): 상수 시간 - 크기와 무관O(n): 선형 시간 - 입력 크기에 따라 증가O(n²): 2차 시간 - 입력 크기에 따라 제곱으로 증가public int findMax(int[] array) {
int max = Integer.MIN_VALUE;
for (int value : array) {
if (value > max) {
max = value;
}
}
return max;
}
정수 배열의 요소가 10개든 1,000만 개든, 변수 max 하나에 대한 메모리만 사용합니다
공간 복잡도는 O(1), 즉 상수 공간입니다
public int[] doubleValues(int[] array) {
int[] result = new int[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i] * 2;
}
return result;
}
n개의 요소가 있으면 n개의 추가 요소를 위한 공간이 필요합니다O(n)입니다public int[][] multiplicationTable(int n) {
int[][] table = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
return table;
}
n이 10이면 100개의 셀이 필요하고, n이 100이면 10,000개의 셀이 필요합니다O(n²)으로 분류합니다메모리는 유한한 자원입니다!
입력 크기가 10,000개일 때 앞서 살펴본 예시를 실제로 적용해 보면:
findMax, O(1) -> 몇 바이트 정도만 추가doubleValues, O(n) -> 약 40KB의 추가 메모리multiplicationTable, O(n²) -> 약 400MB의 추가 메모리
기억해 두세요:

Java 코드 최적화