throw와 throws

조용근·2024년 2월 5일

자바 정리

목록 보기
10/21

throw

  • throw 키워드는 메서드 내에서 사용되며, 개발자가 직접 예외를 발생시키고자 할 때 사용된다. 즉, 특정 조건에서 예외를 강제로 발생시키기 위해 사용된다.

  • throw는 단일 객체를 인자로 받으며, 이 예외 객체는 new 키워드를 사용하여 생성된다.

  • 예외가 throw되면, 이후의 코드는 실행되지 않고, 즉시 현재 메서드를 종료하며, 해당 예외를 메서드 호출 스택으로 전파한다.

public void checkAge(int age) {
    if (age < 18) {
        throw new IllegalArgumentException("Access denied - You must be at least 18 years old.");
    } else {
        System.out.println("Access granted - You are old enough!");
    }
}
package javaplus.exception;

public class ThrowEx {
    public static void main(String[] args) {
        ThrowEx ex = new ThrowEx();
        ex.throwException(11);

    }
    public void throwException(int number){
        try{
            if(number>10){
                throw new Exception("숫자가 10보다 큽니다.");
            }
            System.out.println("입력 숫자: " + number);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
  • try 블록 내에서 throw 라고 명시한 후 개발자가 예외 클래스의 객체를 생성한다.
  • 그러면 throw한 문장 이후에 있는 모든 try 블록 내의 문장들은 수행되지 않고, catch 블록으로 이동한다.

만약, 해당하는 예외가 없다면, 예외가 발생한 메서드를 호출한 메서드로 던지는데, 이 때 사용하는 것이 throws다.

throws

  • throws 키워드는 메서드 선언부에서 사용되며, 해당 메서드가 실행 도중 발생할 수 있는 예외를 명시적으로 선언하는 데 사용된다.
    이는 메서드를 사용하는 측에게 해당 메서드를 호출할 때 처리해야 할 예외가 있음을 알린다.

  • throws는 하나 이상의 예외 타입을 지정할 수 있으며, 에외 타입은 콤마로 구분한다.
    // implements 처럼 ','로 구분해서 예외 클래스 이름을 적어주면 된다.

  • 메서드가 throws로 선언된 예외를 발생시키면, 이 예외는 해당 메서드를 호출한 곳으로 전파되며, 호출자는 이 예외를 처리하거나 다시 전파해야 한다.
public void readFile(String fileName) throws FileNotFoundException {
    File file = new File(fileName);
    FileInputStream stream = new FileInputStream(file);
    // 파일 처리 로직...
}
 public void throwsException(int number) throws Exception{
        if(number> 10){
            throw new Exception("숫자가 10보다 큽니다.");
        }
        System.out.println("입력 숫자: " + number);
    }

이렇게 메서드를 선언하면, 호출한 메서드로 예외 처리를 위임한 것이기 때문에, 문제가 되지 않는다. 하지만 이럴 경우 Exception은 처리되지 않고 프로그램이 비정상 종료될 수 있다. 따라서, main 메서드에서 try-catch블록으로 예외를 감싸줘야 한다. 수정 코드는 아래와 같다.

package javaplus.exception;

public class ThrowsEx {
    public static void main(String[] args) {
        ThrowsEx ex = new ThrowsEx();
        try {
            ex.throwsException(11);
        } catch (Exception e) {
            System.err.println("예외 발생: " + e.getMessage());
            e.printStackTrace();
        }
    }

    public void throwsException(int number) throws Exception {
        if (number > 10) {
            throw new Exception("숫자가 10보다 큽니다.");
        }
        System.out.println("입력 숫자: " + number);
    }
}

throwsException 메서드 호출을 try 블록 내에 포함시키고, catch 블록에서 Exception 처리한다. 이렇게 하면 예외가 발생해도 프로그램이 안전하게 종료될 수 있다.

요약

  • throw는 메서드 내에서 예외를 발생시키는 데 사용되며, 예외 객체를 생성하여 던진다.
  • throws는 메서드 선언부에서 사용되며, 해당 메서드가 발생시킬 수 있는 에외 타입을 명시한다.
  • throw를 사용하면 예외가 발생하고, throws를 사용하면 해당 예외를 메서드가 호출될 때 처리할 수 있도록 알린다.
  • throws로 선언된 예외는 해당 메서드를 호출하는 코드에서 처리되어야 한다.
    (예를 들어, 'try-catch'문으로 처리한다.)

출처: https://velog.io/@jsj3282/%EC%9E%90%EB%B0%94%EC%9D%98-%EC%98%88%EC%99%B8%EC%9D%98-%EC%A2%85%EB%A5%98-3%EA%B0%80%EC%A7%80

profile
Today I Learn

0개의 댓글