필자가 추천하는 세가지 최적화 격언

  • (맹목적인 어리석음을 포함해) 그 어떤 핑계보다 효율성이라는 이름 아래 행해진 컴퓨팅 죄악이 더 많다(심지어 효율을 높이지도 못하면서)
  • (전체의 97% 정도인) 자그마한 효율성은 모두 잊자. 섣부른 최적화가 만악의 근원이다.
  • 최적화를 할때는 다음 두 규칙을 따르라
    • 첫째 하지마라
    • 두번째 아직 하지마라, 다시 말해 완전히 명백하고 최적화되지 않은 해법을 찾을때까지는 하지마라

 

 

성능 때문에 견고한 구조를 희생시키지 마라

  • 빠른 프로그램보다는 좋은 프로그램을 작성하라.
    • 좋은프롬그램은 정보 은닉 원칙을 따르므로 개별 구성요소의 내부를 독립적으로 설계할 수 있다.
    • 따라서 시스템의 나머지에 영향을 주지 않고도 각 요소를 다시 설계할 수 있다(아이템 15)
    • 완성할 때 까지 성능을 무시하라는 것이 아니다, 설계단계에서 성능을 반드시 염두에 두어야 한다.
  • 성능을 제한하는 설계를 피하라
    • 완성 후 변경하기가 가장 어려운 설게 요소는 바로 컴포넌트끼리, 혹은 외부 시스템과의 소통 방식이다.
    • API, 네트워크 프로토콜, 영구 저장용 데이터 포맷 등이 대표적이다.
  • API를 설계할 대 성능에 주는 영향을 고려하라
    • public 타입을 가변으로 만들면, 즉 내부 데이터 변경이 가능하게 만들면 불필요한 방어적 복사를 유발할 수 있다.(아이템 50)
    • 인터페이스도 있는데 굳이 구현 타입을 사용하는 것도 좋지 않다.
  • 성능을 위해 API를 왜곡하는 건 매우 안좋은 생각이다.

 

 

정리

  • 빠른 프로그램을 작성하려 안달하지 말자
  • 하지만 시스템을 설계할 때 특히 API, 네트워크 프로토콜, 영구 저장용 데이터 포맷을 설계할 때는 성능을 염두에 두어야 한다.
  • 충분히 빠르다면 끝이다.
  • 그렇지 않다면 프로파일러를 사용해 최적화를 수행하라

+ Recent posts