먹었으면 뇌를 쓰자
자바 예외 처리하기 try&catch, RuntimeException, Exception 본문
자바에서 예외를 처리하는 구문은 다음과 같다.
try&catch 구문
try {
...
} catch (예외1){
...
} catch (예외2){
...
} finally {
예외에 상관없이 실행되는 코드
}
try 안에 실행될 코드를 넣는다.
try 안에서 예외가 발생하면 catch 안의 코드가 실행된다.
이 때 try 안의 남은 코드는 실행되지 않는다.
만약 예외에 상관없이 어떤 코드를 실행하려면
finally 안에 작성해주면 된다.
RuntimeException
RuntimeException은 실행 시 발생할 수도, 발생하지 않을 수도 있는 예외이다.
다음과 같이 RuntimeException을 상속한 예외를 선언하여
메소드 단에서 발생시킨다.
class FoolException extends RuntimeException {
} // RuntimeException 상속한 예외 선언하기
public class Sample {
public void sayNick(String nick) {
if("fool".equals(nick)) {
throw new FoolException(); // 메소드 단에서 예외 발생시키기
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("fool");
sample.sayNick("genious");
}
}
코드 참고 : 점프 투 자바 (wikidocs.net/229#throws)
Exception
Exception은 컴파일 시 발생하는, 예측 가능한 예외이다.
다음과 같이 Exception을 상속한 예외를 선언하는데
메소드 단에서 처리하거나, 메인 단에서 처리하는 방법이 있다.
1. 메소드 단에서 예외 처리하기
class FoolException extends Exception {
} // Exception 상속한 예외 선언하기
public class Sample {
public void sayNick(String nick) {
try { // 메소드 단에서 try&catch 구문으로 예외 처리하기
if("fool".equals(nick)) {
throw new FoolException(); // 예외 발생시키기
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
} catch(FoolException e) {
System.err.println("FoolException이 발생했습니다.");
}
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("fool");
sample.sayNick("genious");
}
}
위와 같이 메소드 단에서 바로 try&catch로 예외를 처리하면 결과가 이렇게 나온다.
FoolException이 발생했습니다.
당신의 별명은 genious 입니다.
예외가 발생한 코드만 catch되어 예외 처리되고, 오류가 없는 다른 코드는 정상 작동된다.
2. 메인 단에서 예외 처리하기
class FoolException extends Exception {
}
public class Sample {
public void sayNick(String nick) throws FoolException { // 나몰라라 예외 던지기
if("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
}
public static void main(String[] args) {
Sample sample = new Sample();
try{ // 메소드가 호출된 메인 단에서 try&catch 구문으로 예외 처리하기
sample.sayNick("fool");
sample.sayNick("genious");
} catch (FoolException e) {
System.err.println("FoolException이 발생했습니다.");
}
}
}
위와 같이 메소드 단은 throws를 선언해 예외를 나몰라라 던져버리고,
메인 단에서 try&catch로 예외를 처리하는 방법도 있다.
이 방법을 쓰면 오류가 없는 다른 코드까지 한번에 예외 처리가 되어버린다.
FoolException이 발생했습니다.
정리하자면 Exception 예외의 경우 다음과 같이 2가지로 처리할 수 있다.
1) 메소드 단에서 try&catch 해서 예외 코드만 따로 처리할 수 있도록 하는 방법
2) 메인 단에서 try&catch 해서 예외 코드가 하나만 발생해도 전부 예외로 처리하는 방법
쇼핑몰 배송을 가정해보자.
사은품 여부, 포장, 발송이라는 세 가지 작업이 있다.
세 작업 중 하나라도 이상이 생기면 배송이 될 수 없다.
이런 경우 2)번 방법처럼 하나만 이상해도 전부 실행되지 않게 하는 쪽이 나을 것이다.
'JAVA > 개념' 카테고리의 다른 글
내가 만든 코드~ 나를 위해 구웠지... (Stream 코드) (0) | 2022.12.18 |
---|---|
내가 만든 코드~ 나를 위해 구웠지... (Thread 코드) (0) | 2022.12.18 |
람다와 스트림에 대한 간단한 단상. (0) | 2022.12.18 |
[해결완료] 디폴트 메소드와 스태틱 메소드의 차이는 뭘까? (0) | 2022.12.17 |
자바 private과 public 차이, static 써야 할 때 (초간단) (0) | 2022.12.05 |