리팩터링 가이드 - 좋은 코딩 습관을 기르자
안녕하세요, 비브로스 웹 프론트엔드팀 한혜경입니다~! 😄
비브로스에서는 무제한으로 도서구입비를 지원해주시는데요,
이번에 개발 서적의 스테디셀러! “리팩터링”이라는 책을 신청해서 열심히 읽고 공유하고 싶은 내용들을 정리해보았습니다.
출처: yes24
리팩터링 1판은 java로 되어있고, 제가 본 2판은 javascript로 되어 있어서 익숙한 언어로 예시를 확인할 수 있어 편하게 읽을 수 있었습니다.
(하지만 java, javascript만 적용할 수 있는 방법을 소개한 책이 아니에요~!!)
그럼 리팩터링을 왜? 언제? 어떻게? 해야 하는지 함께 알아보시죠~!
📚리팩터링이란?
소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
- 출처: 리팩터링 2판
쉽게 말해 기능은 그대로~ 두고 코드를 가독성 있게, 유지 보수하기 쉽도록 수정하는 것을 말합니다.
여기서 중요한 건 기능을 그대로 둔다는 것!
리팩터링에서 금지하는 몇 가지가 있습니다.
- 기능 변경/추가 금지!
- 버그 수정 금지!
- 성능 개선 금지!
- 버전 업데이트 금지!
금지금지!! 허락 못 해!
누군가가 리팩터링하다가 코드가 깨져서 며칠이나 고생했다 라고 한다면, 십중팔구 리팩터링한 것이 아니다.
- 출처: 리팩터링 2판
리팩터링 시도하다가 버그 발견해서 같이 수정하려고 했던 과거의 나… 반성…
🧐 리팩터링은 왜 해야 하는 건가요?
냄새나면 당장 갈아라
- 켄트 백 할머니의 육아 원칙
프로젝트 일정이 급해서 일단 기능 구현한 당신!
그 코드가 깨끗한 코드라고 확신할 수 있나요!?
저는 당당하게 말할 수 있습니다!
“아니오”
인라인 코드, 대충 지은 변수명, 일단 욱여넣은 데이터들….
찔리는 부분이 한두 가지가 아닙니다.
💩 코드에서 나는 악취
책에서는 “코드에서 나는 악취”라고 명명하는데요,
어떤 악취들이 있는지 알아봅시다.
(코드, 모듈 기준으로 너무 많은 악취들이 있어서 그 중 중요하다고 생각하는 악취만 뽑아봤어요!)
- 기이한 이름 (Mysterious name)
- 코드 이해력과 가독성 낮음.
- 중복 코드 (Duplicated Code)
- 실수와 에러 발생할 확률 높음.
- 긴 함수, 긴 클래스, 긴 매개변수 (Long Function / Class / Parameter List)
- 이해하기 어렵고, 재사용성이 낮음.
- 잦은 실수 발생 확률 높음.
- 전역데이터 (Global Data)
- 어디서든 건드릴 수 있어 버그 발생 시 원인 파악 어려움.
- 가변 데이터 (Mutable Data)
- 예상하지 못한 곳에서 데이터가 변경되어 버그 발생.
- 주석 (Comments)
- 주석은 필요한 경우에는 코드에 향기를 입힐 수 있다.
- 탈취제처럼 사용하는 데 문제가 있다.
- 주석이 장황한 것은 코드를 잘못 작성했을 확률이 높음.
“위와 같은 악취 나는 코드들을 제거하기 위해 한다!”
프로그램은 꾸준히 기능 추가 또는 변경이 생기고,
일단 붙인 기능들은 더럽고, 복잡할 확률이 높아요.
그런 코드들이 뭉칠수록 예상하지 못한 에러가 발생하기 쉽고, 유지보수도 어렵죠.
출처: 리팩터링 2판
리팩터링을 하면 처음엔 좋지 않은 설계였더라도 점점 좋은 설계가 될 수 있어요.
수정할수록 소프트웨어를 이해하기 쉬워지고,
버그를 쉽게 찾을 수 있게 되죠.