JAVA/JAVA
Java | 예외 처리 throws & throw
pathas
2020. 2. 5. 17:45
throws
예외를 해당 메소드에서 처리하지 않고 미룬 후
메소드를 호출하여 사용하는 부분에서 예외를 처리하는 방법
형식
접근제어자 반환형 메소드명() throws 예외 처리 클래스명 {}
※ 복수의 예외 처리 클래스명 작성 가능
throw
사용자 정의 예외로 예외를 임의로 발생시켜서 프로그램을 테스트 할 수 있음
- 이미 존재하는 예외의 경우 throw를 사용하여 바로 예외를 발생시킬 수 있음
- 사용자 정의 예외의 경우 발생시키고자 하는 예외와 가장 유사한 예외 클래스를 상속
잘 모르겠다면 가장 상위 클래스인 Exception 클래스 상속
형식_사용자 정의 예외 클래스
class 사용자 정의 예외 클래스명 extends 예외 클래스명{
// 생성자
사용자 정의 예외 클래스명(String msg){
super(msg);
}
}
※ String msg: 에러 메세지를 인자로 받는 매개변수
상위 예외 클래스 생성자를 호출하고 예외 메세지를 인자로 전달받아서 예외 객체 생성
형식_예외 발생
throw new 예외 처리 클래스명("예외 메세지");
예제_throws & throw
package j200205;
import java.util.Scanner;
// 사용자 정의 예외, Exception 클래스 상속
class OverLength extends Exception {
// 생성자, 예외 메세지를 인자로 전달받아서 예외 객체 생성
OverLength(String message) {
super(message);
}
}
public class PrintString {
// Overlength 예외를 메소드 호출시 처리하도록 미룸
static void print() throws OverLength {
// 스캐너 객체 생성
Scanner sc = new Scanner(System.in);
// 문자열 입력
System.out.println("문자열을 입력해주세요.");
String str = sc.nextLine();
// 문자열의 길이가 5자 이상일 때 예외 발생
if (str.length() >= 5)
throw new OverLength("문자열은 5자 이상 입력할 수 없습니다.");
}
public static void main(String[] args) {
// 예외 처리
try {
PrintString et = new PrintString();
print();
// 예외 발생시 예외 정보 출력
} catch (Exception e) {
System.out.println(e);
}
/*
문자열을 입력해주세요.
안녕하세요??
j200205.OverLength: 문자열은 5자 이상 입력할 수 없습니다.
*/
}
}
예외 처리를 메소드 호출로 미루는 throws 예약어와 임의의 예외를 발생시키는 throw 예약어에 대해 알아보았습니다.
두 예약어가 굉장히 비슷하기 때문에 헷갈리지 않도록 해야 하겠습니다.
throws는 그렇게 권장되는 방법은 아니며 주로 try~catch문으로 예외를 처리한다고 합니다.
또한 throw 예약어를 사용하면 예외를 테스트해 볼 수 있기 때문에 발생 가능한 예외를 사전에 점검해 볼 수 있고,
프로그램이 원하지 않는 방향으로 흘러가는 경우에 임의로 예외를 발생시키도록 할 수도 있겠습니다.