정구리의 우주정복
[Spring] Exception, RuntimeException 상속에 대해 (Checked Exception, Unchecked Exception 이란 ?) 본문
JAVA/STUDY
[Spring] Exception, RuntimeException 상속에 대해 (Checked Exception, Unchecked Exception 이란 ?)
Jungry_ 2024. 6. 10. 22:52반응형
예외처리를 위해 Exception 을 정의하던 중 왜 RuntimeException 을 상속받는지 궁금해져버렸다 !
자바는 예외를 크게 두종류인
Checked Exception, Unchecked Exception
으로 분류할 수 있다
Checked Exception
- 컴파일러가 예외 처리 코드를 작성하도록 강제하는 예외
- 파일 입출력, 네트워크 통신, DB 접근 등 외부 자원과 상호작용할 때 발생할 수 있는 예외
- Exception 을 상속
- 컴파일 시점에 반드시 처리되어야 한다
- throws 절을 사용해서 메서드 선언에 예외를 명시해줘야 한다
- 호출할 때 try-catch 블록으로 처리해야한다
public class CheckedException extends Exception {
public CheckedException(String message) {
super(message);
}
}
public void testMethod() throws CheckedException {
}
public static void main(String[] args) {
try {
testMethod();
} catch (CheckedException e) {
e.printStackTrace();
}
}
메소드에서 throws를 사용해서 예외를 명시해주기 ! 그리고 호출시에 try-catch 블록을 사용해서 처리해야한다
Unchecked Exception
- 컴파일러가 예외처리 코드를 작성하도록 강제하지 않음
- 주로 프로그래밍 오류를 처리할때 사용함 (null point, index out of range 등등 )
- RuntimeException 클래스를 상속받음
- 강제되지 않기 때문에 throws 절을 선언하지 않아도 됨
- try-catch 블록으로 예외를 처리하지 않아도 컴파일 오류가 발생하지 않음
public class RecommendNotFoundException extends RuntimeException{
public RecommendNotFoundException(String message) {
super(message);
}
}
public RecommendResponse getRecommend(String id) {
Recommend recommend = recommendRepository.findById(id)
.orElseThrow(() -> new RecommendNotFoundException("ERROR: Cannot found id"));
return RecommendMapper.toDto(recommend);
}
나는 이런 식으로 사용해봤다
Checked 와 다르게 throw 를 사용하지 않고 try-catch 로 처리하지 않아도 된다
Checked Exception | Unchecked Exception | |
처리 강제 여부 | 컴파일러가 예외처리를 강제함 메서드에 throws 를 사용, try-catch 블록으로 처리해야함 |
컴파일러가 예외처리를 강제하지 않음 , 선택적 |
발생 시점 | 주로 컴파일 할때 예외 발생 가능성을 확인 | 주로 런타임에 발생 |
상속 계층 | Exception 상속(단 RuntimeException 의 하위 클래스를 제외) | RuntimeException 상속 |
정말 신기하다 !
반응형
'JAVA > STUDY' 카테고리의 다른 글
[Spring] 커스텀 에러 정의, 공통화 , HttpStatus 보여주기 (BaseException 정의하기) (2) | 2024.06.22 |
---|---|
[Spring] 컨트롤러에서 엔티티를 반환해도 될까? (2) | 2024.05.31 |
[Spring] @Entity 사용시 @NoArgsConstructor 를 쓰는 이유 (0) | 2024.05.29 |
[Spring] 라이브러리 (1) | 2024.02.03 |
[Spring] Autoconfiguration 만들어보기 (3) | 2023.07.09 |
Comments