8-3. 문장을 함수로 옮기기

적용 시점

  • 옮기고 싶은 함수가 피호출 함수의 일부라는 확신이 있는 경우

  • 피호출함수와 한 몸은 아니지만 반드시 함께 호출되는 문장인 경우

절차

  1. 반복 코드가 함수 호출 부분과 멀리 떨어져 있다면 문장 슬라이드하기를 적용해 근처로 옮긴다.

  2. 타깃 함수를 호출하는 곳이 한 곳뿐이라면, 단순히 소스 위치에서 해당 코드를 잘라내어 피호출 함수로 복사하고 테스트한다. 이 경우라면 나머지 단계는 무시한다.

  3. 호출자가 둘 이상이면 호출자 중 하나에서 ‘타깃 함수 호출 부분과 그 함수로 옮기려는 문장들을 함께’ 다른 함수로 추출한다. 추출한 함수에 기억하기 쉬운 임시 이름을 지어준다.

  4. 다른 호출자 모두가 방금 추출한 함수를 사용하도록 수정한다. 하나씩 수정할 때마다 테스트한다.

  5. 모든 호출자가 새로운 함수를 사용하게 되면 원래 함수를 새로운 함수 안으로 인라인한 후 원래 함수를 제거한다.

  6. 새로운 함수의 이름을 원래 함수의 이름으로 바꿔준다.

예시

❌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);
	return `${yyyy}-${mm}-${dd}`
}

const createOrderInform = ({ price, uidProduct }) => {
	...
	const timeString = new Date().ISOString().substr(11, 8)
	const nowDate = getNowDateForm();
	...
}

const join = (userInfo) => {
	...
	const timeString = new Date().ISOString().substr(11, 8)
	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);
	const timeString = date.ISOString().substr(11, 8)
	return `${yyyy}-${mm}-${dd} ${timeString}`
}

const createOrderInform = ({ price, uidProduct }) => {
	...
	const nowDate = getNowDateForm();
	...
}

const join = (userInfo) => {
	...
	const nowDate = getNowDateForm();
}

Last updated