1 minute read

리팩터링

출처: 리팩터링 2판, 마틴 파울러

02 리팩터링 원칙

page 79 ~ 111

2.1 리팩터링 정의

  • 리팩터링: [명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법

  • 리팩터링(하다): [동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.

2.2 두 개의 모자

  • 소프트웨어 개발할 때 목적이 ‘기능 추가’냐, 아니면 ‘리팩터링’이냐를 구분하는 것을 두 개의 모자two hats에 비유했다. 소프트웨어 개발하는 동안 두 모자를 바꿔 써 가며 작업한다.

2.3 리팩터링하는 이유

리팩터링하면 소프트웨어 설계가 좋아진다

리팩터링하면 소프트웨어를 이해하기 쉬워진다

리팩터링하면 버그를 쉽게 찾을 수 있다

리팩터링하면 프로그래밍 속도를 높일 수 있다

2.4 언제 리팩터링해야 할까?

3의 법칙 - 돈 로버츠

  1. 처음에는 그냥 한다.
  2. 비슷한 일을 두 번째로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
  3. 비슷한 일을 세 번째 하게 되면 리팩터링한다.

준비를 위한 리팩터링: 기능을 쉽게 추가하게 만들기

이해를 위한 리팩터링: 코드를 이해하기 쉽게 만들기

쓰레기 줍기 리팩터링

계획된 리팩터링과 수시로 하는 리팩터링

오래 걸리는 리팩터링

코드 리뷰에 리팩터링 활용하기

관리자에게는 뭐라고 말해야 할까?

리팩터링하지 말아야 할 때

내부 동작을 이해해야 할 시점에 리팩터링해야 효과를 제대로 볼 수 있다.

2.5 리팩터링 시 고려할 문제

새 기능 개발 속도 저하

리팩터링의 궁극적인 목적은 개발 속도를 높여서, 더 적은 노력으로 더 많은 가치를 창출하는 것 이다.

코드 소유권

코드 소유권이 나뉘어 있으면 리팩터링에 방해가 된다.

브랜치

지속적 통합과 리팩터링을 합쳐서 익스트림 프로그래밍이라고 하는데, 두 기법의 궁합이 잘 맞다.

테스팅

리팩터링 하기 위해서는 자가 테스트 코드를 마련해야 한다.

레거시 코드

레거시 시스템을 파악할 때 리팩터링이 굉장히 도움된다.

데이터베이스

2.6 리팩터링, 아키텍처, 애그니(YAGNI)

You aaren’t going to need it

2.7 리팩터링과 소프트웨어 개발 프로세스

자가 테스트 코드와 리팩터링을 묶어서 테스트 주도 개발이라 한다. 리팩터링의 첫 번째 토대는 자가 테스트 코드다.

2.8 리팩터링과 성능

리팩터링은 성능 좋은 소프트웨어를 만드는 데 기여한다. 단기적으로 보면 리팩터링 단계에서는 성능이 느려질 수도 있다. 하지만 최적화 단계에서 코드를 튜닝하기 훨씬 쉬워지기 떄문에 결국 더 빠른 소프트웨어를 얻게 된다.

2.9 리팩터링의 유래

2.10 리팩터링 자동화

2.11 더 알고 싶다면

리팩터링 연습에 주력한 책: 윌리엄 웨이크가 쓴 ‘리팩터링 워크북’(인사이트, 2006)

소프트웨어 패턴 + 리팩터링: 패턴을 활용한 리팩터링, 조슈아 케리에프스키(인사이트, 2011)

리팩터링 데이터베이스

리팩터링 HTML

레거시 코드 활용 전략

Refactoring: Ruby Edition