경주장
9주차 과제: 예외 처리 #9 커스텀한 예외 만드는법 (~03.09) 본문
✔️ 학습할 것 (필수)
+ 예외란?
자바에서 예외 처리 방법 (try, catch, throw, throws, finally)자바가 제공하는 예외 계층 구조Exception과 Error의 차이는?RuntimeException과 RE가 아닌 것의 차이는?커스텀한 예외 만드는 방법
커스텀 예외 만들기
Checked Exception을 구현할 때는 Exception 을 확장
Unchecked Exception을 구현할 때는 RuntimeException 을 확장.
static class CustomRunTimeException extends RuntimeException{
public CustomRunTimeException(String message) {
super(message);
}
}
static class CustomException extends Exception{
public CustomException(String message) {
super(message);
}
}
static class Hello{
public void runtimeEx(){
System.out.println("hello");
throw new CustomRunTimeException("runtime(unchecked) exception");
}
public void ex() throws CustomException {
System.out.println("hello");
throw new CustomException("(checked) exception");
}
}
구현하고자 하는 예외의 범주가 checkedException인지 uncheckedException인지를 구분하는 지침은 아래와 같습니다.
호출하는 쪽에서 복구하리라 여겨지는 상황이라면 CheckedException을 사용하라.
확실하지 않다면 UncheckedException을 던져라
실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 합니다. 예를들어 IndexOutOfBoundsException의 상세 메시지는 범위의 최솟값과 최대삾, 그리고 그 범위를 벗어났다는 인덱스의 값을 담아야합니다.
추가적으로 4가지 Best Practices를 따르는 것이 좋다.
Java 표준 예외를 사용하는 것 보다 작성한 Custom 예외를 사용하는게 더 많은 이익을 얻는다고 생각할 경우에만Custom Exception을 구현하자.
작성한 Custom Exception 클래스의 이름의 끝은 "Exception"으로 끝나도록 하자
API 메소드가 어떤 하나의 예외를 기술하고 있다면, 그 예외는 API의 한 부분이 되는 것이며
그 예외를 문서화 해야 한다.
예외의 Cause 를 설정할 수 있는 생성자를 제공해야 한다.
API 메소드의 문서화에 관해 자바 표준 API의 예시를 살펴보겠습니다.
CheckException인 IOException을 던지는 FileWriter의 생성자입니다.
JavaDoc을 활용하여 @throws 태그를 통해 예와가 발생할 수 있는 상황에 대한 설명을 문서화합니다.
UnCheckException인 EmptyStackException을 던지는 Stack 클래스의 pop 매서드입니다.
RuntimeException도 마찬가지입니다.
CheckedException, UncheckedException, 추상메서드, 구체 메서드 모두 마찬가지로 발생가능한 예외를 문서로 남겨야합니다. (UncheckedException 은 추상 메서드에는 기입 x)
@)출처
그리고
이펙티브 자바 3/e 10장 예외
'JAVA > whiteship_live-study' 카테고리의 다른 글
9주차 과제: 예외 처리 #9 자바의 예외 클래스들 (~03.09) (0) | 2022.03.03 |
---|---|
9주차 과제: 예외 처리 #9 자바에서 예외 처리 방법 (~03.09) (0) | 2022.03.03 |
9주차 과제: 예외 처리 #9 예외란 (~03.09) (0) | 2022.03.02 |
8주차 과제: 인터페이스 #8 상속, Default Method (~03.04) (0) | 2022.02.28 |
8주차 과제: 인터페이스 #8 (~03.04) (0) | 2022.02.25 |