예전에 같이 공부했던 것 정리했던 기록입니다. 리팩토링을 리마인드 하기 위해서 OReilly에서 21년 10월 출간된 "Five Lines of Code" 책을 가지고 공부했었습니다. 지난 6월에 정리한 것을 이제 하나씩 공유해 볼까 합니다. 리팩토링 관련해서 좋은 책이니 일독을 추천합니다.


 

코드 품질이 좋으면 유지보수비용도 낮아지고, 오류도 적고, 개발자도 행복.

 

기술(skill) 코드가 좋은지 나쁜지, 나쁘면 리팩토링이 필요한지를 판단하는 기술. 판단력과 경험 필요. 주니어에겐 육감처럼 느껴질 수도 있음.
문화(culture) 코드 개선 작업에 시간을 할애할 수 있고, 장려하는 문화.
도구(tool) 우리가 하는 일이 안전한지 확인하는 데 도움이 되는 무언가.
자동화된 테스트 등

 

리팩토링

  • 코드의 기능(하는 일)을 변경하지 않고도 사람이 더 읽기 쉽고 유지 관리하기 쉽도록 코드를 변경하는 것
  • 정기적으로 수행하지 않으면 시간(개발자의 시간은 곧 비용)이 많이 걸릴 수 있음.
  • 코드 속도 향상,  코드를 더 작게 만들기, 코드를 더 일반적으로 변경하여 재사용 가능하게 만들기, 코드를 더 쉽게 읽거나 유지 관리하기
  • 코드가 수행하는 작업을 변경하진 않으므로, 읽기 쉽고 유지 보수가 쉬운 코드를 작성하는 방법에 중점.

좋은 코드: 사람이 읽기 쉽고 유지 관리가 쉬우며, 설정한 작업을 올바르게 수행

코드 이해가 중요한 이유.

  • 대부분의 프로그래머는 코드를 작성하는 것보다 코드를 읽고 이해하는 데 더 많은 시간을 할애
  • 코드를 이해하지 못한 채 무언가를 변경하면 치명적인 오류가 발생할 수 있기 때문
  • 코드의 가독성을 향상시키면 새로운 기능을 구현할 시간 확보 가능
  • 유지 보수가 쉬운 코드는  버그가 줄어들고 수정하기 쉬워진다
  • 코드를 읽을 때  머릿속으로 코드가 무엇을 하는지에 대한 모델을 구축하는데, 한 번에 머릿속에 더 많은 것을 기억해야 할수록 더 피곤해짐.

코드 악취

  •  코드가 나쁘다는 것을 암시할 수 있는 요소
  • 리팩터링은 샤워를 하는 것과 같다.-Kent Beck
  • 리팩터링은 정기적으로 수행할 때 가장 효과적이고 비용도 적게 듬.일상 업무에 리팩터링을 통합하는 것이 좋음.

개발 워크플로 6단계:

  • 탐색하기.: 문제(요구사항)에 대한 인식 . 실험으로부터 시작. 무언가를 빠르게 구현한 다음 고객과 함께 요구사항을 검증해보기.
  • 명세하기.  구축해야 하는 것이 무엇인지  명시. 어떤 형태로든 자동화된 테스트를 수행하는 것이 가장 좋음.
  • 구현하기:  코드 작성.
  • 테스트: 작성한 코드가 명세를 통과했는지 확인
  • 리팩터링: 코드 전달 전에 다음 사람이 작업하기 쉬운지 확인
  • 배포(적용): 풀 리퀘스트 또는 특정 브랜치에 푸시

누가 뭐라해도 코드의 가치는 작성한 코드를 고객에게 전달하는데 있다!!

 

 

규칙 기반 리팩터링 수행 워크플로

레거시 시스템 리팩토링

  • 먼저 쉽게 변경할 수 있는 구조로 바꾼 다음. 쉽게 변경하세요.-Kent Beck
  • 새로운 것을 구현하려고 할 때마다 새로운 코드를 쉽게 추가할 수 있도록 리팩터링부터 시작

리팩터링의 가치가 없는 코드베이스:

  • 작성하고 한 번만 실행한 다음 삭제할 코드.
  • 폐기되기 전에 유지 관리 모드에 있는 코드.
  • 임베디드 시스템이나 게임의 하이엔드 물리 엔진과 같이 엄격한 성능 요구 사항이 있는 코드.

도구

  • 자동화된 테스트:  소프트웨어 개발에 있어 자동차에 브레이크와 같은 존재
  • 레시피와 유사한 상세한 단계별 구조화된 리팩토링 패턴
  • 버전 관리
  • 컴파일러
  • 도구의 도움을 받아서  리팩토링 작업에 대한 확신을 얻자!

 

DRY(반복하지 마세요) KISS(단순하게, 바보처럼) 원칙을 준수

규칙의 목적은 이해를 높이는 것.더 잘 알 때까지는 규칙을 따르자.


 



반응형

+ Recent posts