피드로 돌아가기
코드 품질 개선 기법 23편: 반환의 끝이 에지 케이스의 끝
LINE Engineering
Backend

코드 품질 개선 기법 23편: 반환의 끝이 에지 케이스의 끝

LY Corporation의 Review Committee가 조기 반환(early return) 패턴 남용 문제를 지적해 에러 케이스를 정상 케이스로 통합하는 코드 단순화 기법 제시

2025년 11월 14일9intermediate

Context

조기 반환은 에러 케이스를 먼저 배제해 함수의 주요 목적에 집중하도록 하는 기법이지만, 모든 상황에 무조건 적용하면 코드가 복잡해질 수 있습니다. 에러 케이스와 정상 케이스의 처리가 동일하거나 유사한 경우, 불필요한 조기 반환이 오히려 가독성을 해칠 수 있습니다.

Technical Solution

  • 빈 컬렉션 처리 통합: isEmpty() 조건을 제거하고 map, filter, forEach 등의 고차 함수를 직접 적용해 정상적으로 작동하도록 통합
  • null 안전 연산자 활용: == null 조기 반환을 세이프 콜 연산자 ?. 또는 엘비스 연산자 ?:로 대체해 null을 정상 케이스에 포함
  • 범위 검증 제거: 배열/리스트 인덱스 범위 검사를 getOrNull() 또는 getOrElse() 함수로 대체해 조기 반환 제거
  • 의존성 있는 속성 처리: isVisible이 false일 때 text 할당이 무의미한 경우, 조건문을 제거하고 단일 할당으로 통합
  • 예외 처리 monad화: 연속 함수 호출 중 여러 예외 발생 시 flatMap()을 정의해 Success 케이스만 처리하도록 통합

Key Takeaway

조기 반환을 적용하기 전에 에러 케이스와 정상 케이스의 처리가 실질적으로 다른지 검토하고, 동일하면 표준 라이브러리 함수나 연산자를 활용해 케이스를 통합하는 것이 코드 가독성을 높입니다.


Kotlin/Java 백엔드 서비스에서 조기 반환으로 작성된 검증 로직을 검토할 때, isEmpty()나 == null 조건 처리가 정상 케이스와 동일한 결과를 반환하면 getOrNull(), ?., ?: 연산자로 대체하면 함수 깊이를 1~2단계 줄이고 선형적 흐름으로 개선할 수 있습니다.

원문 읽기