자바 (Java)/요약

Chpt 8. 예외 - 주제 2. 예외의 처리

학듄 2023. 11. 1. 13:53
728x90

1. 인위적 예외 발생

 

프로그래머가 고의로 예외를 발생시킬 때는 다음과 같이 한다. 참고로 모든 예외 발생은 인스턴스를 생성한다.

 

throw new Exception("의도적으로 발생시킨 예외");

 

2. 예외 처리의 정의와 목적

 

예외 처리 정의: 예외 발생에 대비한 코드 작성
예외 처리 목적: 프로그램의 비정상적 종료 방지

 

3. 예외 처리 방법

 

예외를 처리하는 네 가지 방법이 존재한다.

 

1) try-catch문 (직접 처리)

 

try 블럭에서 예외가 발생 (예외 인스턴스 생성)
(1) 하지 않을 경우, try 블럭만 실행된다.
(2) 할 경우, 곧바로 catch 블럭 그룹으로 넘어간다.
    (2-1) 생성된 예외 클래스의 인스턴스 instanceof 괄호 안 예외 타입이
        (2-1-1) true면 해당 블럭 안의 코드만 실행된다.
        (2-1-2) 모든 catch 블럭에 대해 false면 (3).
(3) finally 블럭이 실행된다.

 

catch 블럭이 여러 개인 경우 차례로 (2-1)를 계산해 하나의 catch 블럭만 실행된다. 그렇기 때문에 마지막 catch 블럭에 Exception을 배치하면 어떤 종류의 예외도 처리가 가능하다. 정리하면  try → catch → finally, 아니면 try → finally이다.

 

(2)에서 예외 인스턴스가 생성되는데 이 인스턴스의 메서드로는 printStackTrace()와 getMessage() 등이 있다. 이 메서드는 다음과 같은 역할을 한다.

 

  기능
printStackTrace() (1) 호출 스택 안 메서드 정보, (2) 예외 메시지 출력
getMessage() 예외 메시지 반환

 

[참고 1] 멀티 catch 블럭

 

멀티 catch 블럭을 사용하면 열 예외 클래스를 '|' 기호(논리 연산자 아님)를 이용해 연결할 수 있다. 다음과 같은 특징이 있다.

 

(1) 예외 클래스들은 조상-자손 관계일 수 없다.
(2) 예외 클래스들의 공통인 조상의 메서드만 사용할 수 있다.

 

2) 메서드에 예외 선언하기 (떠넘기기)

 

다음과 같이 메서드에 예외를 선언하며 checked 예외, Exception 예외를 선언하는 것이 일반적이다. 또한 Exception 클래스 간의 상속 관계를 잘 따져야 한다. 

 

리턴 타입 메서드 이름(매개 변수들) throws Exception 1, Exception 2, ... , Exception N {};

 

[주의] thorws 키워드를 사용해 메서드에 예외를 선언했다고 예외가 처리가 된 것은 아니고, 호출한 쪽해서 try-catch문을 통해 처리를 해야 예외가 발생하지 않음을 주의하자.

 

3) 예외 되던지기 (직접 처리 + 떠넘기기)

 

예외를 되던지는 방법은 다음과 같다.

 

(1) 예외를 되던질 메서드에 throws 키워드를 사용해 예외를 선언한다.
(2) try-catch를 사용해 예외를 처리한다.
(3) throw를 통해 처리한 예외를 다시 던진다.

 

[참고] 예외를 되던지는 이유에 대해 생각하지 말고 그냥 이런 경우도 있구나 생각하고 넘어가면 된다.

 

4) 은폐

 

try-catch문

반응형