Custom Exception

태그
Spring
날짜
2024/01/29
2 more properties

사용자 정의 예외 (Custom Exception)

일반 예외로 선언할 경우 Exception.java를 상속받아 구현
실행 예외로 선언할 경우 RuntimeException.java를 상속받아 구현
사용자 정의 예외 클래스는 컴파일러가 체크하는 일반 예외로 선언할 수도 있고, 컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있습니다.
일반 예외로 선언할 경우 Exception을 상속하면 되고, 실행 예외로 선언할 경우에는 RuntimeException을 상속하면 됩니다.
사용자 정의 예외 클래스 이름은 Exception으로 끝나는 것을 권장합니다.
사용자 정의 예외 클래스 작성 시 생성자는 두 개를 선언하는 것이 일반적입니다.
매개 변수가 없는 기본 생성자
예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개변수를 갖는 생성자
예외 메시지의 용도는 catch {} 블록의 예외처리 코드에서 이용하기 위해서입니다.

예시

• RuntimeException을 상속받아 작성한 사용자 정의 예외
public class CustomException extends RuntimeException { // 1. 매개 변수가 없는 기본 생성자 CustomException() { } // 2. 예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개변수를 갖는 생성자 CustomException(String message) { super(message); // RuntimeException 클래스의 생성자를 호출합니다. } }
Java
복사

예외 발생 시키기

throw new 예외(); throw new 예외("메시지");
Java
복사

Custom Exception 활용

• 강제로 예외를 발생시켜 메소드를 호출한 곳에서 커스텀 예외를 처리.
public static void main(String[] args) { try{ test(); } catch (CustomException e) { System.out.println("커스텀 예외 테스트"); } } public static void test() throws CustomException { throw new CustomException("예외 테스트 입니다."); }
Java
복사

예외 정보 얻기

try 블록에서 예외가 발생되면 예외 객체는 catch 블록의 매개 변수에서 참조하게 되므로 매개 변수를 이용하면 예외 객체의 정보를 알 수 있다.
모든 예외 객체는 Exception 클래스를 상속하기 때문에 Exception이 가지고 있는 메소드들을 모든 예외 객체에서 호출할 수 있다.
Exception는 Throwable를 상속받고 Throwable에 객체의 정보를 얻을 수 있는 메소드를 가지고 있다.
주로 자주 사용되는 메소드는 getMessage()와 printStackTrace().
public class Exception extends Throwable { public Exception() { super(); } public Exception(String message) { super(message); } // (. . .) 생략 }
Java
복사
public class Throwable implements Serializable { public String getMessage() { return detailMessage; } public void printStackTrace() { printStackTrace(System.err); } // (. . .) 생략 }
Java
복사
getMessage()
String 타입의 매개변수 메시지를 갖는 생성자를 이용하였다면, 메시지는 자동적으로 예외 객체 내부에 저장되게 되는데 이 메시지를 리턴하는 함수입니다.
예외 메시지의 내용에는 왜 예외가 발생했는지에 대한 간단한 설명이 포함됩니다.
printStackTrace()
예외 발생 코드를 추적해서 모두 콘솔에 출력합니다.
어떤 예외가 어디에서 발생했는지 상세하게 출력해주기 때문에 프로그램을 테스트하면서 오류를 찾을 때 활용합니다.

Custom Exception 활용

public static void main(String[] args) { try{ test(); } catch (CustomException e) { System.out.println("커스텀 예외 테스트"); System.out.println(e.getMessage()); e.printStackTrace(); } } public static void test() throws CustomException { throw new CustomException("예외 테스트 입니다."); }
Java
복사