■ 리팩토링에 대한 다양한 지식은 소프트웨어 재사용, 제품 업그레이드, 플랫폼 선택과 같은 분야에 적용된다.
#상황1#
프로젝트 개발시 기존의 소프트웨어의 기능을 확장해야하고, 하는 일에 대한 완전한 업무파악이 안되고 있으며, 작업기한에 시달린다.
방법 1. 프로그램을 새로 만든다. (고비용, 기존 시스템과의 호환성)
방법 2. 기능을 확장하기 위해서 기존 시스템의 일부를 복사하고 수정한다. (시간에 따른 에러발생, 프로그램 디자인의 훼손, 프로그램 변경시 더 많은 비용)
-> 리팩토링은 위의 두 방법의 중간 방법이다.
■ 리팩토링의 장점
주어진 프로그램에 어떤 리팩토링을 적용해야하는가는 목적에 달려있다.
리팩토리의 사용
-낮은 수준의 리팩토링 : 클래스, 변수 or 메소드의 생성, 제거, 변수나 함수에 대한 접근 권한(public or protected), 함수인자 같은 속성변경, 클래스간에 변수나 함수들의 이동
-높은 수준의 리팩토링 : 추상 수퍼클래스 생성, 서브클래싱과 조건문 단순화를 통한 클래스 단순화, 재사용 가능한 컴포넌트 클래스 만들기 위한 기존 클래스의 분리
리팩토링을 적용하는 목적은 하나의 기존 프로그램의 구조를 변경해서 새로운 기능의 추가를 쉽게하는 것이다.
자동화된 도구는 과도하게 많은 인자를 가지고 있거나 지나치게 긴 코드를 가지고 있는 함수와 같은 프로그램의 구조적인 약점을 확인하는 데 사용될 수 있다.
개발자들은 그들의 코드를 리팩토링 해야 한다는 것을 확신하기 전에, 어느 부분을 어떻게 리팩토링 해야 하는지 이해해야 한다. 이 지식은 경험을 통해서 얻을 수 있다.
자동화된 도구는 프로그램의 구조를 분석하고 구조를 향상시킬 수 있는 리팩토링 방법을 제시해 줄 수 있다.
■ 단기적
■ 중기적
-> 리팩토링은 목적이라기보다는 수단이다. 리팩토링은 프로그래머나 프로그래밍팅이 그들의 소프트웨어를 개발하고 유지보수 하는 많은 방법 중의 일부이다.
"리팩토링은 오버헤드 활동이다. 나는 새롭고, 수익을 가져오는 기능을 작성하기 위해 월급을 받는 것이다" 라는 것에 대한 저자의 대답.
-> 리팩토링이 개발과정의 일부가 되었기 때문에 리팩토링을 하는 것은 오버헤드가 아니다.
■ 안전하게 리팩토링을 하는 방법?
① 프로그래머가 리팩토링을 하는 방법을 이해하지 못할 수도 있다.
② 리팩토링이 장기적으로 이익이라면, 왜 지금 당장 노력으 기울여야 하는가? 장기적으로 리팩토링의 이익을 챙길 그 프로젝트에 있지 않을수도 있다.
③ 코드를 리팩토링하는 것은 오버헤드다. 프로그래머가 해야 하는 일은 새로운 기능을 추가하는 것이다.
④ 리팩토링은 기본 프로그램을 망칠 수 있다.
■ 문제점에 대한 방향제시
Q. 리팩토링을 하려는 부분이 여러 사람들이 담당하고 있는 각 부분에 흗어져 있다면 어떻게 할것인가?
A. 어떤 경우에는 많은 전통적인 변화 관리 메커니즘이 적절하다. 반면에 소프트웨어가 잘 디자인되고 리팩토링되었다면,
다양한 리팩토링을 적용한다 해도 코드 베이스의 일부분만 영향을 받도록 서브 시스템이 충분히 분리 될 것이다.
Q. 다양한 버저의 코드가 있다면 어떻게 할 것인가?
A. 어떤 경우에 모든 버전에 대해서 리팩토링을 하는 것이 적절할 것이고 이 경우에 리팩토링을 적용하기 전에
모든 버전에 대해서 안전성 검사가 선행되어야 한다. 반면 어떤경우에는 몇가지 버전에 대해서만 리팩토리을 하는 것이
적절하고 이는 코드를 검사하고 리팩토링하는 프로세서를 간단하게 한다. 다양한 버전에서 변경을 관리할 때는
종종 전통적인 버전 관리 방법의 적용이 필요하다. 리팩토링은 변종 또는 버전을 업데이트된 코드 베이스로 통합하는데
유용할 수도 있고, 버전 관리를 간단하게 할지도 모른다.
■ 실제로 소프트웨어 전문가에게 리팩토링의 실제적인 가치를 설득하는 것은 리팩토링 연구가 박사학이 논문을 받을
만한 가치가 있는 일이라고 박사논문 심사위원을 설득시키는 것과 다르다
리팩토링 기법을 실제 프로그램에 적용할 계획을 가지고 있고, 조직에 있는 다른 사람들에게 리팩토링을 하도록 장려하기를 바란다.
■ 애플리케이션과 플랫폼 재사용을 촉진하기 위해서는 다양한 사람들의 마음을 움직이는 것이 필요하다.
이런 원칙은 단지 리팩토링과 소프트웨어 재사용에만 적용되는 것이 아니고, 기술 이전의 일반적인 문제이다.
다른 사람에게 리팩토링을 하도록 설득하고 있다면, 여기서 말한 문제에 초점을 맞추고 설득 대상에 맞게 접근해야한다