본문 바로가기

자바

예외처리

반응형

예외처리라고 하면 예외가 날 구문을 작성하고 예외가 났을 경우 실행할 코드를 작성해 주는 아래와 같은 구문이 생각나게 됩니다. 

 

저도 사실은 이게 다라고 생각했지만 예외처리 부분에서 꼭 알아야 할 내용들이 몇 가지 있다는 것을 알게 되었습니다. 

 

1. 예외가 어디서 발생하고 어디서 처리되는지

2. 예외가 발생하는 위치에 따른 코드의 흐름

3. 예외의 종류와 범위

 

첫번째로 예외가 발생되고 처리되는 위치에 대해 알아보겠습니다. 

우선 이 코드에 대해 설명하자면 method1에서 예외를 발생시키고 method2에서 예외를 처리했습니다. 그리고 method3 은 method1에서 발생한 예외를 전달받는 코드입니다. 

 

main에서 method1()을 호출해 보겠습니다. 예외처리가 안되었기 때문에 당연히 예외가 발생하였기에 즉각 종료되어 콘솔 창에는 예외가 발생한 위치를 나타내고 있습니다. 하지만 "예외가 처리 되지 않는 한 실행될 수 없습니다"라는 문구는 출력되지 않습니다. 예외가 처리되지 않았기 때문이죠.

 

이번에는 예외를 다른 메서드로 전달해 보겠습니다. 

아까와 다른점은 예외가 발생한 위치가 method1()을 호출한 main과 실제로 예외가 발생한 method1()인데 이번에는 method1()을 호출한  method3()이라고 나오는 것을 알 수 있습니다. 두 상황을 종합해보면 예외가 최초 발생한 곳은 method1 안이지만 이를 호출한 메서드로 예외가 전달된다는 사실을 알게 되었습니다. 그리고 예외가 처리되지 못해 비정상적 종료가 되어 "예외가 처리되지 않는 한 실행될 수 없습니다." 구문은 출력되지 못했습니다. 

 

마지막으로 예외를 전달해서 다른 메서드에서 예외처리 해보겠습니다. 

 

 

이번에는 method1() 에서 발생한 예외를 method2()에서 처리했습니다. 예외가 정상적으로 처리되었기에 비정상 종료되지 않은 채 printStatckTrace()와 println("예외가 처리되지 않는 한 실행될 수 없습니다.")가 차례대로 실행되었음을 볼 수 있습니다. 

 

위 3가지 상황을 통해서 예외는 메서드를 넘나들수 있다는 사실을 알게 되었고 마찬가지로 다른 메서드에서 처리할수 있다는 사실 또한 알게 되었습니다. 

 

 

 

이번에는 클래스간 예외를 전달하고 대신 처리해줄 수 있는지를 살펴보겠습니다. 

 

클래스를 하나 만들고 method4() 를 통해 예외를 발생시켰습니다. 

 

클래스를 상속받은 후 조상 클래스의 method4() 에서 발생한 예외를 자손 클래스의 main에서 처리했습니다. 그 결과 "다른 클래스에서 넘어온 예외를 처리했습니다."라는 문구가 성공적으로 출력됨을 알 수 있습니다.  

 

종합해 보자면 예외는 다른 메서드, 클래스로 전달 가능하며 예외처리 역시 다른 메서드, 클래스에서 가능하다는 점을 알수 있습니다. 그리고 발생한 예외는 메서드, 클래스의 위치에 무관하게 꼭 처리하지 않으면 안 된다라는 점도 알 수 있었습니다. 

반응형