예외를 처리하기 위해 try / catch / fimally를 사용할 수 있다.
try {
// 예외를 처리하길 원하는 실행 코드
} catch (e) {
// e예외가 발생할 경우에 실행될 코드
} finally {
// 예외 발생 여부와 상관없이 무조건 생행될 코드
}
try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 catch 에서 처리한다.
catch : try 에서 발생한 예외 코드나 예외 객체를 인수로 전달 받아 그 처리를 담당한다.
finally : try 에서 예외가 발생하건 안하건 맨 마지막에 무조건 실행된다.
thow는 Exception을 발생시킬 때 사용하는 키워드이다. 만약 어떤 연산을 하다가 예상치 못한 일이 발생했을 때 Exception을 발생시켜 예외가 처리될수 있도록 한다.
`
class FoolException extends RuntimeException {
}
public class ExceptionStudy {
public void sayNick(String nick) {
if ("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 " + nick + " 입니다.");
}
public static void main(String[] args) {
ExceptionStudy exceptionStudy = new ExceptionStudy();
exceptionStudy.sayNick("fool");
exceptionStudy.sayNick("genious");
}
}
위 프로그램을 실행하면 fool으로 sayNick 메소드를 실행하면 다음과 같이 예외가 발생한다
class FoolException extends Exception {
}
public class ExceptionStudy {
public void sayNick(String nick) {
try {
if ("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 " + nick + " 입니다.");
} catch (FoolException e) {
System.err.println("FoolException이 발생했습니다.");
}
System.out.println("당신의 별명은 " + nick + " 입니다.");
}
public static void main(String[] args) {
ExceptionStudy exceptionStudy = new ExceptionStudy();
exceptionStudy.sayNick("fool");
exceptionStudy.sayNick("genious");
}
}
try catch문으로 FoolException을 처리했다.
throws는 메소드를 정의할 때 하용하며 이 메소드에서 발생할 수 있는 Exception을 명시적으로 정의할 때 사용한다. 따라서 throws를 보면 잠재적으로 어떤 Exception을 발생될 수 있는지 쉽게 알 수 있다.
class FoolException extends Exception {
}
public class ExceptionStudy {
public void sayNick(String nick) throws FoolException {
if ("fool".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 " + nick + " 입니다.");
}
public static void main(String[] args) {
ExceptionStudy exceptionStudy = new ExceptionStudy();
try {
exceptionStudy.sayNick("fool");
exceptionStudy.sayNick("genious");
}catch(FoolException e) {
System.err.println("FoolException이 발생했습니다.");
}
}
}
throws를 이용해서 FoolException을 위로 보낼 수 있다.
main 메소드에서 try catch로 sayNick 메소드에 대한 FoolException 예외를 처리했다.
Error는 시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킨다. 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없습니다.
Exception은 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료 시키지만 발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.
runtimeException은 try catch로 잡지 않아도 컴파일은 가능하지만 실행할때 에러가 발생한다.
Exception은 반드시 try catch로 잡아야 한다 try catch로 잡지 않으면 컴파일시 에러가 발생한다.
Exception - Checked Exception | RuntimeException - Unchecked Exception | |
---|---|---|
처리 여부 | 반드시 예외 처리 해야 한다. | 예외 처리를 하지 않아도 된다. |
트랜젝션 롤백 | 롤백 되지 않음 | 롤백 진행 |
예외 처리 확인 | 컴파일 중 | 런타임중 |
발생 | 외부 영향으로 발생 할 수 있는 것들 (사용자 동작, 운영체제 등) |
프로그래머 실수에 의해서 발생 |
Unchecked Exception을 만들고 싶을 때는 RuntimeException을 상속받는다
Checked Exception을 만들고 싶을 때는 Exception을 상속받는다
class AException extends Exception {
}
class BException extends RuntimeException {
}