early return
으로 중첩 제거가드
도 early Return 중 하나다른 로직을 같은 방식으로 처리 가능
다르게 처리하고 싶은 로직을 인터페이스의 메소드로 정의
조건분기 없이 분기처리 가능
final Map<MagicType, Magic> magics = new HashMap<>();
void magicAttack(final MagicType magicType) {
final Magic usingMagic = magics.get(magicType);
showMagicName(usingMagic);
consumeMagicPoint(usingMagic);
consumeTechnicalPoint(usingMagic);
magicDamage(usingMagic);
}
조건 = 부품
일단 인터페이스 설계를 떠올리자!!
interface Damage {
void execute(final int damageAmount);
}
class HitPointDamage implements Damage {
public void execute(final int damageAmount) {
member.hitPoint -= damageAmount;
if (0 < memeber.hitPoint) {
return;
}
member.hitPoint = 0;
member.addState(StateType.dead);
}
}
class MagicPointDamage implements Damage {
public void execute(final int damageAmount) {
member.magicPoint -= damageAmount;
if (0 < memeber.magicPoint) {
return;
}
member.magicPoint = 0;
}
}
void applyDamage(final DamageType damageType, final int damageAMount) {
final Damage damage = dagmages.get(damageType);
damage.execute(damageAmount);
}