본문 바로가기
Java, JSP

[Java/자바] 예외처리 (try - catch - finally), 사용자 정의 예외

by LasBe 2022. 1. 4.
반응형

⚡️예외처리(Exception)

프로그램을 작성하며 오류가 발생할 경우 프로그램은 그 즉시 오류 메세지를 남기며 종료됩니다.

 

예외처리는 오류로 인한 갑작스러운 프로그램의 종료 혹은 자신도 모르게 숨어있는 버그를 찾기 위해 사용됩니다.

 

기본적으로 try문에서 발생한 오류를 catch문으로 던져줘 오류에 대한 예외처리를 하고,

오류의 유무에 상관없이 finally문을 작동시킵니다.

try {
	// 일반적으로 실행하는 문장
}
catch(예외타입 e) {
	// 예외 처리 구문
}
catch(예외타입2 e) {
	// 다중 예외 처리 구문
}
finally {
	// 반드시 실행하는 구문
}

구문이 실행되는 순서는 2가지로 나뉩니다.

 

1. 오류가 발생하지 않았을 때 : try -> finally

 

2. 오류 발생 시 : try -> catch -> finally


📌 예외처리 종류

아래와 같이 다양한 예외 타입에 맞게 catch문의 파라미터에 대입이 필요합니다.


📌 예외 강제하기

throw new Exception();을 통해 강제로 예외 상황을 만들 수 있습니다.

try {
	throw new Exception(); // 예외 강제하기
}
catch(Exception e) { // 예외 클래스로 Exception
	System.out.println("Exception이 발생했습니다.");
}

📌 사용자 정의 예외(Custom Exception)

이미 존재하는 예외 클래스를 제외하고 프로그램에서 내가 원하는 상황에 대한 예외처리를 하고 싶을 수가 있습니다.

 

예를들어 로그인할 때 아이디와 비밀번호가 틀렸을 때, 회원가입 시 아이디의 중복같은 것들이 있겠네요.

 

이를 위해 사용자가 직접 예외 클래스를 만들 수 있습니다.

 

아래에서 사용자 정의 예외를 간단한 코드로 알아보겠습니다.

class UnsupportFunctionException extends RuntimeException{
	private final int ERR_CODE;
	UnsupportFunctionException(String msg, int ERR_CODE) {
		super(msg);
		this.ERR_CODE = ERR_CODE;
	}
	public int getErrCode() { return ERR_CODE;}
	public String getMessage() { return super.getMessage()+","+ERR_CODE;}
}

public class CustomException {

	public static void main(String[] args) {
		try {
			String id = "newId"; String pw = "123456";
			if(id == "newId" && pw == "123456") {
				throw new UnsupportFunctionException("지원하지 않는 아이디와 비밀번호.",200);
			}
		}catch(UnsupportFunctionException e) {
			System.out.println(e.getMessage());
			System.out.println(e.getErrCode());
		}
	}
}

우선 클래스에서 강제적인 예외를 처리하는 Exception 대신

RuntimeException은 명시적인 처리를 강제하지 않기 때문에 되도록이면 RuntimeException에서 상속받는 편이 좋습니다.

 

아래의 표에서 그 둘의 차이를 알 수 있습니다.

출처 : Java 예외(Exception) 처리에 대한 작은 생각 (nextree.co.kr)

 

클래스에서 예외 처리에 필요한 멤버를 선언해준 뒤,

메인에서 예외처리할 조건을 만든 뒤 throw new 사용자 정의 예외 클래스명(); 을 통해 catch문으로 보낼 수 있습니다.

반응형

댓글


오픈 채팅