본문 바로가기

programming study/Refactoring

Refactoring - 리팩터링 원칙(4)

본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다.

리팩터링 원칙

리팩터링과 성능

  • 리팩터링은 이해하기 쉽게 만들기 위해 속도가 느려지는 방향으로 수정되는 경우도 있음
    • 그와 동시에 성능을 튜닝하기는 더 쉬워짐
    • 튜닝하기 쉽게 만들고 나서 원하는 속도가 나오게끔 튜닝

 

빠른 소프트웨어를 작성하는 방법 세 가지

  • 시간 예산 분배(time budgeting)
    • 하드 리얼타임 시스템에서 많이 사용
    • 설계를 여러 컴포넌트로 나눠서 컴포넌트마다 자원(시간과 공간) 예산을 할당
    • 컴포넌트는 할당된 자원 예산을 초과할 수 없으며 주어진 자원을 서로 주고 받는 메커니즘은 가능
    • 엄격한 시간 엄수를 강조
    • ex) 심작 박동 조율기
  • 끊임 없이 관심을 기울이기
    • But. 성능을 개선하기 위해 코드를 수정하다 보면 프로그램은 다루기 어려운 형태로 변하기 쉬움
    • 개발이 더더졈
    • 실제로 빨라지는 경우는 거의 없음
    • 각각의 개선은 프로그램의 특정 동작에만 관련될 뿐, 컴파일러와 런타임과 하드웨어의 동작을 제대로 이해하지 못한 채 작성할 때도 많음
    • 대부분 프로그램은 전체 코드 중 극히 일부에서 대부분의 시간을 소비
    • 코드 전체를 고르게 최적화 한다면 그중 90프로는 효과가 거의 없기 때문에 시간 낭비
  • 코드를 다루기 쉽게 만들기
    • 성능 최적화 단계가 되면 구체적인 절차를 따라 프로그램을 튜닝
    • 프로파일러로 프로그램을 분석하여 시간과 공간을 많이 잡아먹는 지점을 알아내기
    • 성능에 큰 영향을 주는 작은 부분들을 찾아낼 수 있음
    • 그 부분들을 개선
    • 적은 노력으로 훨씬 큰 효과
    • 최적화 단계 또한 작은 단계로 나눠서 진행
    • 각 단계마다 컴파일, 테스트를 거치고 프로파일러를 다시 실행
    • 성능이 개선되지 않았다면, 수정 내용을 되돌리기
    • 위 절차를 반복하여 사용자가 만족하는 성능에 도달할 때까지 최적화 대상을 찾아서 제거

 

리팩터링과 최적화

  • 성능 튜닝에 투입할 시간을 벌 수 있음
    • 성능에 집중할 시간을 벌 수 있음
  • 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석 가능
    • 프로파일러가 지적해주는 코드의 범위가 더 좁아질 것이고 튜닝하기 쉬워질 것
    • 코드가 깔끔하면 개선안이 더 잘떠오를 것이고, 어떤 튜닝이 효과가 좋을 지 파악하기 쉬워짐
  • 리팩터링은 성능 좋은 소프트웨어를 만드는 것에 기여