728x90
오류와 예외
컴퓨터 시스템이 동작하는 도중에 예상하지 못한 사태가 발생하여 실행 중인 프로그램이 영향을 받는 것을 오류(error)와 예외(exception) 두 가지로 구분할 수 있습니다.
오류(error)
시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킵니다. 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없습니다.
예외(exception)
예외는 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만, 발생할 수 있는 상황을 미리 예측하여 처리할 수 있습니다. 따라서 개발자는 예외 처리(exception handling)를 통해 예외 상황을 처리할 수 있도록 코드의 흐름을 바꿀 필요가 있습니다.
예외 처리 선언
try {
// 실행 시 예외가 발생 가능한 코드
} catch (exception1 e1) {
// e1 예외가 발생할 경우 실행될 코드
} catch (exception2 e2) {
// e2 예외가 발생할 경우 실행될 코드
}
...
finally {
// 예외 발생 여부와 상관없이 무조건 실행될 코드
}
예외 처리의 장점
- 비정상적 종료를 막을 수 있습니다.
- 예외가 발생되면서 발생될 수 있는 피해들을 최소화할 수 있습니다.
실습
실습 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
728x90