item 67) 최적화는 신중히 하라
최적화를 위해 고려할 점
빠른 프로그램보다는 견고한 구조를 가진 좋은 프로그램을 작성하도록 노력하기
좋은 프로그램은 정보 은닉 원칙을 따르므로 개별 구성요소 내부를 독립적으로 설계할 수 있어 최적화 하기도 수월하다.
시스템 성능을 제한하는 설계는 피할 것
완성 후 변경하기 가장 어려운 설계 요소는 컴포넌트끼리 혹은 외부 시스템과의 소통 방식(API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등)이다.
API 설계 시 성능에 주는 영향 고려
public 타입 클래스를 가변으로 만들면 불필요한 방어적 복사를 수없이 유발할 수 있다. (item 50)
컴포지션으로 해결할 수 있음에도 상속 방식으로 설계한 public 클래스는 상위 클래스에 영원히 종속된다.
인터페이스가 있는데 굳이 구현 타입을 사용하면, 추후 변경할때 용이하지 못하게 된다.
신중하게 설계하여 깨끗하고 명확한 구조를 갖춘 프로그램을 만들도록 하자.
각각 최적화 전/후 성능을 측정하기
프로파일링 도구를 사용하여 메서드 소비 시간과 호출 횟수 등 런타임 정보를 확인하여, 어느 부분에 집중해 최적화 할 지 찾을 수 있다. 혹은 JMH도 활용할 수 있다.
JMH: 자바 코드의 상세한 성능을 알기 쉽게 보여주는 마이크로 벤치마킹 프레임워크
자바의 성능 모델은 정교하지 않고 구현 시스템, 릴리즈, 프로세서마다 차이가 있어 최적화의 효과를 각각에서 측정해야 하므로, 성능 예측은 무척 어렵다.
Last updated