☕ Java

[Java] Day13 - 예외와 예외처리

harveydent 2023. 5. 19. 09:33
728x90

오류와 예외

컴퓨터 시스템이 동작하는 도중에 예상하지 못한 사태가 발생하여 실행 중인 프로그램이 영향을 받는 것을 오류(error)와 예외(exception) 두 가지로 구분할 수 있습니다.

오류(error)

시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킵니다. 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없습니다.

 

예외(exception)

예외는 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만, 발생할 수 있는 상황을 미리 예측하여 처리할 수 있습니다. 따라서 개발자는 예외 처리(exception handling)를 통해 예외 상황을 처리할 수 있도록 코드의 흐름을 바꿀 필요가 있습니다.

예외 처리 선언

try {
	// 실행 시 예외가 발생 가능한 코드
} catch (exception1 e1) {
	// e1 예외가 발생할 경우 실행될 코드
} catch (exception2 e2) {
	// e2 예외가 발생할 경우 실행될 코드
}
...
finally {
	// 예외 발생 여부와 상관없이 무조건 실행될 코드
}

예외 처리의 장점

  1. 비정상적 종료를 막을 수 있습니다.
  2. 예외가 발생되면서 발생될 수 있는 피해들을 최소화할 수 있습니다.

 

실습

실습 1

package class01;

// [ 예외와 예외처리 ]

public class Test01 {

	public static void main(String[] args) {
		
		int a = 10;
		int b = 0; // 정수 / 정수 자체는 문제가 없음!
		try {
			System.out.println("확인1");
			System.out.println(a/b); // 실행을 하려고보니까, 0이었던것!
			// 코딩자체에는 문제가없으나,
			// "실행시"발생하는 문제 == 예외
			// 예외, 오류, 버그, ...
			System.out.println("확인2");
		} catch(Exception e) {
			System.out.println("확인3");
			System.out.println(a/1);
			System.out.println("확인4");
		}
	}
}

 

실습 2

package class01;

public class Test02 {

	public static void main(String[] args) {
		
		int[] data = new int[3];
		for (int i = 0; i < data.length; i++) {
			data[i] = i + 1;
		}
		
		try {
			System.out.println(data[3]);
		} catch (ArithmeticException e) {
			System.out.println("0으로 나눌 수 없음");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("해당 인덱스는 없는 인덱스입니다.");
		} finally {
			System.out.println("예외발생여부와 무관하게 예외 발생여부와 무관하게 항상 수행되는 코드");
		}
	}
}

 

실습 3

package class02;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test04 {
	
	public static void main(String[] args) {
		
		ArrayList<Integer> data = new ArrayList<Integer>();
		Scanner sc = new Scanner(System.in);
		
		final int CNT = 3;
//		for (int i = 0; i < CNT; i++) {
//			System.out.print("정수입력) ");
//			int num = sc.nextInt();
//			data.add(num);
//		}
		while (data.size() < CNT) {
			int num;
			try {
				System.out.print("정수입력) ");
				num = sc.nextInt();
			} catch (InputMismatchException e) {
				sc.nextLine();
				System.out.println("정수로만 입력해주세요.");
				continue;
			}
			data.add(num);
		}
		System.out.println(data);
		
		int i = 0;
		while (i < data.size()) {
			if (data.get(i) <= 0) {
				data.remove(i);
				continue;
			}
			i++;
		}
		System.out.println(data);
		
		int maxIndex = 0;
		int max = data.get(0);
		for (int j = 1; j < data.size(); j++) {
			if (data.get(j) > max) {
				max = data.get(j);
				maxIndex = j;
			}
		}
		System.out.println("최대값= " + max);
		System.out.println("인덱스= " + maxIndex);
		data.remove(maxIndex);
		
		int sum = 0;
		for (int v : data) {
			sum += v;
		}
		double avg = sum * 1.0 / data.size();
		System.out.println("총합= " + sum);
		System.out.println("평균= " + avg);
	}
	
}

GitHub

https://github.com/Qkrwnsgus0522/Java

 

GitHub - Qkrwnsgus0522/Java

Contribute to Qkrwnsgus0522/Java development by creating an account on GitHub.

github.com

 

728x90