9 - 1. 변수 쪼개기

적용 시점

  • 임시 변수에 대입이 두 번 이상 이루어지는 경우

절차

  1. 변수를 선언한 곳과 값을 처음 대입하는 곳에서 변수명을 바꾼다.

  2. 가능하면 이때 불변으로 선언한다.

  3. 이 변수에 두 번째로 값을 대입하는 곳 앞까지의 모든 참조를 새로운 변수 이름으로 바꾼다.

  4. 두 번재 대입 시 변수를 원래 이름으로 다시 선언한다.

  5. 테스트한다.

  6. 1번부터 5번까지 반복한다. 변수를 매번 새로운 이름으로 선언하고 다음 대입까지의 모든 참조를 새 변수명으로 바꾼다. 이 과정을 마지막 대입까지 반복한다.

예시1

❌ Before

const distance = (scenario, time) => {
	let result;
	let acc = scenario.primaryForce / scenario.mass;
	let primaryTime = Math.min(time, scenario.delay);
	result = 0.5 * acc * primaryTime ** 2;
	let secondaryTime = time - scenario.delay;
	if (secondaryTime > 0) {
		let primaryVelocity = acc * scenario.delay;
		acc = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass;
		result += primaryVelocity * secondaryTime + 0.5 * acc * seconaryTime ** 2;
	}
	return result;
}

⭕ After

const distance = (scenario, time) => {
	const firstAcc = scenario.primaryForce / scenario.mass;
	const primaryTime = Math.min(time, scenario.delay);
	const firstResult = 0.5 * firstAcc * primaryTime ** 2;
	const secondaryTime = time - scenario.delay;
	if (secondaryTime > 0) {
		const primaryVelocity = firstAcc * scenario.delay;
		const secondAcc = (scenario.primaryForce + scenario.secondaryForce) / scenario.mass;
		const secondResult = primaryVelocity * secondaryTime + 0.5 * secondAcc * seconaryTime ** 2;
		return firstResult + secondResult;
	}
	return firstResult;
}

예시2

❌ Before

let badScore = 0;

const gameLevel = [
	{ name: 'maple', level: 12 }, 
  { name: 'fifa22', level: 12 }
];

const smoke = [
	{ age: 29, cigarette: [{ name: '마쎄', tar: 10 }, {name: '말보루 레드', tar: 7 }]},
	{ age: 28, cigarette: [{ name: '에쎄', tar: 0.1 }, {name: '더원', tar: 8 }]},
];

const alcohol = [10, 100, 20, 14];

gameLevel.forEach((item) => badScore += item.level);
smoke.forEach((item1) => {
	let tar = 0;
	item.cigarette.forEach((item2) => badScore += item2.tar);
	badScore += tar;
})
alchole.forEach((item) => badScore += item)

⭕ After

const gameLevel = [
	{ name: 'maple', level: 12 }, 
  { name: 'fifa22', level: 12 }
];

const smoke = [
	{ age: 29, cigarette: [{ name: '마쎄', tar: 10 }, {name: '말보루 레드', tar: 7 }]},
	{ age: 28, cigarette: [{ name: '에쎄', tar: 0.1 }, {name: '더원', tar: 8 }]},
];

const alcohol = [10, 100, 20, 14];

const gameBadScore = gameLevel.reduce((accGame, curGame) => 
	accGame + curGame.level
, 0);

const smokeScore = smoke.reduce((smokeAcc, smokeCur) => 
	smokeAcc + smokeCur.reduce((tarAcc, tarCur) => 
		tarAcc + tarCur.tar
	, 0)
, gameBadScore);

const alcoholeScore = alcohol.reduce((accAlcohol, curAlcohol) => 
	accAlcohol + curAlcohol
, smokeScore)

Last updated