리팩토링 개론
Refactoring - 리팩토링 개론
팩토링은 무엇인가
- (명사) 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 방법
(동사) 리팩토링 기법을 연달아 적용해서 겉으로 드러나는 기능은 그대로 둔 채 소프트웨어 구조를 변경한다.
강조할 내용
리팩토링의 목적은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다.
리팩토링은 겉으로 드러나는 소프트웨어 기능에 영향을 주지 않는다.
리팩토링은 왜 해야 하나
- 소프트웨어 설계가 개선되기 되니까
- 소프트웨어를 이해하기가 더 쉬워지기 되니까
- 버그를 찾기가 쉬워지니까
- 프로그래밍 속도가 빨라지니까
리팩토링은 어떨 때 필요한가
- 같은 작업의 삼진아웃 때
- 비슷한 작업을 할 때 두번까진 그냥하고 세번째 하게 되면 리팩토링을 실시하는 것이다.
- 기능을 추가할 때
- 버그를 수정할 때
- 코드를 검수할 때
리팩토링의 효용성 (_켄트 벡)
프로그램은 다음 4가지 상황일 때 수정하기 힘들어진다
- 코드를 알아보기 힘들 때
- 중복된 로직이 들어 있을 때
- 추가 기능을 넣어야 해서 실행 중인 코드를 변경해야 할 때
- 조건문 구조가 복잡할 때
그러므로 프로그램은 코드를 알아보기 쉽고, 모든 로직이 한 곳에 있으며, 기존 기능을 건드릴 필요 없이 조건문 구조가 최대한 간결하게 끔 작성해야 한다.
리팩토링은 실행 중인 프로그램의 기능을 바꾸는 작업이 아니고 신속한 개발 공정을 가능하게 하는 이런 성질을 가중하면서 가치를 높이는 일이다.
리팩토링 관련 문제들
데이터베이스
- 데이터베이스 스키마를 수정하면 데이터도 이전해야 하는데, 이것은 시간도 오래 걸릴 뿐 아니라 위험성도 높다. 이 문제를 해결하기 위해 객체 모델과 데이터베이스 모델 사이에 별도의 소프트웨어 계층을 두는 방법이 있다. 이렇게 하면 두 모델에 생긴 변경 사항을 따로 유지할 수 있어서 한 모델을 수정할 때 다른 모델은 수정할 필요 없이 그저 중개 계층만 수정하면 된다.
인터페이스변경
객체의 중대한 장점중 하나는 인터페이스를 건드리지 않고 내부의 구현 코드를 수정할 수 있다는 점이다. 리팩토링에서 불안한 점은 상당수의 리팩토링이 인터페이스를 건드린다는 것이다.
그렇다면 배포 인터페이스를 수정하는 리팩토링 기법들을 실시할 때는 어떻게 해야 할까?
간단히 말하면 어떤 리팩토링 기법이 배포 인터페이스를 건드릴 경우 개발자는 적어도 그 인터페이스를 사용하는 부분이 그 인터페이스 변경에 맞춰 수정되기 전까지는 기존 인터페이스와 새 인터페이스를 모두 그대로 유지시켜야 한다. 그리고 deprecation 같은 타입을 작성해서 호출자에게 그 코드를 사용하지 말아야 함을 알려야 한다.
리팩토링하면 안되는 상황
- 처음부터 새로 작성하는게 리팩토링보다 더 쉬울 경우
- 코드가 돌아가지 않는 경우
- 납기가 임박했을 때
리팩토링과 성능
- 많은 이들이 리팩토링으로 인해 프로그램 성능이 어떤 영향을 받는지에 관심이 많다. 소프트웨어를 이해하기 쉽게 만들려면 수정할 일이 많은데 그런 수정으로 프로그램이 느려질 수도 있다. 이건 아주 큰 문제다. 리팩토링을 실시하면 분명 소프트웨어는 더 느려지지만, 소프트웨어 성능을 더 간단히 조절할 수 있다. 소프트웨어 성능을 올리려면 먼저 소프트웨어를 튜닝가능하게 만들어 놓고 나중에 충분한 속도가 나오게 튜닝하는 것이다. 이것은 철저한 실시간 환경을 제외한 모든 환경에 적용된다.
Share this post
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Email