Item67. 최적화는 신중히 하라

  • 성능떄문에 아키텍쳐 구조를 희생하면 안된다.좋은 아키텍쳐를 가지고 있는 경우 각 모듈이 정보 은닉 원칙을 따르므로, 개별 모듈을 독립적으로 재설계함으로, 성능을 향상시킬 수 있다.

  • 성능 결함은 모듈의 구현 로직을 바꿔서 나중에 최적화할 수 있지만, 전체 아키텍쳐 구조가 성능을 제한하는 상황은 시스템 전체를 다시 작성해야 하는 단점이 있다.

아키텍쳐 설계 단계에서 주의할점

  1. 성능을 제한하는 설계를 피해야 한다. 외부 모듈과 상호작용하는 API는 개발이후에는 변경하기 힘듦으로 설계 단계에서 성능을 제한하지 않도록 설계해야 한다.
  2. API를 설계할 떄 성능에 주는 영향을 고려하라
  • public 타입을 가변으로 만들면 방어적 복사를 수없이 수행해야 한다.
  • 인터페이스가 아닌 구현체에 의존한 경우에도 성능 최적화된 구현체를 사용하려고 해도 추상화가 아닌 구현체에 의존하였기 때문에 갈아끼우기 힘들다.
  1. 최적화 시도 전후로 성능을 측정하는 게 좋다.
  • 실제로 최적화 시도를 하였는데 오히려 성능이 나빠진 경우도 있으니, 테스트를 통해서 최적화로 성능이 정말 개선됬는지 검증하는게 중요하다
  • 프로파일링 도구를 활용하면 성능을 저하시키는 부분이 어디인지 찾기 편하다.
    (책에서 추천하고 있는 java 성능 테스트 툴 : https://openjdk.java.net/projects/code-tools/jmh/)

Comments