의문.
인터페이스를 상속받은 enum이 재정의 해야하는 String name()을 작성하지 않았음에도 에러는 왜 발생하지 않았는가?
public interface ErrorCode {
String name();
HttpStatus getHttpStatus();
String getMessage();
}
public enum CommonErrorCode implements ErrorCode {
INVALID_PARAMETER(HttpStatus.BAD_REQUEST, "Invalid parameter..."),
INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "Internal server error...");
private final HttpStatus httpStatus;
private final String message;
CommonErrorCode(HttpStatus httpStatus, String message) {
this.httpStatus = httpStatus;
this.message = message;
}
@Override
public HttpStatus getHttpStatus() {
return this.httpStatus;
}
@Override
public String getMessage() {
return this.message;
}
}
Spring boot에서 @RestControllerAdvice와 관련한 Error코드를 작성하며 생긴 의문입니다.
ErrorCode는 인터페이스로 String name()을 재정의합니다. 이를 상속받은 CommonErrorCode enum클래스 타입에서 관련해 재정의를 해주지 않았음에도 에러가 발생하지 않는 것을 확인하였고 이에 대한 궁금증을 가지게 되었습니다.
이유.
enum클래스의 일부를 이미지로 발췌해왔습니다. 이미 enum에서 static 메소드인 name()으로 정의를 하고 있었기 때문에 문제가 없었습니다.
배운점.
enum처럼 내부에 이미 정의된 메소드가 있을 경우, 추상클래스/인터페이스의 추상메소드를 Override하지 않더라도 에러가 나지 않는 다는 것을 알았습니다.