Search

리팩터링 2판 스터디 - 1

리팩터링 2판을 회사 팀 내 스터디로써 진행한다. 스터디에선 따로 책 내용을 정리를 하지 않고 주마다 정해진 분량까지 읽고 감상을 나눈다. 여기선 개인적으로 매 분량에 대한 정리와 짧은 감상을 올린다.

초판의 추천사

코드는 처음부터 완벽하지 않고 경험이 쌓여가며 개선된다
코드를 작성하는 횟수 << 읽고 수정하는 횟수
읽고 수정하는 것 자체가 리팩터링이고
읽고 수정하는 것을 쉽게 해주는 것도 리팩터링이다
리팩터링을 “잘” 해야 한다 → 코드의 ‘수정’은 미묘한 버그를 만들 수 있다
6 ~ 12장은 리팩터링 기법을 모아 놓은 카탈로드이고 책의 핵심이다
각 기법의 절차를 이해하고 체계적으로 절제된 리팩터링을 해야 한다 → “한 번에 한 단계씩 수정”해야 한다

들어가며

리팩터링 하지 않으면 코드가 너무 복잡해 디버깅도 불가하고 프로젝트가 망했다
꾸준히 리팩터링으로 코드를 정리한 프로젝트는 성공했다
리팩터링
겉으로 드러나는 코드의 기능(겉보기 동작)은 바꾸지 않으면서 내부 구조를 개선
버그가 생길 가능성을 최소로 줄이면서 코드를 정리하는 정제된 방법
코드를 작성하고 난 뒤에 개선하는 일
설계 → 코딩을 거꾸로 한다
각 리팩터링 단계는 아주 단순하다
지속 설계

한국어판 독자를 위한 안내

자바스크립트 중첩 함수
자바, C# 기준 자동 리팩터링 도구, IDE 모음:

01 리팩터링: 첫번째 예시

예시 코드가 거대한 프로그램에서 발췌한 것이라고 상상하며 읽자
실제 예시는 책에 담기엔 너무 길지만
너무 짧은 예시는 리팩터링의 필요성이 안느껴지기 때문

1.1 자, 시작해보자!

리팩터링 없는? 상태에서 코드 읽고 해석

1.2 예시 프로그램을 본 소감

작동 방식을 더 파악하기 쉽게 구조를 바꾼다
리팩터링 → 기능 추가

1.3 리팩티링의 첫 단계

언제나 테스트 작성
수정(리팩터링)이라는 사람의 실수를 줄여준다

1.4 statement() 함수 쪼개기

함수 추출하기
함수 이름을 짓고 코드를 그대로 옮긴다
값이 바뀌지 않는 변수는 매개변수로 전달
함수에서 값이 바뀐다면 반환
명확한 표현으로 바꾸기
함수 반환 변수명을 항상 result
perfaPerformance ; 동적 타입 언어에서 타입이 드러나게 작성하는 법, 역할이 뚜렷하지 않을 때 관사를 붙인다
(임시/지역 변수) play 변수 제거하기
추출 작업이 쉬워진다
임시 변수를 질의 함수로 바꾸기
함수 인라인
함수 선언 바꾸기
format → usd
volumeCredits
반복문 쪼개기; 단순 순회가 아니라 변수 상태를 바꾸는(값을 누적하는) 경우에
문장 슬라이드; 누적 값에 대한 변수를 쪼갠 반복문과 가까운 곳으로 이동
함수 추출
변수 인라인
vs. 성능 ?
성능 저하를 개의치 말고 일단 리팩터링하자
성능 저하가 없진 않지만 대부분 영향이 미미하다
만약 저하가 있다면 리팩터링 후에 성능을 개선하자
split commit
테스트가 실패하면 그 시점에서 리팩터링 단계를 더 잘게 나눈다
totalAmount
같은 이름의 지역 변수를 추출할 함수 이름으로 예정하고
일단 아무 이름의 함수로 추출한 다음에(appleSauce)
변수 인라인에서 원래의 이름으로 바꾼다

1.5 중간 점검: 난무하는 중첩 함수

중첩 함수가 많다. 나쁜가?

느낀점

(먼저하는) 설계보다 개선이 중요하다. 우선 작성하고 개선하는 것은 지속 설계이다. 개선하는 루프를 짧게 만들자
개선 주기를 짧게 하려면
수정을 작게 나누어 한다.
수정마다 자가 테스트를 한다.
생각해보니 루비판을 읽었다
기억나는건 pull up method랑 inline method 뿐이다 ㅎ
함수 이름을 아무렇게나 짓고 “변수 인라인” 할 원래 변수명으로 대체하는 것은 신기하다.
자바스크립트에서 리팩토링 도구
refactoring.nvim
ThePrimeagen