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