재할당(파괴적 할당) : 변수에 값을 다시 할당하는 것
재할당은 변수의 의미를 바꿔 추측하기 어렵게 만듭니다.
또한 언제 어떻게 변경되었는지 추적하기 힘들게 만듭니다.
int damage(){
// 멤버의 힘과 무기 성능을 기본 공격력으로 활용합니다.
int tmp = member.power() + member.weaponAttack();
// 멤버의 속도로 공격력을 보정합니다.
tmp = (int)(tmp * (1f + member.speed() / 100f));
// 공격력에서 적의 방어력을 뺀 값을 데미지로 사용합니다.
tmp = tmp - (int)(enemy.defence / 2);
// 데미지가 음수가 되지 않게 조정합니다.
tmp = Math.max(0, tmp);
return tmp;
}
현재 다양한 값을 가져와 최종 데미지를 구하는 과정에서 변수 tmp는 공격력, 보정 값, 데미지 등이 계속 재할당되면서 값의 의미가 바뀝니다.
따라서 재할당의 부정적 영향을 피하기 위해 계속해서 새로운 변수를 만들어 사용한다.
변수에 final
키워드를 붙임으로서 재할당을 기계적으로 막는다.
void doSomething() {
final int value = 100;
value = 200; // 컴파일 에러
...
}
int damage(){
final int basicAttackPower = member.power() + member.weaponAttack();
final int finalAttackPower = (int)(basicAttackPower *
(1f + member.speed() / 100f));
final int reduction = (int)(enemy.defence / 2);
final int damage = Math.max(0, finalAttackPower - reduction);
return damage;
}