Java ‐ 최적화는 신중히 하라[Effective Java Item 67] - woojin-playground/Backend-PlayGround GitHub Wiki

최적화는 신중히 하라

빠른 것보다는 좋은 것을 우선시하자

  • 성능보다는 견고한 구조에 집중해야 한다.
  • 견고한 구조란 캡슐화가 잘 되어 있으며 다른 모듈과 결합성이 낮은 아키텍처를 말한다.
  • 성능같은 구현 상의 문제는 나중에 최적화해서 해결할 수 있지만, 아키텍처의 결함은 시스템 전체를 다시 작성하지 않고는 해결하는 것이 어려울 수 있다.

변경하기 어려운 설계라면 성능을 우선시하자

  • 변경하기 가장 어려운 설계 요소는 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등이 있다.
  • 이런 설계 요소들은 완성 후 변경이 어렵거나 불가능할 수 있고 동시에 시스템 성능을 심각하게 제한할 수 있다.
  • 만약 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등을 설계할 일이 있다면 성능을 염두에 두어야 한다.

API를 설계할 때 성능에 주는 영향을 고려하자

  • API는 완성 후 변경하기 어렵다.
  • 설계할 때 성능에 주는 영향을 고려하자.
    • 내부 데이터를 변경할 수 없도록 만들어라.
    • 상속이 아닌 컴포지션 관계로 만들어라.
    • 구현 타입이 아닌 인터페이스 타입으로 만들어라.

문제의 원인이 되는 곳에 최적화를 시도하자

  • 최적화 전후에 성능 측정을 먼저 한다.
  • 최적화해봤자 성능이 생각보다 좋아지지 않는 경우가 있으며 오히려 성능을 더 나빠지게 할 수도 있다.
  • 느릴 것이라고 짐작한 부분을 최적화했는데 성능에 별다른 영향이 없다면 시간만 허비하게 된다.
  • 자바 코드 성능을 알기 쉽게 보여주는 벤치마킹 프레임워크로 JMH도 있다.
    • OpenJDK에서 개발한 무료 성능 측정 툴
    • JVM에서 돌아가는 언어를 전부 측정
    • 해당 메서드가 얼마나 걸리는지 알 수 있다.