예외 처리
예외와 에러의 차이점
예외는 '개발자가 처리할 수 있는 오류'
에러는 '개발자가 처리할 수 없는 오류' 이다.
예외 처리란?
- 돌발상황에 대비하여 미리 준비하여 두는것.
돌발상황의 종류
- 논리적인 오류: 프로그래머의 논리적 사고가 잘못된 경우
- 문법 오류: 자바 문법상의 오류
- 기계적인 오류: 운영체제상의 버그, 이클립스 버그 등등
- 개발환경 오류: 버전(모듈)이 안맞음, 서버SW와 클라이언트 SW상의 오류
- 예외 상황 오류: 예측하기 어려운 상황 발생 오류
예외 클래스의 상속 구조
Exception | > | CheckedException 일반 예외 (컴파일 전에 체크) |
> | RuntimeException (실행할 때 체크) |
Exception | > | ClassNotFound Exception |
> | AritnmeticException |
Exception | > | Interrupted Exception |
> | ClassCastException |
Exception | > | IOException | > | ArrayIndex OutOfBounds Exception |
Exception | > | FileNotFound Exception |
> | NumberFormat Exception |
Exception | > | ... | > | ... |
예외 처리 문법
- try-catch
- throw (예외 전가)
try-catch
try{
//예외가 발생 할 수 있는 코드 입력
}catch(//일어날 수 있는 예외 입력){
//해당 예외 발생 시 실행할 코드 입력
}finally{
//예외 발생 여부 상관없이 무조건 실행되는 코드
}
example
package lecture0601;
public class MultiCatch {
public static void main(String[] args) {
int num = 0;
try {
System.out.println(3 / 0);
num = Integer.parseInt("10A");
} catch (ArithmeticException e) {
System.out.println("num can't divide by 0");
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("num can't change");
System.out.println(e);
} finally {
System.out.println("shut down");
}
System.out.println(num);
}
}
ArithmectixException: 수를 0으로 나눌 때 생기는 예외
NumberFormatException: 수로 타입변환 불가능 한 문자열을 수로 타입 변환 하려고 할 때 생기는 예외
example2
package lecture0601;
/*
* 문제
* 7개의 데이터를 입력 받아서 숫자중에서 음수와 양수를 구분하여 출력하세요.
*
* 조건
* 1. 배열 적용
* 2. 예외처리 적용
* 3. 음수인 경우 다음 데이터 읽기로 이동*/
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionQuestion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] array = new int[7];
int positiveSum = 0;
int positiveCount = 0;
for (int i = 0; i < array.length; i++) {
System.out.println(i + 1 + "번 째 정수를 입력하세요.");
try {
int input = sc.nextInt();
array[i] = input;
if (input < 0) {
System.out.println("음수입니다. 다음 데이터를 입력받습니다.");
continue;
}
positiveSum += input;
positiveCount++;
} catch (InputMismatchException e) {
System.out.println("정수만 입력해주세요. 메서드를 종료합니다.");
return;
} catch (Exception e) {
System.out.println(e);
System.out.println("알수없는 에러입니다. 메서드를 종료합니다.");
return;
}
}
System.out.println("입력된 데이터: " + Arrays.toString(array));
System.out.println("양수의 합계: " + positiveSum);
System.out.println("양수의 갯수: " + positiveCount);
}
}
InputMismatchException: 입력된 값이 잘못된 데이터(타입) 일 때 발생하는 예외
Exception: 모든 예외를 캐치
throw(예외 강제 발생)
public class Test {
public static void main(String[] args){
try{
throw new Exception();
} catch(Exception e){
System.out.println("예외 강제 발생");
}
}
}
throw new Exception()을 통해 강제로 Exception을 발생시키고
발생한 Exception을 catch에서 잡아 "예외 강제 발생" 이 출력된다.
throws(예외 전가)
thorws는 예외를 상위쪽으로 미루어 한꺼번에 처리를 하는 방식이다.
메소드는 여러곳에서 사용하려고 만든다. 만약 그런 메소드에서 예외가 발생하고 예외처리를 하려면
해당 메소드를 사용하는 많은 클래스에서 예외처리를 해주어야 한다.
throws를 사용하여 호출할 쪽에서 처리를 하고 throws 구문에 발생할만한 예외를 적어 인계자에게 시간 낭비를 줄여줄 수 있다.
public void method1(int num1) throws Exception{
//{...}
}
example
class Test {
public void test(String a, String b) throws NumberFormatException{
//문자로 받은 a와 b가 A와 같은 문자라면 숫자로 변형할 수 없다
//->NumberFormatException이 발생한다.
int sum = Integer.parseInt(a) + Integer.parseInt(b);
System.out.println("문자로 입력받은 " + a + ", " + b + "의 합은 " + sum + "입니다.");
}
사용자 정의 예외 클래스
package lecture0601;
class MinusException extends Exception {
public MinusException() {
super();
}
public MinusException(String messege) {
super(messege);
}
}
class OverException extends Exception {
public OverException() {
super();
}
public OverException(String message) {
super(message);
}
}
class UserExceptionExampleA {
void checkScore(int score) throws MinusException, OverException {
if (score < 0) {
throw new MinusException("음수값을 입력하셨습니다.");
} else if (score > 100) {
throw new OverException("100점을 초과한 값을 입력하셨습니다.");
} else {
System.out.println("정상적인 값입니다.");
}
}
}
public class UserExceptionExample {
public static void main(String[] args) {
UserExceptionExampleA a = new UserExceptionExampleA();
try {
a.checkScore(85);
a.checkScore(120);
} catch (MinusException | OverException e) {
System.out.println(e.getMessage());
}
}
}
'🤓천재교육 풀스택 1기 노트' 카테고리의 다른 글
천재교육 풀스택1기 과정 JSP Section1. 서블릿, 자바 웹 기술의 새 지평을 열다. (3) | 2023.07.28 |
---|---|
천재교육 풀스택과정 1기 DAY17 (0) | 2023.06.05 |
천재교육 풀스택 과정 1기 Day15 (0) | 2023.05.31 |
천재교육 풀스택 과정 1기 Day13 (0) | 2023.05.26 |
천재교육 풀스택 과정 1기 Day12 (0) | 2023.05.25 |