이펙티브 자바, 쉽게 정리하기 - item 67. 최적화는 신중히 하라
최적화에 대한 생각
- 최적화는 보통 해로운 결과로 이어진다.
- 특히나 견고한 구조를 해치는 최적화는 하지말자.
- 빠른 프로그램보다는 좋은 프로그램을 작성하자.
- 좋은 프로그램은 개별 구성요소의 내부를 독립적으로 설계 가능한 것이다.
- 시스템의 나머지에 변화를 주지 않고도 내가 원하는 부분에 변화를 줄 수 있는 것이다.
설계를 이용해 성능 올리는 방법
성능을 제한하는 설계를 피하라
- 설계적인 요소는 완성 후 변경하기가 가장 어렵다.
- API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등이 대표적이다.
- 완성 후 변경이 어렵거나 불가능할 수도 있고, 시스템 성능도 크게 제한할 수 있다.
API를 설계할 때 성능에 주는 영향을 고려하라
public
을 가변으로 만들면 나중에 어쩔 수 없는 방어적 복사를 유발할 수 있다.- 컴포지션으로 작성할 수 있는 부분을 상속으로 만들면, 성능 제약까지 물려받을 수 있다.
- 인터페이스 대신 구현체를 사용하는 것도 나중에 더 빠른 구현체가 나왔을 때 사용을 못할 수 있다.
보통 잘 설계된 API는 성능도 좋다. 성능을 위해 API를 왜곡하지 말자.
성능 최적화 방법
- 멋진 구조의 프로그램을 먼저 완성하자.
- 그런데도 성능에 만족하지 못하면 최적화를 고려하자.
- 프로파일링 도구를 이용하여 성능을 개선할만한 부분을 열심히 탐색해보자.
- 보통 10%의 코드에서 90%의 성능을 사용한다.
- 알고리즘을 변경해야 하는 경우도 있다.
자바는 구현 시스템, 릴리즈, 프로세서, 플랫폼 등에 따라 성능 차이가 심하니 잘 측정해보며 최적화를 해야 한다.
핵심 정리
- 좋은 프로그램을 작성하면 보통 성능은 따라온다.
- 시스템 설계 시에는 성능을 염두에 두자.
- API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등이 있다.
- 충분히 빠르면 그걸로 끝이며, 불만족할 시에는 프로파일링 도구를 이용하자.
- 알고리즘을 잘 살펴보고, 알고리즘을 변경하는 것을 고려하자.
- 다른 작은 요소들은 최적화해봐야 보통 미미한 효과만 갖는다.
반응형
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바, 쉽게 정리하기 - item 69. 예외는 진짜 예외 상황에만 사용하라 (0) | 2023.06.28 |
---|---|
이펙티브 자바, 쉽게 정리하기 - item 68. 일반적으로 통용되는 명명 규칙을 따르라 (0) | 2023.06.28 |
이펙티브 자바, 쉽게 정리하기 - item 66. 네이티브 메서드는 신중히 사용하라 (0) | 2023.06.27 |
이펙티브 자바, 쉽게 정리하기 - item 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2023.06.26 |
이펙티브 자바, 쉽게 정리하기 - item 64. 객체는 인터페이스를 사용해 참조하라 (0) | 2023.06.26 |