본문 바로가기

6개월 대장정/JAVA 개념

19일차 - 예외 처리(2)

반응형

안녕하세요. pitang입니다.

예외처리 마무리 개념 정리해보도록 하겠습니다.

 

예외 발생시키기

throw new XXXException();

throw new XXXException("메시지"); 를 통해 예외를 발생시킬 수 있다.

예외 객체를 생성할 때는 기본 생성자 또는 예외 메시지를 갖는 생성자 중 어떤 것을 사용해도 된다.

 

일반 예외로 선언할 경우 Exception을 상속하면 되고, 이 경우에는 try/catch를 꼭 사용해야 한다.

실행 예외로 선언할 경우 RuntimeException을 상속하면 된다. 이 경우에는 try/ catch를 사용해도 되고 안 해도 된다.

 

ex)

p05throw Example3 MainClass
MainClass console

 

예외 떠넘기기 (throws)

메서드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try - catch 블록으로 예외를 처리하는 것이 기본이지만,

경우에 따라서 메서드를 호출한 곳으로 예외를 떠넘길 수도 있다. 이때 throws 키워드를 사용한다.

 

사용방법은

리턴 타입 메서드명(매개변수,...) throws 예외 클래스 1, 예외 클래스 2,... {}

이다.

 

종류별로 나열하는 것이 일반적이지만, Exception만으로 모든 예외를 간단히 떠넘길 수도 있다.

 

ex1)

throws로 받았으면 try - cathch 블록으로 예외 처리를 해줘야 바람직하다. 

try - catch 블록으로 예외 처리를 하지 않은 경우는 ex2에서 볼 수 있다.

p06throws Example2Throws MainClass

-> 파일 못 찾음. 이 출력된다.

 

ex2)

p06throws Example4 MainClass
MainClass console

-> main() 메서드에서도 throws 키워드를 사용해서 예외를 떠넘겨 JVM이 최종적으로 예외 처리를 하도록 만들었다.

 

ex3)

상위 클래스의 Exception으로 예외를 처리할 수도 있다.

p06throws Example7Casting MainClass

-> 익셉션 발생이 출력된다.

 

ex4)

종류별로 나열할 수 있다.

p06throws Example9Multiple MainClass
MainClass console

 

사용자 정의 예외와 예외 발생

자바 표준 API에서 제공하는 예외 클래스만으로는 다양한 종류의 예외를 표현할 수가 없을 때,

개발자가 직접 정의해서 만들어야 하므로 사용자 정의 예외라고 한다.

 

사용자 정의 예외 클래스는 일반 예외로 선언할 경우 Exception을 상속, 실행 예외로 선언할 경우 RuntimeException을 상속하면 된다.

 

이름은 Exception으로 끝나는 것이 좋고 생성자는 두 개를 선언하는 것이 일반적이다.

매개변수가 없는 기본 생성자와 예외 발생 원인(예외 메시지)을 전달하기 위한 String타입의 매개 변수를 갖는 생성자이다.

예외 메시지의 용도는 catch {} 블록의 예외 처리 코드에서 이용하기 위해서이다.

 

ex1)

찾는 이미지가 없으면 예외가 발생하는 ImageNotFoundException이다. 

컴파일러가 체크하지 않는 실행 예외, RuntimeException을 상속한다. 

p07custom Example1 MainClass
p07custom ImageNotFoundException (RuntimeException 의 하위 클래스)
MainClass console

 

감사합니다.

 

*m1 맥북을 사용 중입니다.*

728x90
반응형