Java 코드 최적화
Pavlos Kosmetatos
Lead Engineer @Wealthyhood
최악의 경우를 설명하는 수학적 표기법입니다.
일반적인 복잡도 클래스:
O(1): 상수 시간 - 크기와 무관ArrayList의 get()이 있습니다Strings를 저장하는 ArrayList의 내부(단순화된) 구현:
public class ArrayList {}
private String[] data; // Internal array
private int size;
// Get operation - direct array access
public String get(int index) {
return data[index]; // O(1)
}
}
최악의 경우를 설명하는 수학적 표기법
일반적인 복잡도 클래스:
O(1): 상수 시간 - 크기와 무관O(n): 선형 시간 - 입력 크기에 비례해 증가ArrayList의 contains()에 대한 비슷한 예시입니다public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
// Linear search through array
for (int i = 0; i < size; i++) {
if (o.equals(elementData[i])) {
return i;
}
}
return -1; // Not found
}
최악의 경우를 설명하는 수학적 표기법
일반적인 복잡도 클래스:
O(1): 상수 시간 - 크기와 무관O(n): 선형 시간 - 입력 크기에 비례해 증가O(n²): 2차 시간 - 입력 크기의 제곱에 비례해 증가// Finding a pair of numbers that sum to a target value
// Time complexity: O(n²)
public int[] findPairWithSum(ArrayList<Integer> numbers, int targetSum) {
for (int i = 0; i < numbers.size(); i++) {
for (int j = i + 1; j < numbers.size(); j++) {
if (numbers.get(i) + numbers.get(j) == targetSum) {
console.log("Found them!")
}
}
}
}
입력 크기의 영향:
O(1): 1,000 -> 1,000,000개 항목 = 동일한 시간!O(n): 1,000 -> 1,000,000개 항목 = 1,000배 느려짐O(n²): 1,000 -> 1,000,000개 항목 = 1,000,000배 느려짐
Java 코드 최적화