item 67) 최적화는 신중히 하라

최적화를 위해 고려할 점

  • 빠른 프로그램보다는 견고한 구조를 가진 좋은 프로그램을 작성하도록 노력하기

  • 좋은 프로그램은 정보 은닉 원칙을 따르므로 개별 구성요소 내부를 독립적으로 설계할 수 있어 최적화 하기도 수월하다.

시스템 성능을 제한하는 설계는 피할 것

  • 완성 후 변경하기 가장 어려운 설계 요소는 컴포넌트끼리 혹은 외부 시스템과의 소통 방식(API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등)이다.

API 설계 시 성능에 주는 영향 고려

  • public 타입 클래스를 가변으로 만들면 불필요한 방어적 복사를 수없이 유발할 수 있다. (item 50)

  • 컴포지션으로 해결할 수 있음에도 상속 방식으로 설계한 public 클래스는 상위 클래스에 영원히 종속된다.

  • 인터페이스가 있는데 굳이 구현 타입을 사용하면, 추후 변경할때 용이하지 못하게 된다.

  • 신중하게 설계하여 깨끗하고 명확한 구조를 갖춘 프로그램을 만들도록 하자.

각각 최적화 전/후 성능을 측정하기

  • 프로파일링 도구를 사용하여 메서드 소비 시간과 호출 횟수 등 런타임 정보를 확인하여, 어느 부분에 집중해 최적화 할 지 찾을 수 있다. 혹은 JMH도 활용할 수 있다.

JMH: 자바 코드의 상세한 성능을 알기 쉽게 보여주는 마이크로 벤치마킹 프레임워크

  • 자바의 성능 모델은 정교하지 않고 구현 시스템, 릴리즈, 프로세서마다 차이가 있어 최적화의 효과를 각각에서 측정해야 하므로, 성능 예측은 무척 어렵다.

Last updated