Hyewon의 개발노트

리팩터링 2판(책 리뷰)

JS로 되어있는 리펙터링 2판을 읽으며 내용을 요약해 정리한다.

리팩터링 규칙 및 방향성

  • 항상 코드베이스를 작업하기 전보다 더 건강하게 고친다.
  • 좋은 코드를 가늠화는 확실한 방법음 얼마나 수정하기 쉬운가이다.
  • 단계를 잘 나누어 리팩토링 한 후, 매 단계마다 컴파일해서 작동되는 상태인지 확인한다.

Chapter 01 리팩터링 : 첫번째 예시

1단계. 구조잡기

  • 하나의 리팩터링을 문제없이 끝낼 때마다 커밋한다.
    • 그래야 중간간에 문제가 생기더라도 이전의 정상 상태로 쉽게 돌아갈 수 있다.
  • 하나의 함수는 하나의 역할을 부여한다. ( 함수 쪼개기 )
  • 변수의 이름을 명확하게 명명한다.
    • JS와 같은 동적 타입언어를 사용할 때는 타입이 드러나게 작성하면 좋다. ( 예를들어, 접두어에 타입이름을 적는것 )
    • 매개변수의 역할이 뚜렷하지 않을 때는 부정관사(a/an)을 붙인다.
  • 함수의 반환값에는 result라는 이름을 사용한다.
    • 이렇게 하면 그 변수의 역할을 쉽게 알 수 있다.
  • 임시 변수를 질의 함수로 바꿔라
    • 임시로 생성된 변수들을 함수로 추출해내어 리턴값을 받는것을 권장한다.
    • 임시 변수 ( 지역변수 )를 제거하면 추출 작업이 훨씬 쉬워진다. «««< HEAD:_posts/2022-01-07-리펙터링 2판(책 리뷰).md
    • 따라서, 추출작업 전에는 지역 변수부터 제거하는것이 좋다.
  • 조건부 로직을 다형성으로 바꾸기

    • 따라서, 추출작업 전에는 지역 변수부터 제거하는것이 좋다. ( 선언한 변수를 인라인화 한다. )
  • 조건부 로직을 다형성으로 바꾸기 ( 새로운 케이스가 추가되거나 변경될때 수정 및 추가해야할 코드가 적어진다. )

Chapter 02 리팩터링 원칙

  • 리팩터링의 목적은 코드를 이해하고 수정하기 쉽게 만드는 것이다. 리팩터링은 성능 최적화는 목적이 다르기 때문에 리팩터링 후 성능이 좋아질수도, 나빠질수도 있다.
  • 기능추가리팩터링의 두 모자를 자주 바꿔쓰며 작동되며 이해하기 좋은 코드를 작성한다.]
  • 리팩터링을 하는 이유는 다음과 같다.
    • 리팩터링하면 소프트웨어 설계가 좋아진다.
      • 아키텍쳐를 충분히 이해하지 못한 채 단기 목표만을 위해 코드를 수정하면 기반 구조가 무너지기 쉽다.
      • 따라서 규칙적인 리팩터링은 코드의 구조를 지탱해주는 역할을 한다.
    • 리팩터링하면 소프트웨어를 이해하기 쉬워진다.
    • 리팩터링하면 버그를 쉽게 찾을 수 있다.

      “난 뛰어난 프로그래머가 아니에요. 단지 뛰어난 습관을 지닌 괜찮은 프로그래머일 뿐이에요.” - 켄트 벡

    • 리팩터링하면 프로그래밍 속도를 높일 수 있다.
      • 내부 품질이 뛰어난 코드베이스는 새 기능 구축을 돕는 견고한 토대가 된다.
      • 따라서 리팩터링하면 속도가 늦어질 거라는 오해가 있지만, 코드베이스를 잘 짜두면 새로운 기능을 추가하는데 시간과 비용이 훨씬 적게 들어간다.
  • 리팩터링은 같은 코드가 3번 반복되면 수행한다. ( 3의 법칙 )