자바의 예외처리 방법인 try-catch에 대해서 정리해보자

 

다음의 코드를 보고 결과값을 생각해보자

public static void main(String[] args) throws Exception {
	
    for(int i = 0; i < 10; i++) {
    	System.out.println(i);
        
        if(i==5) {
        	throw new Exception();
        }   
    }
}

 

해당 코드를 실행하면 출력값은 어떻게 될까???

 

출력값 : 0 1 2 3 4 5 

 

5번 인덱스 출력 후  중단된다.

 

그럼 다음 코드의 출력값은 어떨까?

 

public static void main(String[] args) throws Exception {
	
    for(int i = 0; i < 10; i++) {
    	System.out.println(i);
        
        if(i==5) {
        	try {
            	throw new Exception();
            } catch (Exception e) {
            	e.printStackTrace();
            }
        	
        }   
    }
}

 

출력값 : 0 1 2 3 4 5 6 7 8 9

 

try-catch 내에서 예외가 발생하면 해당 예외는 catch 블록을 통해 예외가 처리된다.

따라서, 정상적으로 for loop가 작동하게 된다.

 

반면에, 맨위 코드의 경우 throw new Exception(); 을 통해 예외를 던지고 있다. 하지만 이것을 받아줄 catch 부분이 없기 때문에 종료되게 된다.

 

 

다중 try-catch

public static void main(String[] args) {

		try {
			System.out.println("외부 try 로직 수행.");
			try {
				System.out.println("내부 try 로직 수행");
				Exception e = new Exception();
				throw e;
			} catch (Exception e) {
				System.out.println("내부 try catch문 exeption : " + e);
				System.out.println("예외 던지기 한번 더");
				throw e;
			}finally {
				System.out.println("finally 구문 출력");
			}
		} catch (Exception e) {
			System.out.println("외부 try - catch exception : " + e);
		}
		System.out.println("종료");
	}

위 코드의 실행 순서를 생각해보자.

  1. '외부 try 로직 수행.' 출력
  2. '내부 try 로직 수행.' 출력
  3. '내부 try catch문 exception : java.lang.Exception' 출력
  4. '예외 던지기 한번 더' 출력
  5. 'finally 구문 출력' 출력
  6. '외부 try - catch exception : java.lang.Exception' 출력
  7. '종료' 출력

내부의 예외처리부분인 catch에서 강제로 Exception 을 한번 더 발생시켰을때 처리해줄 catch 부분이 외부 catch 부분이기 때문에

'외부 try - catch exception : java.lang.Exception' 이 출력되게 된다.

'Back-End > Java' 카테고리의 다른 글

할머니도 이해할 수 있는 자바 Thread  (0) 2025.05.01
스레드  (0) 2024.07.05
프로세스  (0) 2024.07.04
Java HTTP 통신  (1) 2024.06.12
Exception과 Transaction  (0) 2024.02.05

+ Recent posts