early return이란?

github.com/woowacourse/java-racingcar-precourse

 

woowacourse/java-racingcar-precourse

자동차 경주 게임 미션을 위한 저장소. Contribute to woowacourse/java-racingcar-precourse development by creating an account on GitHub.

github.com

우테코 프리코스의 미션은 요구사항에 맞춘 코드를 작성해야 합니다.

그 중 하나는 다음과 같습니다.

else를 왜 쓰지 말라는 것일까요?

if-else문이 너무 많으면 읽기가 매우 어려울뿐더러, 조건에 대해 명시적이지 않습니다.

따라서, 함수 내에서(if문) return을 함으로서, 뒤의 코드로 진입하지 않아 else문을 사용할 필요가 없습니다.

 

아래는 Early Return을 적용하지 않은 코드입니다.

public String getValue(final int id) {

	String value;

	if (id > 0) {
		if (id > 10) {
			value = "Id is greater than 10.";
		} else {
			value = "Id is greater than 0 and below 10."
		}
	} else if (id == 0) {
		value = "This id is zero.";
	} else {
		value = "Invalid id.";
	}

	return value;
}

한눈에 봐도 자연스럽지 않고 읽기 쉽지 않습니다.

 

💡 책을 읽듯이 코드가 술술 읽히는 것이 가독성에 좋다고 하는 말을 들었습니다. 100% 공감합니다. 또한 변수, 메소드명 등 네이밍도 잘해야 하는데 네이밍 때문에 몇십분 고민 한다는 개발자 분도 계실만큼 참 어렵습니다.

관례적으로 사용하는 네이밍 규칙을 검색해서 찾은다음, 반복해서 사용하면 괜찮을 것 같습니다.

 

 

다음은 Early Return를 적용한 코드입니다.

public String getValue(final int id) {

	if (id == 0) {
		return "This id is zero."
	}

	if (id < 0) {
		return "Invalid id.";
	}

	if (id > 10) {
		return "Id is greater than 10.";
	}

	return "Id is greater than 0 and below 10.";
}

이전 코드랑 같은 기능을 수행하지만 코드의 depth가 줄어들었고, 뒷 조건을 생각하지 않아도 되니 가독성이 올라간 걸 확인할 수 있습니다.

 

한 가지 유의할 점은 조건 문의 범위 및 순서를 고려해서 배치해야 합니다.

public String getValue(final int id) {

	if (id > 0) {
		//10보다 큰 값이 들어와도 종료
		return "Id is greater than 0 and below 10.";
	}

	if (id == 0) {
		return "This id is zero."
	}

	if (id < 0) {
		return "Invalid id.";
	}

	return "Id is greater than 10.";
}

 

Early Return이 모든 상황에서 100% 정답은 아닙니다. 때론 if - else 구조가 때론 명시적으로 보여줄 수도 있습니다. 

 

 

참조

steady-coding.tistory.com/289?category=915380

gomjellie.github.io/%ED%8C%A8%ED%84%B4/2020/04/27/early-return.html

jheloper.github.io/2019/06/write-early-return-code/

dev.to/jpswade/return-early-12o5