ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | 예외 처리 throws & throw
    JAVA/JAVA 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 예약어를 사용하면 예외를 테스트해 볼 수 있기 때문에 발생 가능한 예외를 사전에 점검해 볼 수 있고,

    프로그램이 원하지 않는 방향으로 흘러가는 경우에 임의로 예외를 발생시키도록 할 수도 있겠습니다.

    댓글

Designed by Tistory.