1. 함수 옮기기
*컨텍스트란? 클래스나 모듈
한 컨텍스트에 관련 깊은 요소들만 남기기 위해서 함수를 옮기는 리팩터링을 진행한다.
그럼 언제 옮겨야하는가?
- 어떤 함수가 자신이 속한 컨텍스트의 요소들보다 다른 컨텍스트를 더 많이 참조할 때
- 어떤 것에도 의존하지 않고 독립성을 가지는 함수일 때
2. 필드 옮기기
*필드란? 클래스를 구성하는 변수.
적합한 데이터 구조를 만들기 위해서 필드를 옮긴다.
3. 문장을 함수로 옮기기 (↔️ 문장을 호출한 곳으로 옮기기)
중복으로 사용하는 문장이 있다면 함수를 만들자
4. 문장을 호출한 곳으로 옮기기 (↔️ 문장을 함수로 옮기기)
공통된 함수가 일부 호출자에게는 다르게 동작하도록 바뀌어야할 때 해당 기법을 사용한다.
5. 인라인 코드를 함수 호출로 바꾸기
함수 호출을 사용하면 코드를 이해하기 더 쉬워진다. 너무 지나치지 않는 선에서의 라이브러리 사용도 추천한다.
6. 문장 슬라이드하기
연관된 코드끼리 모으는 작업을 말한다. 변수 선언을 모두 상단에서 하는 것이 아니라 관련있는 것끼리 묶는 것이 좋다. *변수의 수명을 짧게 유지하자.
7. 반복문 쪼개기
하나의 반복문에 두 가지 일을 처리하는 경우가 있는데, 반복문을 나누는 것이 코드를 이해하기도, 나중에 최적화하기에도 좋다. 더 나아가서 함수로 추출하는 것도 좋다.
8. 반복문을 파이프라인으로 바꾸기
map, filter, reduce.. 등을 사용하면 코드를 읽기에 더 용이하다.
9. 죽은 코드 제거하기
사용하지 않는 코드가 혹시나 나중에 사용될까봐 지우지 않고 주석처리를 하거나 그대로 남겨두는 경우가 있는데, 일단 지우고 그 나중이 오면 버전 관리 시스템을 이용하자. 죽은 코드는 코드를 이해하는 데 방해가 된다.
무엇보다 중요한 것은 기능 이동을 할 때도 겉보기 동작을 유지하는 것이다.
'Today I Learned' 카테고리의 다른 글
리팩터링 2판 챕터10 - 조건부 로직 간소화(1) (0) | 2021.12.16 |
---|---|
리팩터링 2판 챕터9 - 데이터 조직화 (0) | 2021.12.12 |
리팩터링 2판 챕터7 - 캡슐화 (0) | 2021.11.24 |
리팩터링 2판 챕터6 - 기본적인 리팩터링(2) (0) | 2021.11.21 |
리팩터링 2판 챕터6 - 기본적인 리팩터링(1) (0) | 2021.11.15 |