JAVA/Effective Java

규칙 55 - 신중하게 최적화하라

반응형

모든 프로그래머가 알아둬야 하는 최적화에 관련된 격언이 있다.

1. 맹목적인 어리석음을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다.
2. 97%는 효율성을 잊어버려라.  섣부른 최적화는 모든 악의 근원이다.

그리고 프로그램을 작성하면서 기준을 삼아야 할 내용에 대해 소개한다.

[기준]
빠른 프로그램을 만들려고 처음부터 노력하지말고, 좋은 프로그램을 만들려 노력하라.
-> 좋은 구조를 가진 프로그램은 빠른게 변경하는데 어렵지 않다.
-> 정보은닉의 원칙을 지키는 것이 좋은 구조를 갖는것에 첫 번째 항목이다.

설계를 할 떄는 성능을 제약할 가능성이 있는 결정들을 피하라.
-> 특히 통신 API, 프로토콜 정의서는 변경하기 어렵기 때문에, 신중하게 코딩해야한다.

API를 설계할 떄 내리는 결정들이 성능에 어떤 영향을 끼칠지를 생각하라.
-> public 자료형을 무분별하게 사용하면 잘못된 객체 생성등으로 인해 성능에 이슈가 생길 수 있다.


코드를 최적화한 이후에 코드가 성능이 좋아졌는지 확인을 해야하는데, 전통적인 정적 컴파일 언어들에 비해, 프로그래머가 작성한 코드와 CPU가 실행하는 코드 사이의 "의미론적 차이"가 훨씬 크기 때문에 최적화 결과로 성능이 얼마나 좋아질지 안정적으로 예측하기 어렵다.
-> 특히 자바의 경우 JVM 구현마다, 릴리즈마다, 프로세스 마다 다르다. 
-> JVM 구현이나 하드웨어 플랫폼마다 다른 성능을 내기 때문에 타협적 결정을 내려야 할 때가 있다.




결론을 내면, 자잘한 성능을 고치려고 노력하지말고 구조적 알고리즘 문제를 먼저 생각하라. 잘못된 알고리즘 선택으로 인해 잘못 설계된 프로그램은 자잘한 성능개선으로 문제를 잡을 수 없기 때문이다.


출처 : 조슈아 블로크, 『 Effective Java 2/E』, 이병준 옮김, 인사이트(2014.9.1), 규칙55 인용.

반응형