Web/공통
[REFACTORING] 리팩토링의 정의와 사용하는 이유
moonthree
2023. 5. 23. 22:39
1. 리팩토링 이란?
💡 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
- 리팩토링은 다소 두루뭉실한 의미로 통용된다.
- 저자의 관점에서 리팩토링은 다음과 같다.
💡 특정한 방식에 따라 코드를 수정하는 것만이 리팩토링이다.
- 함수를 추출하고, 함수를 옮기고, 함수 선언을 바꾸는 것과 같은 과정을 거치며 리팩토링을 진행한다.
- 버그를 발견하더라도 리팩토링 후에 그대로 남아있어야 한다.
⇒ Why..? 겉보기 동작 즉, 리팩토링 전과 후의 코드는 똑같이 동작해야 하기 때문이다.
1-1. 리팩토링의 목표
- 복잡성 감소
- 가독성 향상
- 유지 보수성을 개선
- 확장성을 높임
1-2. 리팩토링시 금지 사항
- 기능 변경/추가
- 버그 수정
- 성능 개선
- 버전 업데이트
1-3. 어떻게 리팩토링?
💡 소프트웨어 기능을 보존하면서 설계, 구조 및 구현을 개선
- 기존 프로그램의 기능과 동작을 유지한채로
a. 이를 보장하기 위해 테스트 코드를 사용하여 검증한다. - 코드의 냄새에 따라 적절한 리팩토링 기법을 선택하여 점진적으로 적용해 나간다.
2. 리팩토링하는 이유
2-1. 소프트웨어 설계가 좋아진다.
설계의 어려움
- 개발 초기 단계부터 완벽한 코드/시스템 설계는 어렵다.
- 이 상태에서 단기 목표를 위해 계속해서 코드를 쌓다보면 설계가 무너진다.
- 규칙적인 리팩터링은 코도의 구조를 지탱해줄 것이다.
중복 코드 제거
- 설계가 나쁘면 코드가 길어지기 쉽다. 같은 일을 하는 코드가 여러 곳에 나타날 수 있으므로.
- 그래서 중복 코드 제거는 설계 개선의 중요한 한 축이다.
- 코드량을 줄인다고 성능이 개선되는 경우는 별로 없다.
- 하지만 코드량이 줄면 수정하는 데 드는 노력은 크게 감소한다.
- 중복 코드를 제거하면 모든 코드가 언제나 고유할 일을 수행함을 보장할 수 있으며, 이는 바람직한 설계의 핵심이다.
2-2. 소프트웨어를 이해하기 쉬워진다.
💡 컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다.
컴퓨터에게 내 의도를 전달하는 것은 쉽다. 사람에게 전달하는 것에 비한다면
- 논리적 흐름에 따라 코드를 작성하여 잘 동작하지만, 약간은 복잡하게 느껴지는 현재의 내 코드를 3개월 후의 내가 곧바로 이해할 수 있을까??
- 잘 작동하지만 이상적인 구조는 아닌 코드가 있다면, 잠깐 시간을 내서 리팩토링 해보자.
- 그러면 코드의 목적이 더 잘드러나게, 내 의도를 더 명확하게 전달하도록 개선할 수 있다.
- 또한, 코드를 이해하기 쉽다는 말은 버그를 찾기도 쉽다는 말이다.
2-3. 프로그래밍 속도를 높일 수 있다.
💡 리팩토링이 코드 품질을 높일 수 있다는 점에는 대부분 쉽게 수긍한다. 그런데 개발 속도는 어떻게 높일 수 있을까?
지구력 가설
- 내부 설계에 심혈을 기울이면 소프트웨어의 지구력이 높아져서 빠르게 개발할 수 있는 상태를 더 오래 지속할 수 있다.
- 반면, 내부 품질이 떨어지는 코드는 기능을 추가할수록 기존 코드베이스에 잘 녹여내기가 어려워져 개발 시간이 증가한다.
- 또한, 처음부터 좋은 설계를 마련하기란 매우 어려우며, 프로그램의 요구사항은 꾸준히 바뀐다. 그러므로 리팩토링을 통해 기존 코드의 설계를 개선하는 작업이 필요하다.
- 결과적으로, 빠른 개발이라는 목표를 달성하기 위해선 리팩토링이 필요하다.