<aside>
💡 최적화를 할 때는 다음 두 규칙을 따르라.
첫 번째, 하지 마라.
두 번째, (전문가 한정) 아직 하지 마라. 다시 말해, 완전히 명백하고 최적화되지 않은 해법을 찾을 때까지는 하지 마라.
</aside>
최적화
프로그램의 성능을 향상시키기 위해 코드와 데이터 구조를 효율적으로 개선하는 과정
- 실행 시간(시간 복잡도)
- 메모리 사용량(공간 복잡도)
를 줄이는데 초점을 맞춘다
최적화의 여러가지 종류
- 코드 최적화
- 알고리즘 개선: 더 효율적인 알고리즘을 사용하여 시간 복잡도를 줄임
- 데이터 구조 개선: 적절한 데이터 구조를 사용하여 시간과 공간 복잡도를 줄임
- 반복문 최적화: 반복문 안에서 불필요한 계산을 피하고, 가능하면 반복문을 줄임
- 불필요한 객체 생성 피하기: 객체 생성을 최소화하여 가비지 컬렉션의 부담을 줄임
- 컴파일러 최적화
- 인라인(inline) 함수: 짧은 함수 호출을 인라인으로 처리하여 함수 호출 오버헤드를 줄임
- 루프 언롤링(loop unrolling): 반복문을 전개하여 반복문 제어 오버헤드를 줄임
- JVM 최적화
- Just-In-Time (JIT) 컴파일: 실행 시점에 자주 사용되는 메서드를 기계어로 컴파일하여 성능을 향상시킴.
- Garbage Collection (GC) 튜닝: GC 설정을 조정하여 메모리 관리의 효율성을 높임.
최적화의 단점
최적화는 좋은 결과보다는 해로운 결과로 이어지기 쉬움
- 유의미한 수준의 최적화(속도개선)가 이루어지지 않는다