RSS

Visual Assist X의 리팩토링 기능을 활용해보자

06 7

WholeTomato의 [Visual Assist X 베타 버전](http://www.wholetomato.com/products/matrixRefactoring.html)을 아직도 안 써보셨다면 지금 [당장 다운받은 후 설치](http://www.wholetomato.com/support/history.html)하기 바란다. 최근 추가된 환상적인 C++ 리팩토링 기능 덕분에 최근 몇 주간 정말 행복했다. 그래서 드디어 오늘 몇 카피 사달라고 상부에 보고를 해서 내일 결제할 예정이다. 후훗.

기본적으로 VAX의 리팩토링은 위 그림처럼 심볼에 마우스를 갖다대면 나오는 버튼을 몇 번 누르는 것만으로 끝이 난다. 가장 짭짤하게 재미를 본 기능 위주로 한번 설명해본다면…

## [Move Implementation to Source File](http://www.wholetomato.com/products/features/moveImplementation.html?more=yes)

UnitTest 를 기반으로 작업을 해보면, 일단 헤더 파일에 빈 함수를 만들고 컴파일을 시킨 후에야 실제 내용을 채워넣게 된다. 그러다보면 헤더 파일에 inline 으로 구현된 함수의 바디를 .cpp 로 손수 옮겨야 할 때가 많다. 지금까지는 이 작업이 귀찮다는 생각을 해 본적이 없는데, 가만히 분석해보니

1. 멤버 함수 전체를 Copy
2. 함수 바디를 삭제하고 맨 끝에 세미콜론 붙이기
3. .cpp 로 이동해서 적당한 위치에 Paste
4. 클래스명:: 을 긁어 붙이거나 타이핑한 후 코드를 적당히 꾸미기
5. (옵션) 디폴트 파라미터가 있을 경우 삭제하기

의 순서로 마우스와 키보드를 휘둘러야 했다는 것을 알 수 있었다. 단 지금부터는 클릭 두 번만으로 끝.

## [Rename](http://www.wholetomato.com/products/features/rename.html?more=yes)

예전에는 클래스나 함수, 데이터 멤버의 이름을 짓는 데 많은 시간을 투자했다. 그 당시만 해도 이름의 메타포 기능을 매우 중시했기에, 시간이 걸리더라도 한번 정하면 끝까지 바꾸지 않을 정도로 좋은 이름을 붙여야 한다는 게 업계의 표준이었기 때문이다. 그러나, agile을 배우고 난 지금은 먼저 컴파일부터 시켜 놓고 천천히 좋은 이름을 찾아서 그때 그때 바꿔나가면 된다는 생각이 강해졌다.

문제는 그 이름이 코드에 얼마나 많이 퍼져 있는가인데, 물론 정규식을 이용한 global replace를 써도 되지만 아무래도 불안한 게 사실. 결국에는 손수 하나씩 찾아서 고쳐나가다가 포기하고, 그냥 마음에 들지 않은 채로 내버려두는 경우가 많았다.

VAX의 rename 기능은 대체로 잘 동작하지만, 불안할 때에는 Find References로 체크해보기에도 좋다. 더 바라는 게 있다면 클래스 이름을 바꿀 경우 파일명도 바꿔줬으면 좋겠다. :P

## [Change Signature](http://www.wholetomato.com/products/features/changeSignature.html?more=yes)

멤버 함수의 파라미터 추가 삭제 및 이름을 바꿀 때 사용한다. 굳이 더 설명하지 않아도 명명백백한 기능이다. 단, virtual 함수일 경우 하위 클래스에서 재정의한 멤버 함수도 바꿔주면 좋겠지만, 당연히 안된다. :)

## [Encapsulate Field](http://www.wholetomato.com/products/features/encapsulateField.html?more=yes)

데이터 멤버에 대고 실행하면 accessor(일명 Get/Set 함수)을 자동으로 만들어준다. 헝가리안 표기법도 잘 찾아서 이름만 똑똑하게 뽑아주는데, AutoText를 편집해두면 입맛대로 이름을 수정할 수 있다. 더이상 __PROPERTY 매크로로 Get/Set을 정의할 필요가 없어진 것이다. 만쉐~

## 기타

이 외에도 몇 가지 좋은 기능들이 많다.

* Extract Method : 긴 코드를 함수로 한번만에 묶어내준다. 그런데 생각보다 많이 사용해보지는 못했다.
* Create Implementation : 함수 선언에 대고 클릭하면 .cpp 에 구현부를 자동으로 만들어준다. 그 편리함은 이루 말할 수 없다. ㅠ_ㅠ
* Create Declaration : 위 기능과 반대로 구현부부터 만들고 나서 헤더 파일에 선언문을 자동으로 추가해주는 기능이다. 보통은 extern 문을 생성할 때 가장 많이 사용된다.

프로젝트가 커질수록 느려진다는 쑥갓군의 보고도 있지만, 작은 프로젝트에서는 속도 문제가 거슬리지는 않는 수준이다. 사소한 버그들만 고쳐진다면 정말 위대한 도구가 될 것 같다. 단돈 125$면 정말 편리한 개발이 가능해지니, 어서 어서 팀장/실장을 졸라서 결제하시기 바란다.

 

Reiot 에 관하여

온라인 게임 서버 및 네트워크 프로그래머인 척하는 인간. 사진을 대충 찍기를 좋아한다.
2 Comments

게시자: 켬 2006/07/06 in programming

 

Visual Assist X의 리팩토링 기능을 활용해보자에 2개의 응답

  1. 쑥갓

    2006/07/06 at 11:56 pm

    프로젝트가 커질수록 느려진다기 보다는 정확하진 않지만 매크로나 템플릿등 분석하기 곤란한 내용이 많은 경우에 느려지는듯..;
    전에도 그랬다가 개선됐었는데 파싱내용에 리펙토링쪽 내용이 추가되면서 다시 무거워진듯..;;

     
  2. limited10

    2011/04/24 at 3:38 am

    리팩토링 구체적인 사용 용도가 쓰여져 있어서 리팩토링에 대해 이해가 잘 되네요. ^^

     

댓글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

 
팔로우

모든 새 글을 수신함으로 전달 받으세요.