관리 메뉴

김종권의 iOS 앱 개발 알아가기

[Refactoring] 2-1. 리팩터링 원칙, 리펙터링의 목적 본문

Refactoring (리펙토링)

[Refactoring] 2-1. 리팩터링 원칙, 리펙터링의 목적

jake-kim 2022. 1. 20. 22:58

리팩터링 원칙

  • 리펙터링이란?
    • 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
  • 주의: 리팩터링은 특정한 방식에 따라 코드를 정리하는것이며, 단순히 코드를 정리하는 작업은 리펙터링이 아니고 `재구성(restructuring)`이라고 명칭

목적을 명확히 할 것

  • 기능 추가인지 리펙터링인지 인식하면서 프로그래밍할 것
    • 기능 추가: 기존 코드는 절대 건드리지 않고 새 기능을 추가 (진정성은 테스트를 추가해서 통과하는지 확인하는 방식으로 측정)
    • 리펙토링: 기능 추가는 절대 하지 않기로 다짐한 뒤 오로지 코드 재구성에만 전념 (테스트도 새로 만들지 않을 것)
  • 리팩터링의 목적은 개발 기간을 단축하기 위함 (기능 추가 시간을 줄이고, 버그 수정 시간을 줄이는 것)

리팩터링을 하는 이유

  • 소프트웨어 설계가 좋아지는 효과
    • 리팩터링을 하지 않으면 내부 설계(아키텍처)가 썩기 쉽고, 아키텍처를 충분히 이해하지 못한 채 단기 목표만을 위해 코드를 수정하다 보면 기반 구조가 무너지기 쉬운 현상
  • 소프트웨어를 이해하기 쉬워지는 장점
    • 보통 프로그램을 동작시키는 데만 신경 쓰다 보면 나중에 그 코드르 다룰 개발자를 배려하지 못한채 진행되지만, 리팩터링은 코드가 더 잘 읽히게끔 도움을 주는 효과
    • 곧 리팩토링은 내 의도를 더 명확하게 전달하도록 개선할 수 있는 장점이 존재
    • 게으른 프로그래머 - 내가 직접 짠 코드를 기억할 필요가 있는 것들은 최대한 코드에 담도록 수정
  • 리팩터링하면 버그를 쉽게 탐색 
    • 리팩터링하다보면 코드가 하는 일을 깊이 파악하게 되면서 새로 깨달은 것을 곧바로 코드에 반영
    • 프록그램의 구조를 명확하게 다듬으면 그냥 '이럴 것이다'라고 가정하던 점들이 명확히 들어나면서 버그도 쉽게 발견
  • 프로그래밍 속도 향상
    • 보통 리팩터링을 하면 시간이 더 소모된다고 생각하지만, 장기적으로 보았을 때 한 시스템에 기능을 추가하려면 훨씬 오래걸리는 현상
    • 기존 코드베이스에 잘 녹여낼 방법을 찾는데 시간이 들고, 기능을 추가하면 버그가 발생하는 일이 잦고, 이를 해결하는데 시간이 더욱 소모
    • 20년 전만해도 설계를 잘하려면 코딩을 시작하기 전에 설계부터 완벽히 마쳐야 했지만, 코딩 단계에 한번 들어서면 코드가 부패할 일이 많고 빠른 프로그래밍을 위해서는 리팩터링이 중요

리팩터링을 하는 타이밍

  • Don Roberts의 3의 법칙
    • 1) 처음에는 그냥 한다
    • 2) 비슷한 일을 두 번째로 하게 되면, 일단 계속 진행한다
    • 3) 비슷한 일을 세 번째 하게 되면 리팩터링한다
  • 리팩터링이 필요없는 코드는?
    • 리팩터링하는 것보다 처음부터 새로 작성하는게 쉬운 경우

[Refactoring] 2-2. 리팩터링 원칙에서 계속

 

* 참고

- Refactoring (Marting Flowler)

Comments