java

Java : Throw, Throws (예외 관련 구문)

ThatHomr 2023. 3. 20. 15:44

import java.io.IOException;

public class File01_throw_throws {
    // 예외 관련 구문
    //  - try-catch : 예외 처리
    //  - throws    : 예외 전달
    //  - throw     : 예외 발생
   
    // 예외 전달
    //  - 메서드에서 예외가 발생했을 때 호출한 메서드한테
    //    예외를 전달하여 예외 처리를 넘긴다.
    //  - 예외 전달하는 방법
    //      1. 우선 메서드가 어떤 예외를 전달할 것인지 정의
    //      2. 메서드의 선언부 마지막에 throws 키워드를 작성
    //      3. throws 키워드 다음 전달하고자하는 예외를 작성
    //  - 장점
    //      1. 메서드 선언부에 처리할 예외를 선언함으로써
    //         메서드에서 발생 가능한 예외를 알 수 있다.
    //          → 개발자가 처리해야할 예외를 알 수 있다.
    //      2. 보통 RuntimeException 을 제외한 예외를 선언하면
    //         반드시 예외 처리를 하도록 강제성을 띄운다.
    //      3. 각 메서드에서 동일하게 처리할 예외 처리를
    //         한 메서드 내에서 한 번에 처리할 수 있다.
   
    public static void methodA() throws IOException, ArithmeticException  {
        System.out.println(10 / 1);
    }
    public static void methodB() throws IOException, ArithmeticException  {
        System.out.println(10 % 0);
    }
   
    // 예외 발생
    //  - 개발자의 의도하에 강제로 예외를 발생시킨다.
    //  - 프로그램 상의 예외가 아닌 사용자가 의도치 않은 행동을 하거나
    //    예외와 같은 처리를 하고자 할 때 강제로 예외를 발생시킨다.
    //  - 나누기를 할 때 0 은 나눌 수 없는 수이며,
    //    음수 일 때 도 0 일 때랑 동일하게 처리하고 싶다!.
   
    public static void methodC() throws IOException {
        int n = -10;
       
        // 음수인 경우 ArithmeticException 을 강제로 발생
        if (n < 0)
            // 생성자를 통해 예외 객체에 저장할 메시지를 저장할 수 있다.
            throw new ArithmeticException("/ by " + n);
           
        System.out.println(10 % n);
    }
   
   
    public static void main(String[] args) {
        // methodA() 메서드에서 전달한 예외를 예외 처리해야한다.
        // → 특정 예외는 반드시 예외 처리를 해야한다.
        try {
           
            // methodA();
            // methodB();
            methodC();
        } catch (ArithmeticException e) {
           
            System.out.println(" 0 으로 나눌 수 없습니다 : " + e.getMessage());
        } catch (IOException e) {
           
            e.printStackTrace();
        }
       
       
       
    }
}