Java

[Java] 사용자 정의 예외, 예외 되던지기 (예외처리 1-5)

codeStudy123 2022. 1. 16. 22:01

 

 


사용자 정의 예외

 

- 프로그래머가 직접 예외 클래스를 만들 수 있다.

- 조상은 Exception과 RuntimeException 중에서 선택하면 된다.

 

class Excetpion1 extends Exception{
	Excetpion1(String str){  //거의 필수적으로 넣는 코드이다.
		super(str);
	}
}

보통 예외처리 필수가 아닌 RuntimeException을 조상으로 한다.

 

결론적으로

사용자 예외 클래스가 Exception과 RuntimeException 둘 중 하나로 상속받아야 한다.

사용자 예외 클래스 생성자 (String 매개변수){ super(매개변수) } 이 또한 필수이다.

 

 

public class Hello {
	public static void main(String[] args)throws MyException2 {
		try {
			start();
			start2();
		}catch(MyException me1) {
			me1.printStackTrace();
		}catch(MyException2 me2) {
			System.out.println(me2.getMessage());
		}
	}
	static void start()throws MyException{
		throw new MyException("MyException 발생");
	}
	static void start2()throws MyException2{
		throw new MyException2("MyException 발생");
	}
}


class MyException extends RuntimeException{
	MyException(String msg) {
		super(msg);
	}
}

class MyException2 extends Exception{
	MyException2(String msg) {
		super(msg);
	}

 

packages.MyException: MyException 발생
	at packages.Hello.start(Hello.java:17)
	at packages.Hello.main(Hello.java:7)

 

 

 

 


 

 

예외 되던지기 (Exception re-throwing)

 

- 예외를 처리한 후에 다시 예외를 발생시킨다.

- 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것

 

 

public class Hello {
	public static void main(String[] args){
		try {
			catchmethod();
		}catch(ReException r) {
			System.out.println(r.getMessage());
			System.out.print("main() 예외처리 성공");
		}
	}
	
	static void catchmethod()throws ReException{
		try {
			throw new ReException("발생");
		}catch(ReException re) {
			System.out.println(re.getMessage());
			System.out.println("catchmethod() 예외처리 성공");
			throw re;
		}
	}
}


class ReException extends RuntimeException{
	ReException(String msg) {
		super(msg);
	}
}

 

발생
catchmethod() 예외처리 성공
발생
main() 예외처리 성공

 

예외를 이미 처리했는데 왜 또 발생시켜서 던지는 것일까?

 

예외를 양쪽에서 처리해야 할 때가 분명 있을 수 있다.

 

 

지금까지 배운 내용으로 예외처리 방법은 크게 3가지인 것이다.

 

1. 바로 예외처리

2. 예외를 떠넘기기 호출시킨 쪽으로 떠넘기기

3. 예외를 처리한 후 다시 예외 던져서 호출한 메서드 쪽에서도 예외 처리하기

 

 


 

 

 

 

🚀 이전 글 보기 (예외처리 1-4)



 

 

 

 

 

 

커버사진

<a href="https://www.flaticon.com/free-icons/java" title="java icons">Java icons created by Freepik - Flaticon</a>

https://www.flaticon.com/free-icon/java_152760