cleanCode/FiveLinesOfCode

[FiveLinesOfCode] 1장 : 리팩터링, 리팩터링 하기

Mo_bi!e 2023. 10. 3. 20:25

1장 : 리팩터링 리팩터링 하기

의문점

  • XP에서 스파이크
    • 시작전 핵심기능 간단구현
  • 레드 - 그린 - 리팩터 반복
    • TDD 를 처리를 기술한 방법
    • Untitled
  • 자동화된 테스트

학습목표

  1. 리팩토링의 구성요소는?
  2. 일상 업무에 리팩토링 도입이란?
  3. 리팩토링에 있어 안전의 중요성이란?

키워드

  • 리팩토링의 구성요소는 스킬,문화,도구 로 구성되어있다
  • 제반 정의
    • 좋은 코드? : 사람이 읽기 쉽고, 유지보수가 용이하며, 의도한대로 잘 작동하는 코드
    • 리팩토링? : 기능을 변경하지않고, 코드의 가독성과 유지보수가 쉽도록 코드를 변경하는것
    • 리팩토링의 이유
      1. 가독성 높이면 → 기능구현 시간 확보 (경제성)
      2. 유지보수가 용이 → 버그가 줄어들고 수정이 쉬워짐
      3. 생각하기 편하다 → 한번에 많은 것을 기억해야할수록 지침,
  • 스킬 : 무엇을 리팩토링 할 것인가
    • 코드스멜 : 코드가 나쁘다는것을 암시
      • 코드스멜 예 : 함수는 한가지 작업을 수행해야한다 (but 한가지작업은 대체 무엇? → 모호)
      • 규칙의 예 : 다섯 줄 제한 (코드스멜보다 간명함)
  • 문화 : 리팩토링은 언제할까?
    • 프로그래밍 문제해결 6단계 (탐색, 명세화, 구현, 테스트, 리팩토링, 전달)
      • 5단계 리팩토링 : 규칙위반? → 규칙해당하는 리팩토링 패턴 찾기지시에 따르기컴파일 오류 수정
    • 코드베이스 전체가 아닌 일상업무에 결합하는 방법 :
      • 구현하기 전 : 우선 변경하기 쉽게 만든 후 변경하라 - 켄트백
    • 리팩토링 X (언제 리팩토링 하지말아야 할까?) : 스파이크, 폐기되기전 코드, 엄격한 성능요구사항 코드
  • 도구 : 안전한 리팩토링 방법
    • 자동화된 테스트 외
    • 상세하고 단계별 구조화된 래픽토링 패턴
    • 버전관리
    • 컴파일러

요약

  1. 리팩토링의 구성요소는?
    • 리팩터링 대상을 식별하는 스킬, 리팩터링 단계를 명시적으로 가진 문화, 리팩터링을 돕는 도구의 조합
  2. 일상 업무에 리팩토링 도입이란?
    • 켄트벡
  3. 리팩토링에 있어 안전의 중요성이란?
    • 컴파일러와 타입으로 실수를 잡아내고,
    • 정기적 실행으로 검증하기
    • rollback 이 가능
    • 자동차의 브레이크

나눔

+: 켄트벡

테스트가 전제에 깔려있어야 하는것을 기억하자

→ 코드변경 자체 즉 리팩토링이 스멜이 내포함 → 사이드이펙트 우려 상존함 → 안전하게 하기위해 테스트 해야함

회귀테스트 방지 가능

+: 리팩토링 내성

→ 코드를 바꾸어도… →
블라디미르 단위테스트 참조