프로그램 아키텍쳐/Refactoring

리팩토링(Refactoring) 개념

본클라쓰 2009. 8. 27. 10:15

리팩토링은 소프트웨어 개발 시 프로그램 코드를 보다 쉽게 이해할 수 있고, 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작에는 변화 없이 프로그램 코드를 변경하는 것을 말합니다.

 

프로그램 코드를 작성하다 보면 잦은 구조 변경이나 추가적인 요구 사항을 작성하다 스파게티코드가 되는 경우가 종종 발생합니다. 리팩토링은 이 때 프로그램 코드를 정리해 보다 보기 쉬운 코드로 변경하는 것을 말합니다.

 

리팩토링의 기본 원칙은 중복된 코드를 줄이고, 긴 메소드를 수정하는 것입니다. 이 원칙은 많은 프로그램을 분석한 결과로 최적의 상태로 가장 오래 살아남는 객체 프로그램의 메소드들이 짧다는 것을 알아내고 메소드가 긴 경우 메소드를 줄이는 작업을 하는 것입니다. 또한, 중복된 코드는 같은 코드를 사용하는 부분을 추출하여 따로 관리함을 의미합니다.

 

리팩토링은 디자인패턴에 기반을 두고 있습니다. 디자인 패턴 또한 객체들 간의 관계를 분석해 최적의 객체 관계를 유지하기 위해 객체 관계를 정의하는 방법입니다.

 

리팩토링을 적용하면 중복된 코드를 제거하는데 효과적입니다. 중복된 코드는 한 클래스의 서로 다른 메소드 안에 같은 코드가 있는 경우, 동일한 슈퍼 클래스를 갖는 두 서브 클래스에 같은 코드나 나타나는 경우, 메소드들이 같은 작업을 하지만 다른 알고리즘을 사용하거나 서로 관계가 없는 두 클래스에 중복된 코드가 있는 경우입니다.

 

 

 

구조화되지 않는 아키텍처의 세 가지 유형 

 

1. 커다란 진흙덩이(Big ball of Mul)

2. 스파게티(Spaghetti)

3. 카드로 만든 집(House of Cards)

 

 

 

리팩토링을 하는 목적

 

리팩토링을 하는 목적은 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만들기 위함입니다. 겉으로 보이는 소프트웨어의 기능은 변경하지 않고 내부 시스템을 변경하는 것입니다. 만약 새로운 기능을 추가해야 할 때 프로그램의 코드가 새로운 기능을 추가하기 쉽도록 구조화되어 있지 않는 경우 먼저 리팩토링을 실시해 프로그램에 기능을 추가히 쉽게 한 후 기능을 추가하는 방법을 사용하는 것입니다.

 

또한, 리팩토링을 실시하다 보면 버그를 찾아내기 쉽게 합니다. 리팩토링은 프로그램이 정리되면서 숨어 있는 버그를 찾기 쉬워 집니다.

 

 

 

리팩토링과 디자인 패턴, 최적화의 차이점

 

프로그램을 작성할 때는 디자인적인 요소를 먼저 살펴봐야 합니다. 즉, 객체들간의 관계 및 코드 작성시 변경과 수정에 대한 처리 방법을 미리 정의하는 것을 디자인적인 요소로 봅니다.

 

리팩토링도 디자인의 일종입니다. 하지만 디자인 패턴과 다른 점은 디자인 패턴은 코드 작성 전에, 리팩토링은 코드를 작성하다가 정리하거나 모든 코드를 다 작성 후 객체간의 관계나 객체를 재정의하는 것입니다.

 

하지만 최적화는 다릅니다. 최적화는 코드를 작성하는 단계에서는 신경쓰지 않습니다. 구현은 언제나 기능과 버그 없는 코드의 생산에 초점을 맞춰야 하며, 최적화는 떼어놓고 좋은 디자인에 신경쓰면서 성능 문제는 고려하지 않아야 합니다. 성능 튜닝인 최적화는 코드의 기능이 완전할 때 효율적인 프로그램이 되도록 생각하는 문제입니다.