refactoring 2nd
Practice refactoring techniques in the Martin Fowler's Refactoring 2nd edition
1장
- 코드가 새로운 기능을 추가하기가 편한 상태가 아니라면, 먼저 새로운 기능을 추가하기 편한 상태로 리팩토링 하자
- 리팩토링 전에는 우선 테스트를 작성하자 (나보단, 테스트를 믿자)
- 값이 바뀌지 않는 변수는 매개변수로 전달시키고, 함수 내부에서 필요한 값은 함수 내부에서 선언하도록 하자
- 변수 이름을 명확하게 정의하라
- 자바 스크립트는 동적 타입 언어.. 타입을 드러나게 작성하면 도움된다 (혹은 TypeScript를 사용해도.. 좋을듯)
- 매개 변수 이름을 타입으로 적으면 좋음.
- 매개 변수 역할이 뚜렷하지 않으면 부정관사를 붙이자(a/an)
- 변수 인라인
- 지역 변수 제거
- 임시 변수를 줄이자
- 왜? 임시 변수는 그 함수 블락에서만 의미가 있어서.. 코드가 길어지면 이해하기 어려워질때가 많음.
- 함수가 하는 일을 나타내는 명칭을 써야함.
- format -> usd
- 왜? usd 값으로 변환해주는 역할을 하고 있으니..
- 리팩토링을 통한 성능 문제는.. 우선 신경쓰지 말고 진행하자
- 모든 진행 단계를 잘게 나누자..
2장
- 리팩터링은 코드를 이해하고 수정하기 쉽게 만드는 것.
- 기능 추가는 기존 코드는 건드리지 않고, 새 기능을 추가하기만 하면 됨.
- 리팩터링은.. 기능 추가는 절대하지 않고 코드 재구성에만 전념.
- 기능 추가 전 리팩토링
- 함수 매개변수화..같은 작업
- 코드의 의도가 더 명확하게 드러나도록 리팩토링
- 쓰레기 줍기 리팩토링
- 쓸데 없는 코드를 제거, 혹은 로직의 복잡도를 줄인다
- 리팩토링하지 말아야할 때는..?
- 굳이 수정할 필요 없다면.. (그 코드에 기능추가 같은게 들어가는 것이 아니라면..)
- 리팩토링 시 고려해야할 문제?
- 리팩토링의 목적은 개발 기간을 단축하고자 하는 것
- 테스트는 리팩토링 과정에서 버그가 생길 수 있다는 불안감을 해소할 수 있음.
- 레거시 프로그램 리팩토링 전략?
- 테스트를 추가할 틈새를 찾아서, 시스템을 테스트 해야 한다는 것.
- 테스트 주도 개발
- 테스트 코드 + 리팩토링
- 성능 최적화에 돌입하기 전에는.. 코드를 다루기 쉽게 만드는 것에 집중하는게 좋음.
3장
- 리팩토링을 하면 해결할 수 있는 코드 징후..
- 이름이 이상할 떄
- 중복된 코드가 있을 때
- 함수가 길 때
- 조건문 분해, 반복문 쪼개고...
- 매개 변수 목록이 많을 때..
- 객체로 넘기거나..
- 전역 데이터를 사용할 떄
- 가변 데이터를 사용하고 있을 때..
- 단일 책임 원칙에서 벗어날 떄
- 기본형에 집착하지말고.. 객체로 바꾸자..
- switch문
- 반복문
- 거대한 클래스..
- 연관성 있는 필드들을 따로 묶어서... 클래스로 추출하자
- 상속 포기
- 부모 클래스는 모두 추상 클래스여야한다..
- 주석
- 주석을 남겨야겠다는 생각이 들면, 주석이 필요없는 코드로 리팩토링을 해보자
4장
- 리팩토링을 하려면, 견고한 테스트가 받쳐줘야 한다..
- 테스트가 견고하면 --> 디버깅 시간이 줄어든다.
- TDD , 프로그래밍 기법
- Mocha -> Javascript test framework
- 테스트를 작성할 경우, 반드시 실패하는 테스트도 작성해보자
- 테스트 관련 버그 중 가장 안좋은 유형은, 테스트끼리 상호작용하게 하는 것.
- 각 테스트 전에, 공통적으로 실행되는 부분을 모아둘 수도 있다 (beforeEach 문)
- 모든 조건이 만족할 경우말고, 특정 값이 비어있을 경우 어떻게 동작할지도 테스트를 작성해보자
- 실패는 검증 단계에서 실제 값이 여상 범위를 벗어났다는 뜻
- 반면, 에러는 검증보다 앞선 과정에서 발생된 예외상황을 말한다.