반응형
리팩터링
리팩터링이란, 기능을 변경하지 않고 코드의 가독성과 유지보수가 쉽도록 코드를 변경 하는 것
리팩터링을 왜 해야 하는가
- 코드를 더 빠르게 만들기 위해
- 더 작은 코드를 만들기 위해
- 코드를 더 일반적이고 재사용 가능하게 만들기 위해
"코드의 가독성을 높이고 유지보수를 용이하게 하기위해 리팩터링이 필요하다."
리팩터링 구성요소
- 스킬(Skill): 어떤 코드가 잘못되었는지 아는 능력
- 문화(Culture): 리팩터링에 시간을 들이는 것을 권장하는 문화와 절차가 필요
- 도구(Tools): 작업의 안정성을 보장할 무언가,,, 자동화된 테스트(도구)
스킬: 무엇을 리팩터링 할 것인가?
- 코드 스멜을 알아 차리는 방법 -> 쉽게 이해되고 쉽게 적용할 수 있는 규칙이 필요
- 예) 함수는 하나의 기능을 수행해야 한다. -> 애매한 기준이다.
- 규칙은 명확하고 간결하며 기억하기 쉬워야 좋다.
※ 규칙은 모든 상황에서 좋은 코드를 보장할 수는 없다. 유연함을 갖자.
문화: 리팩터링은 언제 할까?
- "샤워하듯" 정기적으로 수행하는 것이 효과적이고 비용이 적게 든다.
- 새로운 코드를 만들 때 아래 6단계 절차를 따르자
- 탐색: 빠르게 간단하게 구현하여 고객이 필요로 하는것을 명확하게 파악
- 명세화: 요구사항 정리 -> 테스트 코드
- 구현
- 테스트
- 리팩터링: 다음사람이 쉽게 작업 가능한지 체크
- 전달: pull request, push
리팩터링이 필요하지 않은 경우
- 한 번 실행하고 삭제할 코드 (스파이크)
- 폐기되기 전 유지보수 모드에 있는 코드
- 임베디드 시스템이나 게임의 고급 물리엔진과 같이 엄격한 성능 요구사항이 있는 코드
도구: (안전한) 리팩터링 방법 -> 안심하고 리팩토링 할 수 있는 무언가
- 자동화된 테스트
- 버전관리(git)
- 컴파일러
- 레시피처럼 상세하고 단계별로 구조화된 리팩터링 패턴
리팩터링 깊게 들여다보기
목표: 리팩터링이 기술적 관점에서 중요한 이유와 이를 위한 기술적 세부 사항을 다룬다
가독성및 유지보수성 향상
가독성
- 코드가 의도를 얼마나 잘 전달하고 있는가
- 코딩 컨벤션 따르기, 주석, 변수명, 메서드명 공백 사용등을 통해 가독성을 높일 수 있다.
유지보수성
- 버그수정이나 일부 기능을 변경해야 할 때 현재 코드가 무슨일을 하는지 파악하고 새로운 목표를 수용하기 위해 안전하고 빠르며 쉽게 수정할 수 있는 방법은 무엇인지 찾으려고 시도하는 이 모든 과정과 시간이 유지보수성과 관련있다.
- 시스템 수정 후 다른곳에서 문제가 발생하는 경우 시스템이 '취약'하다고 표현
- 취약성의 근원은 전역상태(global state)이다. (상태(state)는 프로그램이 실행되는 동안 변경될 수 있는 모든 것을 말한다.)
- 전역상태 문제는 전역 데이터를 누군가가 변경하여 실수로 데이터가 손상될 때 주로 발생한다.
리팩터링 vs 성능
대부분의 시스템에서 성능은 가독성과 유지보수성보다 가치가 떨어진다
성능은 프로파일링 도구나 성능 전문가의 지도를 받아 리팩터링과 다른 단계에서 처리해야 한다.
속도, 유연성 및 안정성 확보
- 코드 품질에 가장 큰 영향을 미치는 것은 아키텍처의 변경이다.
- 상속보다는 컴포지션을 사용
- 다른 방식에 비해 코드를 결합하고 재사용하기 좋다. 유연성이 좋다
- '추가(addition)'로 변경이 가능하다 = 개방폐쇄원칙
- 주변 코드를 손상시키지 않고 변경 가능. 프로그래밍 속도가 빨라진다
- 추가에 의한 변경은 기존 코들르 항상 보존하므로 새코드가 실패하할 때 이전 기능으로 대체하는 기능구현이 쉽다. 안정성에 좋다
리팩터링과 일상 업무
- 코드 변경 전 리팩토링 먼저 하기
- 코드 변경 후 리팩토링 하기
- 배포 빈도수를 높이면 한층 더 안정감을 얻을 수 있다.
- '도메인'을 정의하고 도메인 용어를 이해하며 코너케이스(변수와 환경적인 요소로 인해 코드에 문제가 발생하는 경우)를 찾기
반응형
'스터디 > Five Lines of Code' 카테고리의 다른 글
7장 컴파일러와의 협업 (1) | 2023.11.04 |
---|---|
Five Lines of Code 6장. 데이터 보호 (1) | 2023.10.29 |
Five Lines of Code 5장 유사한 코드 융합하기 (0) | 2023.10.21 |
Five Lines of Code 4장 타입 코드 처리하기 (1) | 2023.10.14 |
Five Lines of Code 3장 긴 코드 조각내기 (0) | 2023.09.22 |