🍑

빠른 리턴(Early Return)은 간단히 말하면 함수 안에서 가능한 빠르게 반환하는 방법이다. 특별한 제약 사항과 방법은 크게 없고 최대한 빠르게 함수를 끝내는 코딩 스타일이다. 개인적을 이 코딩 스타일을 선호한다. 왜냐하면 코드에서 if 와 else 구문은 수 없이 봐왔고 무분별하게 사용한 else 가 개인적으로 유쾌하지 않았다. 

빠른 리턴을 선호하는 이유

1234567891011
Integer uselessElse(int something) {
Integer nothing = null;
if (something is true) {
// implemented logic
// more than 10
} else {
// implemented logic 2
// less than 2
}
return nothing;
}

이 코드를 보면 왜 else 구문을 사용했을까 싶었다. 축약해서 나타내서 그렇지 실제 if 구문에는 긴 코드 블록이 있어 생각보다 잘 읽히지 않았다. 이전에 nothing 이라는 변수를 함수 내에서 어떻게 사용했는지 히스토리를 봤지만 구조는 크게 다르지 않았다. 과연 여기서 else 구문이 필요할까? if 구문을 처리하고 바로 반환하면 else 구문은 필요하지 않다. 

12345678910111213
Anything uselessElse(Anything anything) {
if (anything is true) {
// handling `anything`
// implemented logic
} else {
// handling `anything`
// implemented logic
}
// handling `anything`
// implemented logic
return anything;
}

무분별하게 사용하는 것이 아닌 의도적으로 else를 사용하는 경우도 있다. 그러나 이 코드를 보면 anything is true인 경우는 else 구문에 있는 로직을 읽을 필요가 있을까? 조건이 거짓일 때에도 if구문에 있는 로직을 볼 필요는 없다. 그럼에도 불구하고 코드를 읽을 때에는 if 와 else 구문을 다 읽는다. 특히 함수가 길면 위아래로 옮겨가며 함수 전체를 읽는다. 

코드를 계속해서 위아래로 왔다갔다하니 사실 코드를 이해하기 힘들다. 여기에 빠른 반환을 하는 함수를 추가하면서 리팩토링을 하면 어떨까, 더 이상 긴 코드를 다 읽지 않아도 되지 않을까. 특히 긴급하게 버그를 찾을 때면 빠른 리턴이 더 편하지 않을까싶다. 

빠른 리턴이 꼭 필요할까

그러면 빠른 리턴이 꼭 필요할까, 바로 ‘그렇다’라고 할 수 없다. 빠른 리턴을 처음 접한 후 조건문을 사용할 때마다 빠른 리턴을 했다. 그리고 else 구문을 볼 때마다 다 고쳐버리곤 했다. 그렇게 2년 넘게 빠른 리턴 스타일을 개발할 때 사용했다. 과연 이 코드 스타일이 의미가 있을까? 그렇지 않다. 사실 이 부분에 대해서 조금 더 생각해볼 만하다. 빠른 리턴을 팀에게 소개한 후, 장점에 대해서 어필을 했다. 빠른 리턴을 하면 상관 없는 로직을 읽지 않아도 된다. 빠른 리턴을 하면 더 간결하게 코드를 작성하게 된다. 팀에 빠른 리턴을 알리기 위해 설명을 했지만, 한 사람이 ‘전 예전처럼 else 구문이 편해요, else구문이 if밑에 바로 있어야 명시적으로 로직이 보여요.’라며 답변했다. 그렇게 나는 else 구문을 굳이 바꾸지 않았다.

Rerferneces