Ch.14 리팩토링: 기존 코드를 성장시키는 기술

텐저린티·2023년 8월 6일
0
post-thumbnail

1. 리팩토링 흐름

  • 리팩토링
    • 실질적 동작 유지하면서 구조만 정리하는 작업
    • 실질적 동작이 바뀐다면 리팩토링 아님.
    • 실질적 동작 변하지 않았음을 단위 테스트를 통해 확인ㄴ
  • 여러가지 리팩토링 사항
    • 중첩 제거
      • 조기 리턴, 조기 예외
    • 의미 단위로 로직 정리
      • 생성자 가드 부분, 바인딩 부분 분리
    • 조건 읽기 쉽게 하기
    • 목적 나타내는 메소드로 바꾸기

2. 단위 테스트로 리팩토링 중 실수 방지

  • 단위 테스트
    • 작은 기능 단위로 동작 검증
    • 테스트 프레임워크와 테스트 코드 활용해서 메소드 단위로 동작 검증
    • 리팩토링에서 단위 테스트는 필수!
  • 테스트 코드 사용한 리팩토링 흐름
    • 이상적 구조 클래스 기본 형태 잡기
    • 기본 형태 기반으로 테스트 코드 작성
    • 테스트 실패시키기
    • 테스트 성공시키기 위한 최소한 코드 작성
    • 기본 형태 클래스 내부에서 리팩토링 대상 코드 호출
    • 테스트 성공할 수 있도록 로직을 이상적 구조로 리팩토링

3. 불확실한 사양을 이해하기 위한 분석 방법

  • 테스트가 없는 코드에 테스트를 추가해서 안전하게 리팩토링 할 수 있는 여러 테크닉

사양 분석 방법 1: 문서화 테스트

  • 메소드 이름만으로 의도 확인 어려울 때
  • 문서화 테스트
    • 메소드 사양 분석 방법
    • 분석하고 싶은 메소드 테스트를 작성해, 해당 메소드가 어떤 동작하는지 확인

사양 분석 방법 2: 스크래치 리팩토링

  • 이상적인 구조 자체 유추 어려울 때
  • 스크래치 리팩토링
    • 로직 의미, 구조 분석하기 위해 시험 삼아 리팩토링
    • 별도 레포지토리 파서 리팩토링 작업
    • 가독성 좋아져 로직 사양 이해 도움
    • 리팩토링 목표가 보임
    • 데드 코드 보임
    • 테스트 코드 어떻게 작성할지 보임

4. IDE 리팩토링 기능

이름 변경

  • Refactor
  • shift + F6

메소드 추출

  • 로직 일부 메소드 추출
  • Extract Method
  • command + option + M

5. 리팩토링 시 주의 사항

기능추가와 리팩토링 동시에 하지 않기

  • 버그 발생 시, 어떤 부분에서 발생한 버그인지 추적 어려움

작은 단계로 실시하기

  • 리팩토링은 작은 단계로 실시하는 것이 좋음
  • 여러 번 커밋했다면, 풀 리퀘스트 작성하는 것이 좋음

불필요한 사양은 제거 고려

  • 불필요한 사양 있으면 리팩토링 어려움
  • 리팩토링 전에 불필요 사양있는지 확인 후 제거
💡 동적 언어 리팩토링
  • 정적 언어 리팩토링
    • IDE 정적 분석 기능 활용
    • 클래스, 메소드 호출 위치 정확하게 추적 가능
  • 동적 언어 리팩토링
    • 어느정도 호출 위치 추적이 가능하나, 완전하지 못함
profile
개발하고 말테야

0개의 댓글

관련 채용 정보