본 내용은 마틴 파울러의 Refactoring 2판을 토대로 작성되었습니다.
리팩터링 원칙
리팩터링과 성능
- 리팩터링은 이해하기 쉽게 만들기 위해 속도가 느려지는 방향으로 수정되는 경우도 있음
- 그와 동시에 성능을 튜닝하기는 더 쉬워짐
- 튜닝하기 쉽게 만들고 나서 원하는 속도가 나오게끔 튜닝
빠른 소프트웨어를 작성하는 방법 세 가지
- 시간 예산 분배(time budgeting)
- 하드 리얼타임 시스템에서 많이 사용
- 설계를 여러 컴포넌트로 나눠서 컴포넌트마다 자원(시간과 공간) 예산을 할당
- 컴포넌트는 할당된 자원 예산을 초과할 수 없으며 주어진 자원을 서로 주고 받는 메커니즘은 가능
- 엄격한 시간 엄수를 강조
- ex) 심작 박동 조율기
- 끊임 없이 관심을 기울이기
- But. 성능을 개선하기 위해 코드를 수정하다 보면 프로그램은 다루기 어려운 형태로 변하기 쉬움
- 개발이 더더졈
- 실제로 빨라지는 경우는 거의 없음
- 각각의 개선은 프로그램의 특정 동작에만 관련될 뿐, 컴파일러와 런타임과 하드웨어의 동작을 제대로 이해하지 못한 채 작성할 때도 많음
- 대부분 프로그램은 전체 코드 중 극히 일부에서 대부분의 시간을 소비
- 코드 전체를 고르게 최적화 한다면 그중 90프로는 효과가 거의 없기 때문에 시간 낭비
- 코드를 다루기 쉽게 만들기
- 성능 최적화 단계가 되면 구체적인 절차를 따라 프로그램을 튜닝
- 프로파일러로 프로그램을 분석하여 시간과 공간을 많이 잡아먹는 지점을 알아내기
- 성능에 큰 영향을 주는 작은 부분들을 찾아낼 수 있음
- 그 부분들을 개선
- 적은 노력으로 훨씬 큰 효과
- 최적화 단계 또한 작은 단계로 나눠서 진행
- 각 단계마다 컴파일, 테스트를 거치고 프로파일러를 다시 실행
- 성능이 개선되지 않았다면, 수정 내용을 되돌리기
- 위 절차를 반복하여 사용자가 만족하는 성능에 도달할 때까지 최적화 대상을 찾아서 제거
리팩터링과 최적화
- 성능 튜닝에 투입할 시간을 벌 수 있음
- 성능에 집중할 시간을 벌 수 있음
- 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석 가능
- 프로파일러가 지적해주는 코드의 범위가 더 좁아질 것이고 튜닝하기 쉬워질 것
- 코드가 깔끔하면 개선안이 더 잘떠오를 것이고, 어떤 튜닝이 효과가 좋을 지 파악하기 쉬워짐
- 리팩터링은 성능 좋은 소프트웨어를 만드는 것에 기여
'programming study > Refactoring' 카테고리의 다른 글
Refactoring - 코드에서 나는 악취(1) (0) | 2021.12.26 |
---|---|
Refactoring - 리팩터링 원칙(5) (0) | 2021.12.15 |
Refactoring - 리팩터링 원칙(3) (0) | 2021.12.13 |
Refactoring - 리팩터링 원칙(2) (0) | 2021.12.12 |
Refactoring - 리팩터링 원칙(1) (0) | 2021.12.11 |