본문 바로가기

자바

예외처리 (발생하는 위치와 코드의 흐름)

반응형

예외처리에 대한 글을 쓰면서 3가지 유의 사항이 있다고 했습니다. 

 

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

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

3. 예외의 종류와 범위

 

이번 글에서는 2번째 내용 2. 예외가 발생하는 위치에 따른 코드의 흐름에 대해 알아보려 합니다. 기본적으로 위에서 아래로 순차적으로 진행되는 코드의 흐름에서 try~catch 문에서 예외를 처리하면서 순서를 건너뛰게 되는 상황이 발생하며 이는 자바 관련된 시험에 많이 다뤄지는 것을 봤습니다.

 

위의 코드는 1부터 순차적으로 출력됩니다. 1,2,3,4, 하지만 0/0에서 0으로 나눠지지 않기에 예외가 발생하며 5가 출력되지 않고 catch 구문으로 가서 6을 출력한 뒤 마지막으로 7을 출력합니다. 

 

 

2번째 코드를 보겠습니다. 이번에는 0/0 을 출력하지 않습니다. 

1,2,3이 차례대로 출력되고 4,5가 출력됩니다. 하지만 예외가 발생하지 않기에 catch 구문으로 가지 않습니다. 마지막으로 7을 출력하게 됩니다. 

 

 

이번에는 finally 구문에 대해 알아보겠습니다 .try~catch 구문 마지막에 붙어서 예외가 발생하든 안 하든 무조건 마지막에 실행되는 구문입니다.

 

 

1,2가 출력되고 try 구문에서 3이 출력되고 0/0 에서 예외를 만나 catch 문에서 5를 출력한 뒤 finally 구문의 6을 출력 후 예외처리 문을 빠져나가 마지막으로 7이 출력됩니다. 

 

그렇다면 예외가 발생하지 않는 경우를 보겠습니다. 

1,2 가 출력된 두 try 문에서 3과 4가 출력되었지만 예외가 없기에 catch 문을 지나치고 finally 구문에서 6이 출력된 후 예외처리구문을 빠져나와 마지막으로 7이 출력됩니다. 

 

 

이번에는 return 을 통해 main 함수를 중간에 종료시켜보겠습니다. 

1,2 가 출력된 후 try 문에서 3이 출력되고 reuturn에 의해 즉각 main 함수가 종료됩니다. 하지만 finally 구문의 6을 출력한 뒤 종료됨을 알 수 있습니다. 

 

 

 

이번에는 예외를 처리해주지 못해 비정상 종료되었을때의 상황을 보겠습니다.

0은 0으로 나눠질수 없기에 예외가 발생했지만 IndexOutOfBoundsExcepion 은 배열의 범위를 벗어났을 때에 대한 예외이기에 이 예외를 처리할 수 없습니다. 1,2가 출력되고 try 문의 3이 출력된 뒤 0/0에서 예외가 발생했지만 catch 문에서 처리할 수 없는 예외이기에 즉각 종료되었습니다. 하지만 종료되기 전 6을 출력하고 종료됨을 알 수 있습니다. 

 

 

마지막으로 한가지 상황을 보겠습니다.

1,2가 출력되고 try문의 3이 출력된 후 System.exit(0)에 의해 강제 종료되었습니다. return이나 예외가 처리되어 종료되는 상황과 다르게 finally 구문의 6이 출력되지 않은 채 1,2,3 까지만 출력되는 것을 볼 수 있습니다. 

 

이번 글에서는 예외가 발생하고 처리하는 과정에서의 코드의 흐름에 대해 알아봤습니다. 다음 글에서는 아까 언급되었던 IndexOutOfBoundsExcepion 또는 0으로 나눌수 없는 예외 ArithmeticException 등 예외의 범위와 종류에 대해 알아보겠습니다.

반응형

'자바' 카테고리의 다른 글

예외처리 (종류와 범위)  (0) 2020.01.29
예외처리  (0) 2020.01.02
생성자, Constructor  (0) 2019.11.15
클래스와 인스턴스의 차이? static 의 특징, new를 왜 써야  (0) 2019.11.14
자바 클래스? 객체지향?  (0) 2019.11.08