RPG게임에서, 특정 상황 속에 있는 멤버에게 마법을 쓰라고 지시했을 때 제대로 이행하지 못하는 경우가 발생할 수 있습니다.
공격을 당해 전투 불능일수도 있고, 수면 또는 마비 상태일수도 있습니다.
따라서 마법을 사용하기 위해선 여러 가지 조건을 모두 통과해야 합니다.
// 생존 여부
if (0 < member.hitPoint) {
// 이동 가능 여부
if (member.canAct()) {
// MP 잔여 여부
if (magic.costMagicPoint <= member.magicPoint) {
member.consumeMagicPoint(magic.costMagicPoint);
member.chant(magic);
}
}
}
위 코드는 마법 시전 조건 확인을 위해 여러 개의 조건문을 중첩하여 사용했습니다.
하지만 조건문의 중첩 사용은 **‘코드의 가독성’**에 문제가 발생합니다.
어디부터 어디까지가 if 조건문의 범위인지 이해하기 힘듭니다.
가독성이 나쁜 코드는 침 전체의 개발 생산성을 저하시킵니다.
사양 변경 또한 코드가 복잡하고 길어 로직을 이해하기 힘드므로 어렵습니다.
조건에 맞지 않는 경우 곧바로 리턴하는 **‘조기 리턴(early return)’**으로 중첩을 제거할 수 있습니다.
if (member.hitPoint <= 0) return;
if (!member.canAct()) return;
if (member.magicPoint < magic.costMagicPoint) return;
member.consumeMagicPoint(magic.costMagicPoint);
member.chant(magic);
조기 리턴에는 또 다른 장점으로 조건 로직과 실행 로직을 분리할 수 있다는 점이 있습니다.
예를 들어 이러한 요구 사항이 추가되었을 때,