17장 냄새와 휴리스틱(379~387)

중복

<aside> 💡 선택자 인수

</aside>

  1. 함수 호출 끝에 달리는 false 인수는 피해야 한다
  2. 선택자 인수는 목적을 기억하기 어려울 뿐 아니라 각 선택자 인수가 여러 함수를 하나로 조합한다
public int calculateWeeklyPay(boolean overtime) {
	int tenthRate = getTenthRate();
	int tenthsWorked = getTenthsWorked();
	int straightTime = Math.min(400, tenthsWorked);
	int overTime = Math.max(0, tenthsWorked - straightTime);
	int straightPay = straightTime * tenthRate;
	dobule overtimeRate = overtime ? 1.5 : 1.0 * tenthRate;
	int overtimePay = (int)Math.round(overTime*overtimeRate);
	return straightPay + overtimePay;
}

→ 초과근무 수당을 1.5배로 지급하면 true고 아니면 false다

→ 독자는 calculateWeeklyPay(false)라는 코드를 발견할 때마다 의미를 떠올리느라 골치 아프다

다음과 같이 코드를 구현해보자

public int straightPay() {
	return getTenthsWorked() * getTenthRate();
}

public int overTimePay() {
	int overTimeTenths = Math.max(0, getTenthsWorked() - 400);
	int overTimePay = overTimeBonus(overTimeTenths);
	return straightPay() + overTimePay;
}

private int overTimeBonus(int overTimeTenths) {
	double bonus = 0.5 * getTenthRate() * overTimeTenths;
	return (int) Math.round(bonus);
}

<aside> 💡 잘못 지운 책임

</aside>

  1. 개발자가 내리는 가장 중요한 결정 중 하나가 코드를 배치하는 위치다
  2. 코드는 독자가 자연스럽게 기대할 위치에 배치한다
  3. 때로는 ‘영리한’ 배치가 필요하다

보고서를 출력하는 함수에서 총계를 계산하기 vs 근무 시간을 입력받는 코드에서 총계를 보관하는 방법

→ 함수 이름을 살펴보자