오늘은 Early Returns
에 관하여 이야기 해보려 한다. 한국어로는 조기리턴
이라고도 한다.
Early Returns
란 쉽게 말해서 조건이 맞을시, 바로바로 리턴 해버리는 패턴을 이야기한다.
예를 들어보자. 언어는 Go
이다. 주어진 연도가 윤년인지 아닌지 구분하는 함수이다.
// Early Return 사용한 예
func isLeapYear(year int) bool {
if year % 4 == 0 && year % 100 != 0 {
return true
}
if year % 400 == 0 {
return true
}
return false
}
위 코드는 분명 이렇게도 쓸수있다.
// Early Return 사용 하지 않은 예
func isLeapYear(year int) bool {
if (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 {
return true
} else {
return false
}
}
언뜻 보면 별 차이 없어 보이고 코드도 Early Return
을 사용하지 않은 예가 라인 수도 더 적다. 하지만 Early Returns
는 다음과 같은 장점을 갖는다.
return false
코드를 보면 한칸 덜 들여쓰기 되어있다. 즉 그만큼 코드가 더 간결해진다.- 만약
return false
같은 간결한 구문이 아니고 여러가지 연산이 필요한 코드라면 그 위의 조건들에 부합한다면 그 다음 코드가 사용되지 않는다는 확신을 쉽게 가질수 있다. - 위 이유만큼 간결해 지면서 이에 대한 테스트 또한 쓰기 쉬워진다.
이러한 컨셉은 루프문에서도 사용가능하다. 주어진 기간 동안의 윤년들을 리턴하는 함수이다
func getLeapYears(start int, end int) []int {
leapYears := []int{}
for year := start; year <= end; year++ {
if !isLeapYear(year) {
continue
}
leapYears = append(leapYears, year)
}
return leapYears
}
위 예에서 보다시피 isLeapYear(year)
가 false
리턴시 바로 continue
를 해버림으로써 Early Returns
와 같은 효과를 볼 수 있다.
사실 Early Returns
는 어디까지나 개발자의 취향이다. 나는 개인적으로 많이 선호하는 편이나 별로 좋아하지 않은 사람들도 있다. 가장 중요한건 읽기 쉬운 코드를 작성하는 것이라 본다.