12장: 최적화 및 일반화 회피
성능 최적화와 일반화는 프로그래머가 하는 두가지 게임으로 도움이 되기보다 큰 상처를 입히는 경우가 많다
일반화 해야 되는것은 컨텍스트뿐
단순성 추구
단순함을 추구하는것은 소프트웨어 개발의 이상 중 하나
인간의 인지능력은 제한적이기 때문에 단순함이 필수
불변속성을 활용하는 최적화
단순함을 희생할때는 부작용을 최소화하기 위해 예방 조치를 취해야 된다
일반화의 시기와 방법
매서드나 클래스를 일반화를 추가하기 전에 그렇게 해야 하는 이유가 있어야 된다
구현의 최소화로 일반화 지양하기
하지 않는 일의 양을 최대화 하라
무언가 만들때는 먼저 컨텍스트, 구현하려는 동작의 범위를 이해해야 한다
소프트웨어가 발전함에 따라 요구사항이 변경되므로 불필요한 일반화를 구현하고 유지하는데 드는 노력이 쉽게 무효화된다
안정성이 유사한 것 통합하기
새로운것과 오래된것을 바로 통합하지 않는것이 좋다 대신 통합 대상이 비슷한 안정성에 도달하면 통합하자
불필요한 일반화 제거
함수에 전달된 런터임 인자들을 모니터링해서 매서드 전문화를 적용할수 있다
최적화 시기와 방법
자동 성능 테스트를 설정하고 테스트가 실패할 때만 최적화를 하는 것이 좋다
최적화 전 리팩터링
첫번째 단계는 코드가 적절하게 리팩터링되었는지 확인하는것이다
제약 이론에 따른 최적화
제약이론이 적용됨 - 리소스 풀링 기법
측정 지표를 사용한 최적화
코드에서 핫스팟을 식별해야 된다
좋은 알고리즘과 데이터 구조 선택하기
데이터 구조를 지역적으로 변환함으로써 이익을 얻을수 있다
캐시 사용하기
캐시는 멱등 불변속성과 조합될 때 가장 안전하다
최적화된 코드 분리하기
- 잠금 영역 최소화를 위한 메서드와 클래스 사용
- 향후 개발자들에게 알리기 위한 패키지 사용