static메소드는 객체를 생성하지 않고도 호출할 수 있다. 까지 알고있었다. 그런데 같은 패키지에 있는 다른 클래스에서 import도 안하고 그냥 메소드 이름만으로 호출할 수도 있었다. (처음알았다.)
예를 들어
@RestControllerAdvice
public class ArticleExceptionHandler {
@ExceptionHandler(ArticleNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public List<ErrorResponse> articleNotFoundExceptionHandler(ArticleNotFoundException e){
return makeErrorResponse(e, "article");
}
@ExceptionHandler(ArticleNotOwnerException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public List<ErrorResponse> articleNotOwnerExceptionHandler(ArticleNotOwnerException e){
return makeErrorResponse(e, "article");
}
}
에서
public class ExceptionHandlerTool {
public static List<ErrorResponse> makeErrorResponse(Exception e, String fieldName) {
return List.of(ErrorResponse.builder()
.message(e.getMessage())
.errorType(e.getClass().getSimpleName())
.fieldName(fieldName)
.build());
}
}
에 있는 makeErrorResponse를 호출하는 경우이다. 그런데 ArticleExceptionHandler 클래스에서 또 makeErrorResponse함수를 새로 만들 경우 자동으로 같은 클래스 내에 있는 함수를 먼저 참조한다. 즉, 같은 클래스에 함수를 우선적으로 참조하고, 그렇지 않으면 같은 패키지 내 함수를 찾아가나보다..