본문 바로가기

웹 개발/Java

[Web_JAVA] 26

● 예외 처리

- 에러 : 심각한 오류

- 예외 : 덜 심각한 오류

 

 

 

● 예외 처리 문법

try{

    예외가 발생할 수 있는 문장

 

} catch(예외이름 객체명) {

    // 예외 발생 시 해당 예외 필드가 메모리에 할당된다.

    // 할당된 주소를 선언한 객체로 받지 못한다면 프로그램이 강제 종료된다.

    // 이를 막기 위해 동일한 예외타입의 객체를 선언하여 catch문 안의 문장으로 대체되도록 구현한다.

    예외 발생 시 실행할 문장

 

} catch(예외이름 객체명) {

    예외 발생 시 실행할 문장

}

...

} finally {

    예외 발생 여부에 상관없이 무조건 실행할 문장

    ※ 외부 장치와 연결했을 경우 다시 닫을 때 주로 사용한다.

}

 

(ex)

catch(ArrayIndexOutOfBoundsException e) {

    // e 객체를 통해 다양한 예외 상황 및 상태를 확인할 수 있다.

    e.printStackTrace(); // 오류가 발생한 소스코드의 라인번호를 출력해준다.

 

} catch(Exception e) {

    // 모든 예외의 부모 클래스가 Exception이고,

    // 어떤 예외가 발생하더라도 Exceeption(부모) 타입이기 때문에

    // 모든 예외를 다 담을 수 있다.

    e.printStackTrace();

}

 

 

 

● 예외 처리를 사용하는 이유

- 제어문으로는 처리할 수 없는 경우

- 프로그램이 강제로 종료되는 것을 막기 위함(튕김 방지)

 

 


 

실습(예외 처리(1))

1. 음수 인덱스번호

- 예외처리 : getMessage(), toString(), println()

public class ExceptionTest { 
	public static void main(String[] args) {
		
		int[] arData = new int[4];
		
		try {
			arData[-1] = 10;
			
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println(e);
			System.out.println("배열의 인덱스 번호를 확인해주세요.");
			 
		} catch(Exception e) {  // 항상 Exception을 마지막에 써준다.
			System.out.println(e.getMessage());
			System.out.println(e.toString());
		}
		
		System.out.println("반드시 실행해야 하는 문장");
		
	}
}

 

결과

 

 

2. 반드시 실행해야 하는 문장이 출력되도록 try-catch를 사용한다.

- 예외처리 : println()

public class ExceptionTest {
	public static void main(String[] args) {

		try {
			System.out.println(10 / 0);
			
		} catch (ArithmeticException e) {
			System.out.println("0으로 나눌 수 없습니다.");
		} catch (Exception e) {
			System.out.println("알 수 없는 오류"); 
		}
		
		System.out.println("반드시 실행해야 하는 문장");
		
	} 
}

 

 

 

 

실습(예외 처리(2))

※ 문제

// 5개의 정수만 입력받기
// 무한 입력 상태로 구현
// q를 입력하면 나기기
// 5개의 정수는 배열에 담기
// if문은 딱 한 번만 사용하기

 

 

- 코드

import java.util.Scanner;

public class ExceptionTask {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int[] arData = new int[5];
		String msg = "번째 정수 입력[q : 나가기]";
		int index = 0;
		
		String temp = null;
		
		while(true) { 
			System.out.println(++index + msg);
			temp = sc.next();

			if(temp.toLowerCase().equals("q")) { break; } 

			try {
				arData[index - 1] = Integer.parseInt(temp);

			} catch (NumberFormatException e) {
				System.out.println("제대로 입력하세요.");
				index--;

			} catch (ArrayIndexOutOfBoundsException e) {
				System.out.println("5개만 입력하세요.");

				for (int i = 0; i < arData.length; i++) {
					System.out.print(arData[i] + " ");
				}

				break;

			} catch(Exception e) {
				System.out.println("잘못 입력했습니다.");
				System.out.println(e);
			}
		}
		
	}
}

 

결과(5개 이상의 정수 입력)

 

결과(q 입력)

 

 

 

 

'웹 개발 > Java' 카테고리의 다른 글

[Web_JAVA] 28  (0) 2022.03.14
[Web_JAVA] 27  (0) 2022.03.13
[Web_JAVA] 25  (0) 2022.03.11
[Web_JAVA] 24  (0) 2022.03.10
[Web_JAVA] 23  (0) 2022.03.09