5.1 리팩터링의 네 가지 요소: 목적, 대상, 시기, 방법
<aside>
📚 리팩터링에 있어서 왜, 무엇을, 언제, 어떻게 해야 하는지 알아야 더 잘할 수 있다.
</aside>
5.1.1 리팩터링의 목적
- 리팩터링 이란
- 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선하는 것으로
소프트웨어의 외부 동작을 변경하지 않고 수정 비용을 줄이는 것을 목적으로 한다.
- 리팩터링은 코드 품질을 보장하는 효과적인 수단이다.
- 기술의 업데이트, 요구 사항의 변경, 인력 리소스의 이동에 따라 코드 품질이 저하될 수 있는데, 이 때 아무도 코드의 품질을 책임지지 않는다면 코드는 점점 더 지저분해질 것이다.
- 고품질의 코드는 훌륭한 설계 한 번에 나오는 것이 아니라 반복적인 작업의 결과로 나오는 것이다.
- 리팩터링 작업 과정에서 설계상의 문제를 발견하기 쉽고, 초기 단계에서 과도한 설계를 효과적으로 방지할 수 있다.
- 개발자의 기술적 성장을 위해서도 중요하다.
- 이론적 지식 뿐만 아니라 설계 원칙과 디자인 패턴을 응용해볼 수 있는 중요한 기회이다.
- 리팩터링 아무나 하는거 아니다.
주니어
: 기존 코드 프레임워크에서 코드를 수정하거나 새로운 기능을 개발한다.
시니어
: 처음부터 코드 구조를 설계하고 코드 프레임워크를 만든다.
수석 SW 엔지니어
: 코드의 품질을 책임지며 적시에 코드에서 문제를 찾고, 목표를 가지고 코드를 리팩터링하며 항상 코드 품질을 보증 관리한다.
5.1.2 리팩터링의 대상
- 대규모 리팩터링
- 시스템, 모듈, 코드 구조, 클래스 간 관계의 리팩터링을 포함하여 최상위 코드 설계를 리팩터링 하는 것
- 계층화, 모듈화, 분리, 재사용 가능한 구성 요소 추상화가 사용된다.
- 코드 변경이 많고 그 영향이 크기 때문에 작업이 어렵고 시간이 많이 걸리며 버그가 발생할 위험이 높다.
- 소규모 리팩터링
- 표준 명명 / 주석, 초대형 클래스와 함수 제거, 중복 코드 추출과 같이 주로 클래스, 함수, 변수 수준에서 코드 세부 정보를 리팩터링 하는 것을 말한다.
- 수정이 집중적으로 이루어지며, 프로세스가 간단하고 조작성이 강하다.
- 소요 시간이 짧고 버그가 발생할 위험이 낮다.
5.1.3 리팩터링의 시기
- 코드를 유지 관리하는데 어려움이 있고 버그가 빈번하게 발생하는 등 심각한 문제가 있다면 리팩터링 하기에는 너무 늦었다.
- 지속적인 리팩터링
- 단위 테스트와 코드 리뷰를 개발의 일부로 취급하는 것처럼 지속적인 리팩터링을 개발의 일부로 다루어야 한다.
5.1.4 리팩터링의 방법
- 대규모 리팩터링
- 사전에 종합적인 리팩터링 계획을 수립해 질서 있고 단계적으로 진행해야 한다.
- 조직적이고 계획적이며 신중하고 경험 있는 수석 엔지니어가 주도하는 것이 좋다.