리팩토링 개념, 1번 더 프로그램 내부 구조의 개선

리팩토링 개념 설명
리팩토링 개념 설명

리팩토링 개념에 대해서 이야기해봅시다.

리팩토링 개념에 대한 설명

리팩토링 개념(Refactoring)은 기존의 프로그램을 보다 더 좋게 만들기 위해서 소프트웨어의 외견 상 기능이나 동장, 처리에 대해서는 변경하지 않고 프로그램 내부 구조를 개선하는 것을 의미합니다.

리팩토링의 경우 주로 읽기 힘든 주석이나 비효율적인 내부 소스코드, 비효율적인 처리 등을 다시 작성하여 잠재적인 오류를 줄이고 유지보수 관리를 쉬운 구조로 만들게 됩니다. 리팩토링 과정을 진행하더라도 소프트웨어의 외견상 기능은 바뀌지 않습니다. 즉, 리팩토링은 프로그램 내부 소스 코드 중 좋지 않은 내용들을 내부 정리하는 것입니다. 비유를 하자면 전기 줄을 전기 콘센트에 꼽았을 때 전기가 통하는 결과는 동일하지만 복잡하게 엉켜 있는 전기 줄들을 엉키지 풀어서 배선을 정리함으로써 플러그를 잘못 뽑는 사태가 발생하지 않도록 방지하는 것과 비슷합니다.

리팩토링은 프로그램 내부적으로 좋지 않은 모양새를 개선하는 것으로 프로그램과 소프트웨어의 기능은 바꾸지 않는 내부 수정 작업입니다. 리팩토링 과정에서는 알기 쉬운 코드로 다시 소스코드를 작성하거나 표현되어 있는 주석 내용들을 보다 쉽게 이해할 수 있도록 고치는 작업이 진행됩니다.

리팩토링을 더 크게 확장하여 기능은 바꾸지 않지만 프로그램을 전부 새로 다시 다 작성하는 것을 리라이트라고 부릅니다.




리팩토링 개념에 대한 이해

리팩토링 개념(Refactoring)은 프로그램 기능을 바꾸지 않고 프로그램 소스 코드의 내부 구조를 개선하는 것을 말합니다.

프로그램이 동작하는 기능을 변경하지 않고 향후 유지보수가 쉽게 하기 위해서 소스코드를 수정하는 것입니다. 프로그램 결과로 얻을 수 있는 내용은 동일하지만 비효율적인 구조로 코딩이 되어 있는 내용을 효율적인 구조로 다시 코딩하는 것입니다. 개발자의 경험과 실력에 따라 기능과 결과는 동일하지만 소스코드가 복잡해질 수 있습니다. 좋은 소스코드는 복잡한 코딩 보다는 쉽고 간단하고 간결한 코딩입니다. 그리고 소스코드가 복잡하면 향후 실제 기능 수정이나 추가를 진행할 때 오류가 생길 가능성이 높아집니다. 이러한 문제를 개선하기 위해서 기존 만들어진 프로그램을 계획을 세워서 개선하는 일입니다.

리팩토링은 프로그램 내부의 오류를 수정하거나 기능의 변경 작업을 진행하는 것이 아니라 모양새가 좋지 않은 프로그램 내부를 개선하는 작업입니다. 같은 처리를 하기 위해서 더 단순하고 효율적인 코드로 다시 프로그램을 짜거나 처리 구조를 정리하고 다른 개발자가 보더라도 쉽게 이해할 수 있는 주석들을 추가하거나 기존 주석을 쉽게 이해할 수 있도록 변경하는 작업입니다.

리팩토링을 더 확장하면 리라이트가 됩니다.

리라이트(Rewrite)는 사용자가 외관상 보게 되는 기능들은 유지하면서도 프로그램의 내용을 전면적으로 새로 다시 다 작성하는 것을 의미합니다. 기존 프로그램 구조를 고려하지 않고 처음부터 새로 다시 설계하는 개념입니다. 리라이트는 기존의 상태로는 더 이상 기능 확장이 어려울 경우 향후 미래를 생각해서 고생하더라도 새로 다시 다 만드는 것입니다. 리라이트는 기존 프로그램 구조에서 치명적인 문제가 있을 때 사용하는 기법입니다.

리팩토링은 수고스럽지만 유익한 활동입니다. 리팩토링을 진행할 경우 개발 공수가 필요하게 되며 리소스가 투입되어야 하지만 기존에 잘못되어 있는 것을 미래를 생각해서 미리 개선하는 것입니다. 향후 개발 효율과 프로그램의 품질을 향상시키기 위해서 진행하게 됩니다. 그래서 리팩토링은 낭비적인 활동이 아니라는 것을 이해해야 합니다.

리팩토링 과정에서는 오류에 대해서는 수정하지 않습니다. 리팩토링은 어디까지나 내부 구조를 개선하기 위한 작업이기 대문에 오류가 있다는 것을 알아도 원칙적으로는 리팩토링 과정에서 수정하지 않는 것입니다. 물론 오류가 있을 경우 리팩토링과 별개로 오류 조치를 진행할 수 있습니다.

리팩토링의 타이밍에 대해서는 The Rule of Three 개념이 있으며 유사한 내용이 3번 이상 반복할 때 리팩토링을 하도록 제안되고 있습니다.