1. 예외 넘기기
- 메소드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만 메소드를 호출한 곳으로 예외를 떠넘길 수도 있습니다.
- 예외가 난 곳에서 즉시 처리하지 않고 다른 메소드에서 처리하는 방식입니다.
- throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다.
- throws 키워드가 붙어있는 메소드는 반드시 try 블록 내에서 호출되어야 하고 catch 블록에서 떠넘겨 받은 예외를 처리해야 합니다.
[형식]
리턴타입 메소드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
...
}
2. 예시
예외가 발생 가능성이 있는 메소드에서 예외처리
- Exception(NullPointerException) 예외를 활용해 예시를 작성하였습니다.
- upperCase 메소드는 문자열을 받아 대문자로 만들어 return 하는 함수로 해당 함수에서 자체적으로 예외처리를 했습니다.
public static void main(String[] args) {
System.out.println(upperCase(null));
}
private static String upperCase(String str) {
String returnStr = null;
try {
returnStr = str.toUpperCase();
} catch (Exception e) {
returnStr = "Exception";
}
return returnStr;
}
throws로 예외 떠넘겨서 예외처리
- throws 키워드가 붙어있는 메소드는 반드시 try 블록 내에서 호출되어야 하고 catch 블록에서 떠넘겨 받은 예외를 처리해야 합니다.
public static void main(String[] args) {
try {
System.out.println(upperCase(null));
} catch (Exception e) {
System.out.println("Exception");
}
}
private static String upperCase(String str) throws Exception {
return str.toUpperCase();
}
3. main()
- 다음과 예시와 같이 upperCase 메소드에서 던진 예외를 main 메소드에서 처리하지 않고 똑같이 throws 키워드를 이용해 예외를 떠넘길 수 있습니다.
- main 메소드가 떠넘기게 예외를 떠넘기게 되면 결국 JVM이 예외 처리를 하여 예외 내용을 Console에 출력하는 것으로 예외를 처리합니다.
- main() 메소드에서 throws Exception을 붙이는 것은 좋지 못한 예외 처리 방법입니다. 프로그램이 알 수 없는 예외 내용을 출력하고 종료되는 것은 좋지 않을뿐더러 문제가 있는 것을 처리하지 않을 경우 더 큰 문제를 야기할 수도 있습니다.
- main()에서 try-catch 블록으로 예외를 최종 처리하는 것이 바람직합니다.
public static void main(String[] args) throws Exception {
System.out.println(upperCase(null));
}
private static String upperCase(String str) throws Exception {
return str.toUpperCase();
}
'Backend > Java' 카테고리의 다른 글
[Java] 자바 8 Stream API 소개 (java.util.stream) (0) | 2021.12.31 |
---|---|
[Java] 자바 커스텀 예외 만들기(Custom Exception) (0) | 2021.12.28 |
[Java] 자바 try-with-resource (AutoCloseable) (0) | 2021.12.26 |
[Java] 자바 예외 처리(Exception, RuntimeException) (0) | 2021.12.25 |
[Java] DTO List 정렬 방법 (Comparator API) (0) | 2021.12.22 |