컴파일러 내부 오류를 경험하고 해당 코드에 대해서 리팩토링을 결심!!
관련된 작업은 Extract Method 이며 자동으로 해당 부분을 추출하여 Method를 만들어 주는 툴을 중심으로 알아 보았다.
이것 저것 알아보던 중 2개의 후보가 눈에 띠었다.
대상은 "Refactor! For Visual C++ 2005"와 "Visual Assist X" 에서 지원하는 Refactoring 에 관련된 기능이다.
결론부터 얘기하면 "Refactor! For Visual C++ 2005"의 기능이 쓸만 하였고 Visual Assist X 의 리팩토링 기능은 간단한 기능을 제외하고는 그다지 유용하지 못하였다.
Visual Assist X
Visual Assist X 는 Visual Studio 에서 코딩에 도움을 주는 유용한 기능이 있는 Add-in 툴로서 최신 버전에는 리팩토링 기능까지 추가가 되었다.
예상했던 대로 속도는 무난히 빨랐으며 간단한 목적으로 사용하기에는 문제가 없으나 몇가지 사항에 대해서는 조심히 사용 해야 될듯하다.
1. Extract Method 의 경우 10개 까지의 파라미터 까지 밖에 지원 하지 않는다.
- Extract Method의 대상 코드의 파라미터의 지원이 10개까지 밖에 지원하지 않는다
- 나머지에 대해서는 수작업 신공..
2. Extract Method 의 구문 중 return 이 포함되어 있는 구문에 대해서 별 다른 코드를 넣어주지 않는다.
- 이것도 나머지는 수작업 신공 -_-;
{
int a = 0;
if (a == -1) {
return false;
}
cout << "next process " << endl;
a = 10;
return true;
}
bool MyMethod( int a )
{
if (a == -1) {
return false;
}
cout << "next process " << endl;
}
bool Run()
{
int a = 0;
return MyMethod(a);
a = 10;
return true;
}
3. Rename 의 경우 바꾸지 못하는 경우 발생
- 특수한 경우에 구문 분석으로 발견하지 못하여 변경을 못해주는 경우 발생
4. VC++6, VC++2005 버전등 여러 버전 사용 가능
- 단 VC++6 의 경우 코드 "실행 취소"로 되 돌릴 경우 리팩토링 액션 단위가 아닌 한줄 한줄의 단위로 되 돌리기가 된다.
- 머 이것도 VC++6 을 안쓰면 되지 머..
Refactor! For Visual C++ 2005
1. 모든 기능적인 부분에서 합격점이지만 속도가 많이 느린 경우 발생
- 특히 많은 코드에 대해서 리팩토링의 경우 IDE가 뻣었나! 라는 생각이 들 정도로 행이 걸려 있는 상태가 지속
- 아마도 아래와 같은 UI 부분의 지원 때문에 느리지 않나 생각이 들며 IDE를 처음 로딩할때도 DxCore 라는 모듈을 로딩할때 시간이 좀 걸린다.
2. Visual Assist X 에서 문제였던 코드 중간의 return 부분을 별도의 return 여부를 판단하는 파라미터를 이용하여 처리 해주고 있다.
bool Run()
{
int a = 0;
if (a == -1) {
return false;
}
cout << "next process " << endl;
a = 10;
return true;
}
{
pShouldReturn = false;
if (a == -1) {
pShouldReturn = true;
return false;
}
cout << "next process " << endl;
return false;
}
bool Run()
{
int a = 0;
bool lShouldReturn;
bool lResult = RunExtracted(a, lShouldReturn);
if (lShouldReturn)
return lResult;
a = 10;
return true;
}
3. Rename 등의 작업을 할때 링크 라는 개념의 함수의 정의, 구현, 호출 부분을 연결된 데이터를 관리하며 UI도 비슷하게 동작을 하는것 같다
- 허나 UI때문인지 속도 부분에서도 약간 더딘 면이 없지 않아 있다.
4. 무엇보다도 장점인 무료.. 허나 현재는 VC++ 2005만 무난히 적용 되는 것으로 보이며,
추후에는 더 발전 되어있는 모습으로 더욱 쓸만한 툴이 되지 않을까 생각한다.
결론.
위의 두개의 툴은 그 외에도 많은 리팩토링 기법의 도구를 제공을 하며,
C++의 문법 복잡성에 의해 다른 언어에 비해서 많이 더뎠던 리팩토링 자동화 부분에서 어느정도 해소가 되지 않았나 생각이 든다.
아 이제 C++에서도 리팩토링을 툴로 제공을 하는구나... 흐흐..
앞으로 좀 더 발전을 하면 VC++ 에서도 C#처럼 내장 IDE에서 리팩토링을 제공을 하는 날이 있지 않을까 생각을 한다.
이상 허접한 리팩토링 툴 비교기..
'Dev > C++' 카테고리의 다른 글
C++0x Lambda (0) | 2009.05.20 |
---|---|
C++0x 지원 컴파일러 목록 (0) | 2009.05.20 |
An Overview of the Coming C++ (C++0x) Standard (0) | 2008.12.29 |
asio C++ library (0) | 2008.08.22 |
C++ 0x - Herb Sutter의 블로그 글 (0) | 2008.07.29 |