공부/Java

[Java] 예외 처리 코드 (다중 catch / 두 개 이상의 예외 처리 |)

ByeongJun 2023. 4. 12. 00:33
반응형

예외 처리 코드

예외가 발생했을 때 프로그램의 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드

 

출처 : <이것이 자바다(개정판)>

예외 처리 코드는 try-catch-finally 블록으로 구성되며 생성자 내부와 메소드 내부에서 작성된다. 

 

try 블록에서 작성한 코드가 정상 실행되면 catch 블록은 실행되지 않고 finally 블록이 실행된다. 

try 블록에서 예외가 발생할 경우 예외를 잡기 위해 catch 블록이 실행되고 연이어 finally 블록이 실행된다. 

 

예외가 발생하면 예외 객체가 catch 선언부의 예외 클래스 변수에 대입된다.

 

finally

여기서 알아야 할 점은 예외가 발생하던 안하던

finally 블록은 무조건 실행된다는 것이다.

 

심지어 try 블록과 catch 블록에서 return문(메소드 종료) 사용을 하더라도 

finally 블록은 무조건 실행된다.

 

finally 블록은 옵션으로 생략 가능하다. 

 

 

 


예외 종류에 따른 처리

try 블록에 다양한 종류의 예외가 발생하는데 다중 catch를 사용하면

발생하는 예외에 따라 예외 처리 코드를 다르게 작성할 수 있다. 

 

 

catch 블록이 여러 개라고 할지라도 catch 블록은 단 하나만 실행된다. 

 

try 블록에서 동시 다발적으로 예외가 발생하지 않으면서도 

예외가 하나 발생하면 즉시 실행을 멈추고 해당 catch 블록으로 이동하기 때문이다. 

 

처리해야 할 예외 클래스들이 상속 관계에 있을 때는 

하위 클래스 catch 블록을 먼저 작성하고 상위 클래스 catch 블록을 나중에 작성해야 한다. 

상위를 부모, 하위를 자식으로 비유해 설명하자면 '클래스 마저도 부모는 자식부터 챙기는구나..' 엄마 사랑해 

 

사실 그 이유는 예외가 발생하면 catch 블록은 위에서부터 차례대로 검사 대상이 되는데 

하위 예외도 상위 클래스 타입이므로 상위 클래스 catch 블록이 먼저 검사 대상이 되면 안 된다. 

 

 

 

 


catch 블록이 여러 개라고 할지라도 catch 블록은 단 하나만 실행된다. 라고 위에서 설명했는데 

두 개 이상의 예외를 하나의 catch 블록으로 동일하게 처리하고 싶은 경우가 있을 것이다. 

 

그럴 경우 catch 블록에 예외 클래스를 기호 |로 연결하면 된다. 

 

반응형