[REFACTORING] 리팩토링의 정의와 사용하는 이유

Web/공통|2023. 5. 23. 22:39

1. 리팩토링 이란?

💡 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법

  • 리팩토링은 다소 두루뭉실한 의미로 통용된다.
  • 저자의 관점에서 리팩토링은 다음과 같다.

💡 특정한 방식에 따라 코드를 수정하는 것만이 리팩토링이다.

  1. 함수를 추출하고, 함수를 옮기고, 함수 선언을 바꾸는 것과 같은 과정을 거치며 리팩토링을 진행한다.
  2. 버그를 발견하더라도 리팩토링 후에 그대로 남아있어야 한다.
    ⇒ Why..? 겉보기 동작 즉, 리팩토링 전과 후의 코드는 똑같이 동작해야 하기 때문이다.

1-1. 리팩토링의 목표

  1. 복잡성 감소
  2. 가독성 향상
  3. 유지 보수성을 개선
  4. 확장성을 높임

1-2. 리팩토링시 금지 사항

  1. 기능 변경/추가
  2. 버그 수정
  3. 성능 개선
  4. 버전 업데이트

1-3. 어떻게 리팩토링?

💡 소프트웨어 기능을 보존하면서 설계, 구조 및 구현을 개선

  1. 기존 프로그램의 기능과 동작을 유지한채로
    a. 이를 보장하기 위해 테스트 코드를 사용하여 검증한다.
  2. 코드의 냄새에 따라 적절한 리팩토링 기법을 선택하여 점진적으로 적용해 나간다.

2. 리팩토링하는 이유

2-1. 소프트웨어 설계가 좋아진다.

설계의 어려움

  • 개발 초기 단계부터 완벽한 코드/시스템 설계는 어렵다.
  • 이 상태에서 단기 목표를 위해 계속해서 코드를 쌓다보면 설계가 무너진다.
  • 규칙적인 리팩터링은 코도의 구조를 지탱해줄 것이다.

중복 코드 제거

  • 설계가 나쁘면 코드가 길어지기 쉽다. 같은 일을 하는 코드가 여러 곳에 나타날 수 있으므로.
  • 그래서 중복 코드 제거는 설계 개선의 중요한 한 축이다.
  • 코드량을 줄인다고 성능이 개선되는 경우는 별로 없다.
  • 하지만 코드량이 줄면 수정하는 데 드는 노력은 크게 감소한다.
  • 중복 코드를 제거하면 모든 코드가 언제나 고유할 일을 수행함을 보장할 수 있으며, 이는 바람직한 설계의 핵심이다.

2-2. 소프트웨어를 이해하기 쉬워진다.

💡 컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다.

컴퓨터에게 내 의도를 전달하는 것은 쉽다. 사람에게 전달하는 것에 비한다면

  • 논리적 흐름에 따라 코드를 작성하여 잘 동작하지만, 약간은 복잡하게 느껴지는 현재의 내 코드를 3개월 후의 내가 곧바로 이해할 수 있을까??
  • 잘 작동하지만 이상적인 구조는 아닌 코드가 있다면, 잠깐 시간을 내서 리팩토링 해보자.
  • 그러면 코드의 목적이 더 잘드러나게, 내 의도를 더 명확하게 전달하도록 개선할 수 있다.
  • 또한, 코드를 이해하기 쉽다는 말은 버그를 찾기도 쉽다는 말이다.

2-3. 프로그래밍 속도를 높일 수 있다.

💡 리팩토링이 코드 품질을 높일 수 있다는 점에는 대부분 쉽게 수긍한다. 그런데 개발 속도는 어떻게 높일 수 있을까?

지구력 가설

  • 내부 설계에 심혈을 기울이면 소프트웨어의 지구력이 높아져서 빠르게 개발할 수 있는 상태를 더 오래 지속할 수 있다.
  • 반면, 내부 품질이 떨어지는 코드는 기능을 추가할수록 기존 코드베이스에 잘 녹여내기가 어려워져 개발 시간이 증가한다.
  • 또한, 처음부터 좋은 설계를 마련하기란 매우 어려우며, 프로그램의 요구사항은 꾸준히 바뀐다. 그러므로 리팩토링을 통해 기존 코드의 설계를 개선하는 작업이 필요하다.
  • 결과적으로, 빠른 개발이라는 목표를 달성하기 위해선 리팩토링이 필요하다.

'Web > 공통' 카테고리의 다른 글

[Openvidu] openvidu-react 함수형 컴포넌트  (0) 2023.05.24
Cookies  (0) 2022.09.08
[API] 드림코딩 - API 개념 정리 및 유용한 사이트들  (2) 2022.08.20

댓글()