리팩터링

리팩터링()은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다.

리팩터링의 잠재적인 목표는 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하는 것이다. 리펙터링은 코드의 가독성을 향상시키고 복잡성을 감소시키는 효과를 가지며, 이러한 이점은 소스 코드의 유지 보수성을 개선하고 확장성을 개선하기 위해 더 단순하고, 깔끔하거나, 표현력이 뛰어난 내부 아키텍처 또는 객체 모델을 만들 수 있게 한다. 그리고 소프트웨어 엔지니어는 더 빠르게 수행되거나 더 적은 메모리를 사용하는 프로그램을 작성해야 하는 지속적인 과제에 직면해 있기에 성능 향상이 리팩터링의 또다른 목표가 된다.

일반적으로 리팩터링은 일련의 표준화된 기본 마이크로 리팩터링을 적용하는데, 각 리팩터는 소프트웨어의 동작을 보존하거나 최소한 기능적 요건에 대한 준수를 수정하지 않는 컴퓨터 프로그램의 소스 코드의 작은 변화이다. 많은 개발 환경에서 이러한 기본 리팩터링의 기계적 측면을 수행하기 위한 자동 지원을 제공한다. 코드 리팩터링을 잘 수행하면 소프트웨어 개발자가 기본 논리를 단순화하고 불필요한 수준의 복잡성을 제거하여 시스템의 숨겨진 또는 유휴 버그나 취약성을 발견하고 해결하는 데 도움이 될 수 있다. 그러나 잘못 수행되면 외부 기능을 변경하지 않거나 새로운 버그를 도입하거나 둘 다에 대한 요구 사항을 충족하지 못할 수 있다.

마틴 파울러의 저서 《리팩토링》에 다양한 리팩터링 패턴들이 정리되어 있다. 그중 대표적인 것 몇 가지를 들자면, 필드 은닉, 메서드 추출, 타입 일반화, 메서드 이름 변경 등이 있다.

자동화된 코드 리팩터링 
 DMS Software Reengineering Toolkit
 Eclipse 기반:
 Eclipse (자바, C++, PHP, Ruby, JavaScript)
 PyDev (파이썬)
 Photran (Eclipse IDE의 포트란 플러그인)
 델파이
 IntelliJ 기반:
 AppCode (오브젝티브-C, C, C++)
 IntelliJ IDEA (자바)
 PyCharm (파이썬)
 젯브레인즈 (자바스크립트)
 안드로이드 스튜디오 (자바)
 JDeveloper (자바)
 넷빈즈 (자바)
 스몰토크
 비주얼 스튜디오 기반:
 마이크로소프트 비주얼 스튜디오 (.NET and C++)
 CodeRush
 Visual Assist
 Wing IDE (파이썬)
 엑스코드 (C, 오브젝티브-C, Swift)

같이 보기 
 코드 검토
 소프트웨어 디자인 패턴
 난독화
 테스트 주도 개발
 모듈성 (프로그래밍)

각주

외부 링크 
 

익스트림 프로그래밍