8-4. 문장을 호출한 곳으로 옮기기
적용 시점
사용하던 기능이 일부 호출자에게 다르게 동작하도록 바뀌는 경우
작은 변경이 아닌 호출자와 호출 대상의 경계를 다시 그어야 하는 경우
절차
호출자가 한두 개뿐이고 피호출 함수도 간단한 단순한 상황이면, 피호출 함수의 처음이나 마지막 줄들을 잘랄내어 호출자들로 복샇새 넣는다. 테스트만 통과하면 리팩토링을 끝낸다.
더 복잡한 상황이 있는 경우, 이동하지 않길 원하는 모든 문장을 함수로 추출한 다음 검색하기 쉬운 임시 이름을 지어준다.
원래 함수를 인라인한다.
추출된 함수의 이름을 원래 함수의 이름으로 변경한다.
예시
❌Before
const getNowDateForm = () => {
const date = new Date();
const yyyy = date.getFullYear();
const mm = ("0" + (1 + date.getMonth())).slice(-2);
const dd = ("0" + date.getDate()).slice(-2);
const timeString = date.ISOString().substr(11, 8)
return `${yyyy}-${mm}-${dd} ${timeString}`
}
const createOrderInform = ({ price, uidProduct }) => {
...
// 여기서 timeString을 다른 형태로 받아야 한다고 가정하자.
// 따라서 기존에 getNowDateForm 내부에서 timeString을 분리해야 한다.
const nowDate = getNowDateForm();
...
}
const join = (userInfo) => {
...
const nowDate = getNowDateForm();
}
⭕After
const getNowDateForm = () => {
const date = new Date();
const yyyy = date.getFullYear();
const mm = ("0" + (1 + date.getMonth())).slice(-2);
const dd = ("0" + date.getDate()).slice(-2);
return `${yyyy}-${mm}-${dd}`
}
const createOrderInform = ({ price, uidProduct }) => {
...
const timeString = new Date().toGMTString();
const nowDate = getNowDateForm();
...
}
const join = (userInfo) => {
...
const timeString = new Date().ISOString().substr(11, 8)
const nowDate = getNowDateForm();
}
Last updated