스터디/Five Lines of Code

Five Lines of Code 1-2장 리팩터링이란

마디니 2023. 9. 20. 22:02
반응형

리팩터링

리팩터링이란, 기능을 변경하지 않고 코드의 가독성과 유지보수가 쉽도록 코드를 변경 하는 것

리팩터링을 왜 해야 하는가

  • 코드를 더 빠르게 만들기 위해
  • 더 작은 코드를 만들기 위해
  • 코드를 더 일반적이고 재사용 가능하게 만들기 위해

"코드의 가독성을 높이고 유지보수를 용이하게 하기위해 리팩터링이 필요하다."

 

리팩터링 구성요소

  • 스킬(Skill): 어떤 코드가 잘못되었는지 아는 능력
  • 문화(Culture): 리팩터링에 시간을 들이는 것을 권장하는 문화와 절차가 필요
  • 도구(Tools): 작업의 안정성을 보장할 무언가,,, 자동화된 테스트(도구)

스킬: 무엇을 리팩터링 할 것인가?

  • 코드 스멜을 알아 차리는 방법 -> 쉽게 이해되고 쉽게 적용할 수 있는 규칙이 필요
  • 예) 함수는 하나의 기능을 수행해야 한다. -> 애매한 기준이다.
  • 규칙은 명확하고 간결하며 기억하기 쉬워야 좋다.

※ 규칙은 모든 상황에서 좋은 코드를 보장할 수는 없다. 유연함을 갖자.

 

문화: 리팩터링은 언제 할까?

  • "샤워하듯" 정기적으로 수행하는 것이 효과적이고 비용이 적게 든다. 
  • 새로운 코드를 만들 때 아래 6단계 절차를 따르자
    1. 탐색: 빠르게 간단하게 구현하여 고객이 필요로 하는것을 명확하게 파악
    2. 명세화: 요구사항 정리 -> 테스트 코드
    3. 구현
    4. 테스트
    5. 리팩터링: 다음사람이 쉽게 작업 가능한지 체크
    6. 전달: pull request, push

리팩터링이 필요하지 않은 경우

  • 한 번 실행하고 삭제할 코드 (스파이크)
  • 폐기되기 전 유지보수 모드에 있는 코드
  • 임베디드 시스템이나 게임의 고급 물리엔진과 같이 엄격한 성능 요구사항이 있는 코드

도구: (안전한) 리팩터링 방법 -> 안심하고 리팩토링 할 수 있는 무언가

  • 자동화된 테스트
  • 버전관리(git)
  • 컴파일러
  • 레시피처럼 상세하고 단계별로 구조화된 리팩터링 패턴

리팩터링 깊게 들여다보기

목표: 리팩터링이 기술적 관점에서 중요한 이유와 이를 위한 기술적 세부 사항을 다룬다

 

가독성및 유지보수성 향상

가독성

  • 코드가 의도를 얼마나 잘 전달하고 있는가
  • 코딩 컨벤션 따르기, 주석, 변수명, 메서드명 공백 사용등을 통해 가독성을 높일 수 있다.

유지보수성

  • 버그수정이나 일부 기능을 변경해야 할 때 현재 코드가 무슨일을 하는지 파악하고 새로운 목표를 수용하기 위해 안전하고 빠르며 쉽게 수정할 수 있는 방법은 무엇인지 찾으려고 시도하는 이 모든 과정과 시간이 유지보수성과 관련있다.
  • 시스템 수정 후 다른곳에서 문제가 발생하는 경우 시스템이 '취약'하다고 표현
  • 취약성의 근원은 전역상태(global state)이다. (상태(state)는 프로그램이 실행되는 동안 변경될 수 있는 모든 것을 말한다.)
  • 전역상태 문제는 전역 데이터를 누군가가 변경하여 실수로 데이터가 손상될 때 주로 발생한다.

리팩터링 vs 성능

대부분의 시스템에서 성능은 가독성과 유지보수성보다 가치가 떨어진다

성능은 프로파일링 도구나 성능 전문가의 지도를 받아 리팩터링과 다른 단계에서 처리해야 한다.

 

속도, 유연성 및 안정성 확보

  • 코드 품질에 가장 큰 영향을 미치는 것은 아키텍처의 변경이다.
  • 상속보다는 컴포지션을 사용
    • 다른 방식에 비해 코드를 결합하고 재사용하기 좋다. 유연성이 좋다
    • '추가(addition)'로 변경이 가능하다 = 개방폐쇄원칙
      • 주변 코드를 손상시키지 않고 변경 가능. 프로그래밍 속도가 빨라진다
      • 추가에 의한 변경은 기존 코들르 항상 보존하므로 새코드가 실패하할 때 이전 기능으로 대체하는 기능구현이 쉽다. 안정성에 좋다

리팩터링과 일상 업무

  • 코드 변경 전 리팩토링 먼저 하기
  • 코드 변경 후 리팩토링 하기
  • 배포 빈도수를 높이면 한층 더 안정감을 얻을 수 있다.
  • '도메인'을 정의하고 도메인 용어를 이해하며 코너케이스(변수와 환경적인 요소로 인해 코드에 문제가 발생하는 경우)를 찾기 

 

 

 

반응형