[Java] 4. Exception 기본 설명
Exception 기본적인 설명 예제이다,
1. try ~ catch 문
try {
//예외가 발생할 수 있는 로직 블럭
} catch (Exception e1) {
//Exception1 이 발생 했을 경우 처리 로직
} catch (Exception e3) {
//Exception3 이 발생 했을 경우 처리 로직
}
2. printStackTrace() 와 getMessage()
printStackTrace()
//예외발생 당시의 호출스택(call stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
ex.printStackTrace();
java.lang.Exception: 강제 에러 발생
at com.example.exception.sample.ExExceptionSample.main(ExExceptionSample.java:6)
Process finished with exit code 0
getMessage()
//발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
System.out.println("에러 메시지: " + e.getMessage());
에러 메시지: 강제 에러 발생
3. 강졔 예외 발생
throw new Exception("강제 에러 발생");
Exception e = new Exception("강제 에러 발생");//예외 객체 생성
try {
throw e;//예외를 발생시킴
//throw new Exception("강제 에러 발생");
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("에러 메시지: " + ex.getMessage());
}
4. finally 블럭
finally 블럭은 예외 발생 여부와 상관없이 처리되는 로직이다. 임시 데이터들이나 리소스를 반환 및 정리하는 로직으로 많이 사용했다.
Exception e = new Exception("강제 에러 발생");//예외 객체 생성
try {
throw e;//예외를 발생시킴
//throw new Exception("강제 에러 발생");
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("에러 메시지: " + e.getMessage());
} finally {
System.out.println("예외 발생 여부와 상관없이 처리되는 블럭");
}
5. 예외 떠넘기기
아래 예제 코드는 method2()에서 에러 발생시에 method1()을 통해 main() 메서드까지 에러를 부모에게 넘긴다.
public static void main(String... args) {
try {
method1();
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("에러 메시지: " + ex.getMessage());
}
}
private static void method1() throws Exception {
method2();
}
private static void method2() throws Exception {
throw new Exception("에러 발생");
}
6. 예외 되 던지기(exception re-throwing)
호출한 메서ㄷ와 호출 된 메서드에서 예외처리가 필요시에 사용된다.
업무상에서 에러 발생 시에 예외처리한 후에 다시 에러를 발생 시켜서 부모에게 에러를 전파시켜 부모의 예외처리 로직을 실행시킬 때 활용된다. (이전에 추가 개발 된 이후에 추가 개발건에서 사용한 적이 있다.)
public static void main(String... args) {
try {
method1();
} catch (Exception ex) {
System.out.println("main() 에서 예외 처리");
}
}
private static void method1() throws Exception {
try {
throw new Exception("메서드 1 에러 발생");
} catch (Exception e) {
System.out.println("method() 에서 예외 처리");
throw e;//다시 에러를 발생 시켜서 부모에게 에러를 전파 시킨다.
}
}
7. 사용자 정의 예외 만들기
사용자 정의 예외를 만들어서 에러들을 처리시에 에러코드들을 이용하면 서비스 후처리에서 관리가 편리하기에 서비스에 성격에 맞게 구현하면 용이하다.
//사용자 정의 구현시 조상을 Exception 과 RuntimeException 중에서 선택한다.
class CustomException extends Exception {
private final int ERR_CODE;
CustomException(String msg, int errCode) {
super(msg);
ERR_CODE = errCode;
}
CustomException(String msg) {
this(msg, 100);
}
public int getErrCode() {
return ERR_CODE;
}
}
public class ExCustomException {
public static void main(String... args) {
//사용자 정의 예외처리시에 서비스에 맞게 에러코드를 관리가 편리함
CustomException e = new CustomException("사용자 정의 예외 에러 발생", 101);
try {
throw e;//예외를 발생시킴
//throw new Exception("강제 에러 발생");
} catch (CustomException ex) {
System.out.println("에러 메시지 :"+ ex.getMessage());
System.out.println("에러 코드 :"+ ex.getErrCode());
}
}
}