본문 바로가기
Language/Java

throws 키워드를 사용한 예외 처리의 위임

by 태윤2 2020. 7. 7.

예외가 발생한 곳에서 try ~ catch 블록으로 예외를 직접 처리할 수 있지만,

자신이 직접 처리하지 않고, 메서드를 호출한 곳으로 예외를 위임(떠넘김) 할 때

throws 키워드를 사용한다.

에외 처리를 위임받은 메서드는 다시 예외 처리에 대한 책임이 발생하며,

자신이 직접 처리하거나 또 다른 곳으로 위임할 수 있음.

최종적으로 마지막 단계의 메서드에서는 try ~ catch 블록을 통해 처리해야함

(ex, 자바에서는 main() 메서드)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void 대리1() throws ArithmeticException {
    System.out.println(3 / 1); // 예외 발생하는 코드
}
 
public static void 대리2() throws ClassNotFoundException {
    Class.forName("asdad");
}
 
public static void 과장() throws ArithmeticException, ClassNotFounException {
    대리1();
    대리2();
}
 
public static void 부장() throws Exception {
    과장();
}
 
public static void main(String[] args) {
    try {
        부장();
    } catch (Exception e) {
        System.out.println("사장이 모든 예외를 처리");
    }
}
cs

 

 

사용자 예외 발생(throw)

자바 기준으로 예외가 아닌 상황에서도 개발자의 의도대로 예외를 발생시키는 것

throw 키워드를 사용하여 발생시킬 예외 클래스의 객체를 지정(강제 예외 발생)

일반적으로 예외객체는 한 번 발생시키면 재사용할 일이 없으므로

별도의 변수 없이 바로 임시 객체 형태로 사용하는 경우가 많음

(throw 변수명 또는 new 예외클래스명())

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class InvalidScoreException exteds Exception {
 
    // 생성자를 정의하여 예외 메세지를 슈퍼클래스의 생성자에 전달
    public InvalidScoreException(String message) { 
        super(message);
    }
 
}
 
public static void exceptionMethod(int score) throws Exception {
     if (score < 0 || score > 100) {
        throw new InvalidScoreException("점수입력오류^^");
    } else {
 
    }
}
 
public static void main(String[] args) {
    try {
        exceptionmethod(105);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
cs

 

 

 

'Language > Java' 카테고리의 다른 글

Thread(쓰레드)  (0) 2020.07.07
예외(Exception)  (0) 2020.07.06
정규표현식  (0) 2020.07.06
StringTokenizer~format  (0) 2020.07.06
시간 관련 클래스 및 패키지  (0) 2020.06.25