#6-1. 조건 분기가 중첩되어 낮아지는 가독성

RPG게임에서, 특정 상황 속에 있는 멤버에게 마법을 쓰라고 지시했을 때 제대로 이행하지 못하는 경우가 발생할 수 있습니다.

공격을 당해 전투 불능일수도 있고, 수면 또는 마비 상태일수도 있습니다.

따라서 마법을 사용하기 위해선 여러 가지 조건을 모두 통과해야 합니다.

[code 6-1] if 조건문을 중첩해서 구현한 예

// 생존 여부
if (0 < member.hitPoint) {
	// 이동 가능 여부
	if (member.canAct()) {
		// MP 잔여 여부
		if (magic.costMagicPoint <= member.magicPoint) {
			member.consumeMagicPoint(magic.costMagicPoint);
			member.chant(magic);
		}
	}
}

위 코드는 마법 시전 조건 확인을 위해 여러 개의 조건문을 중첩하여 사용했습니다.

하지만 조건문의 중첩 사용은 **‘코드의 가독성’**에 문제가 발생합니다.

어디부터 어디까지가 if 조건문의 범위인지 이해하기 힘듭니다.

가독성이 나쁜 코드는 침 전체의 개발 생산성을 저하시킵니다.

사양 변경 또한 코드가 복잡하고 길어 로직을 이해하기 힘드므로 어렵습니다.

#6-1-1. 조기 리턴으로 중첩 제거하기

조건에 맞지 않는 경우 곧바로 리턴하는 **‘조기 리턴(early return)’**으로 중첩을 제거할 수 있습니다.

[code 6-4] 조기 리턴으로 모든 중첩 제거하기

if (member.hitPoint <= 0) return;

if (!member.canAct()) return;

if (member.magicPoint < magic.costMagicPoint) return;

member.consumeMagicPoint(magic.costMagicPoint);
member.chant(magic);

조기 리턴에는 또 다른 장점으로 조건 로직과 실행 로직을 분리할 수 있다는 점이 있습니다.

예를 들어 이러한 요구 사항이 추가되었을 때,