컴퓨터는 잘못이 없다..

[JAVA]예외 처리 본문

공부/JAVA

[JAVA]예외 처리

도토리까꿍v 2024. 4. 20. 18:47
Contents 접기

#핵심 요약

  • 예외(Exception)
    • 정상적이지 않은 Case
      1. 0으로 나누기
      2. 배열의 인덱스 초과
      3. 없는 파일 열기 등..
  • 예외처리
    • try ~ catch
    • try ~ catch ~ finally
    • throw, throws
  • finally
    • 예외 발생 여부와 관계 없이 항상 실행되는 부분
  • throw 
    • 예외를 발생시킴
  • throws
    • 예외를 전가시킴

#소스 코드

예외 처리 기본 예제

// Java 프로그래밍 - 예외 처리

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

class NotTenException extends RuntimeException {} //사용자가 만든 exception 을 만들어주고 싶으면 RuntimeException을 상속

public class Main {

    public static boolean checkTen(int ten) {
        if (ten != 10) {
            return false;
        }

        return true;
    }

    public static boolean checkTenWithException(int ten) {
//        if (ten != 10) {
//            throw new NotTenException(); //10이 아니면 사용자가 만든 exception발생
//                thorw new NotTenException 하면 아래와 같은 exception 이 발생한다. (RuntimeException 상속)
//                Exception in thread "main" NotTenException
//                at Main.checkTenWithException(Main.java:21)
//                at Main.main(Main.java:84)
//        }

        try {
            if (ten != 10) {
                throw new NotTenException(); //10이 아니면 사용자가 만든 exception발생
            }
        } catch (NotTenException e) { //익셉션 처리
            System.out.println("e = " + e);
            return false;
        }

        return true;
    }

    //함수 옆 throws Exception
    //예외가 발생하면 아래 함수에서 호출하는 것이 아닌 함수를 호출한 곳에서 처리하도록 전가시킨다.
    public static boolean checkTenWithThrows(int ten) throws NotTenException {
        if (ten != 10) {
            throw new NotTenException();
        }

        return true;
    }

    public static void main(String[] args) throws IOException {

//      1. 예외
//      1-1. 0으로 나누기
        System.out.println("== 0으로 나누기 ==");
//      int a = 5 / 0;

        int a = 0;
        try {
            a = 5 / 0; //예외가 발생할 코드를 적어줌
        } catch (ArithmeticException e) {
            System.out.println("0으로 나누기 예외 발생");
            System.out.println("e = " + e);
        } finally {
            System.out.println("1-1 연습 종료");
        }

//      1-2. 배열 인덱스 초과
        System.out.println("== 배열 인덱스 초과 ==");
        int[] b = new int[4];
//        b[4] = 1;

        try {
            b[4] = 1;
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("인덱스 초과!");
            System.out.println("e = " + e); //어떤 익셉션이 발생했는지 출력
        }
        
//      1-3. 없는 파일 열기
        System.out.println("== 없는 파일 열기 ==");
//        BufferedReader br = new BufferedReader(new FileReader("abc.txt"));


//      2. throw, throws
        System.out.println("== checkTen ==");
        boolean checkResult = Main.checkTen(10); //Main클래스의 checkTen static함수
        System.out.println("checkResult = " + checkResult);

        System.out.println("== checkTenWithException ==");
        checkResult = checkTenWithException(5);
        System.out.println("checkResult = " + checkResult);

        System.out.println("== checkTenWithThrows ==");
        try {
            checkResult = checkTenWithThrows(5);
        } catch (NotTenException e) {
            System.out.println("e = " + e);
        }
        System.out.println("checkResult = " + checkResult);

    }

}
Comments