전제 조건(Precondition)이란?
전제 조건은 메서드가 정상적으로 동작하기 위해 반드시 충족되어야 하는 조건을 의미합니다. 이번 글에서는 매개변수로 전달된 리스트(List)가 null이거나 비어 있는지 확인하는 전제 조건을 작성하는 방법을 예제와 함께 살펴보겠습니다.
예제 코드
public void my_fun(List<Object> myList){
if (myList == null){
throw new IllegalArgumentException("List is null");
}
if (myList.isEmpty()){
throw new IllegalArgumentException("List is empty");
}
// 검사 통과 후 실제 로직 실행
my_fun(myList);
}코드 동작 설명
위 코드는 객체(Object) 리스트를 매개변수로 받는 'my_fun'이라는 void 메서드를 정의합니다. 동작 순서는 다음과 같습니다.
- 먼저 리스트가 null인지 검사하고, null이라면 "List is null"이라는 메시지와 함께
IllegalArgumentException을 발생시킵니다. - 그다음
isEmpty()메서드로 리스트에 요소가 하나도 없는지 확인하고, 비어 있다면 "List is empty"라는 메시지와 함께 예외를 던집니다. - 두 검사를 모두 통과한 경우에만 실제 로직이 실행됩니다.
즉, 이 코드 조각은 리스트가 null이거나 비어 있는지 사전에 점검하는 전제 조건으로 활용될 수 있습니다. 실무에서는 마지막 재귀 호출 부분을 실제 비즈니스 로직으로 대체하거나, 유효성이 검증된 데이터를 다음 단계로 전달하는 용도로 사용합니다.
전제 조건 검사의 장점
- Fail-Fast 원칙 준수: 잘못된 입력이 시스템 깊숙이 전파되기 전에 조기에 차단할 수 있습니다.
- 명확한 오류 파악: IllegalArgumentException과 함께 구체적인 메시지를 남기므로 문제 원인을 쉽게 추적할 수 있습니다.
- 코드 간결화: 메서드 내부에서 불필요한 null·빈 값 체크를 반복하지 않아도 됩니다.
더 간결한 대안
자바 7부터 제공되는 java.util.Objects.requireNonNull()나 구글 구아바(Guava) 라이브러리의 com.google.common.base.Preconditions 클래스를 활용하면 위와 같은 검사를 한 줄로 처리할 수 있어 더욱 깔끔한 코드를 작성할 수 있습니다.