서론
· 최적화는 좋을 때 보다 나쁠 때가 더 많으며, 섣불리 시도하면 더욱 나쁘다는 것이다.
· 잘못된 최적화는 빠르지도 정확하지도 않으며 쉽게 고칠 수도 없는 시스템으로 이어진다.
본론
· 빠른 프로그램이 아닌 좋은 프로그램을 만들려 노력하라.
· 설계할 때는 성능을 제약할 가능성이 있는 결정들은 피하라.
ㄴ 모듈간 상호작용이나 외부와의 상호작용을 명시한 부분은 성능을 고치기가 까다롭다.
· API를 설계할 때 내리는 결정들이 성능에 어떤 영향을 끼칠지를 생각하라.
ㄴ public자료형을 변경 가능하게 만들면 쓸데없이 방어적 복사를 많이해야 할 수 있다.
· 좋은 성능을 내기 위해 API를 급진적으로 바꾸는 것은 바람직 하지 않다.
ㄴ 다음번 릴리즈때 플랫폼이나 기타 내부 소프트웨어가 바뀌면 성능문제는 사라질수 있지만 너무 많이 변경된 API는 개발자를 괴롭힐 것이다.
· 최적화를 시도할 때마다 전후 성능을 측정하고 비교하라.
ㄴ 프로그램이 어디에 시간을 쓰고 있는지 추측하기 어렵기 때문에 최적화 결과로 성능이 개선되지 않을 수 도 있다.
ㄴ 프로파일링 도구를 활용하면 어디를 최적화 할 지 좀더 쉽게 결정할 수 있다. (다양한 실행 정보를 제공)
결론
· 빠른 프로그램을 만들고자 애쓰지 말자.
· 좋은 프로그램을 짜기위해 노력하면 성능은 따라올 것이다.
· 시스템 구현을 마쳤다면 성능을 측정하라, 충분히 빠르다면 끝난 것이다. 그렇지 않다면 프로파일링 도구를 통해 문제를 찾아 낸 다음 최적화 하라.
· 처음으로 해야할 일은 구현에 쓰인 알고리즘을 검토하는 것이다. 저수준으로 최적화를 아무리 해봤자 알고리즘을 잘못 고르면 성능을 만회할 수 없다.
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 53 리플렉션 대신 인터페이스를 이용하라 (0) | 2023.04.26 |
---|---|
<Effective Java> RULE 54 네이티브 메서드는 신중하게 (0) | 2023.04.26 |
<Effective Java> RULE 56 일반적으로 통용되는 작명 관습을 따르라 (0) | 2023.04.26 |
<Effective Java> RULE 57 예외는 예외적 상황에만 사용하라 (0) | 2023.04.26 |
<Effective Java> RULE 58 복구가능상태에는 점검지정 예외를 사용하고, 프로그래밍 오류에는 실행 지점 예외를 이용하라. (0) | 2023.04.26 |