본문 바로가기

Today I Learned

리팩터링 2판 챕터8 - 기능 이동

1. 함수 옮기기

*컨텍스트란? 클래스나 모듈

컨텍스트에 관련 깊은 요소들만 남기기 위해서 함수를 옮기는 리팩터링을 진행한다.

 

그럼 언제 옮겨야하는가?

  1. 어떤 함수가 자신이 속한 컨텍스트의 요소들보다 다른 컨텍스트를 많이 참조할
  2. 어떤 것에도 의존하지 않고 독립성을 가지는 함수일

 

2. 필드 옮기기

*필드란? 클래스를 구성하는 변수.

적합한 데이터 구조를 만들기 위해서 필드를 옮긴다.

 

3. 문장을 함수로 옮기기 (↔️ 문장을 호출한 곳으로 옮기기)

중복으로 사용하는 문장이 있다면 함수를 만들자

 

4. 문장을 호출한 곳으로 옮기기 (↔️ 문장을 함수로 옮기기)

공통된 함수가 일부 호출자에게는 다르게 동작하도록 바뀌어야할 해당 기법을 사용한다.

 

5. 인라인 코드를 함수 호출로 바꾸기

함수 호출을 사용하면 코드를 이해하기 쉬워진다. 너무 지나치지 않는 선에서의 라이브러리 사용도 추천한다.

 

6. 문장 슬라이드하기

연관된 코드끼리 모으는 작업을 말한다. 변수 선언을 모두 상단에서 하는 것이 아니라 관련있는 것끼리 묶는 것이 좋다. *변수의 수명을 짧게 유지하자.

 

7. 반복문 쪼개기

하나의 반복문에 가지 일을 처리하는 경우가 있는데, 반복문을 나누는 것이 코드를 이해하기도, 나중에 최적화하기에도 좋다. 나아가서 함수로 추출하는 것도 좋다.

 

8. 반복문을 파이프라인으로 바꾸기

map, filter, reduce.. 등을 사용하면 코드를 읽기에 용이하다.

 

9. 죽은 코드 제거하기

사용하지 않는 코드가 혹시나 나중에 사용될까봐 지우지 않고 주석처리를 하거나 그대로 남겨두는 경우가 있는데, 일단 지우고 나중이 오면 버전 관리 시스템을 이용하자. 죽은 코드는 코드를 이해하는 방해가 된다.

 

 

무엇보다 중요한 것은 기능 이동을 할 때도 겉보기 동작을 유지하는 것이다.