본문 바로가기
자바

예외

by 이상한나라의개발자 2023. 12. 11.

자바에서 예외는 크게 두가지 유형으로 구분 됩니다. CheckedException, UnCheckedException 입니다.

 

이 두가지 차이점은 CheckedException 의 경우 컴파일 할 때 예외에 대한 처리를 강제하고, UnCheckedException은 예외 처리를 강제하지 않습니다. RuntimeException 을 제외한 모든 예외는 CheckedException 입니다.

 

1. CheckedExcpetion ( Exception )

 

CheckedException은 주로 외부 시스템과의 상호작용 중 발생할 수 있는 예외 상황에 사용됩니다. 예를 들어, 파일 입출력, 데이터베이스 연결 등에서 발생할 수 있는 예외 들입니다.

IOException, SQLException 

 

아래는 CheckedException 샘플 입니다.  처리되는 Client 클래스 에서 throws 를 발생 시키며 main 메서드 에서도 해당 throw를 처리 해야 합니다. 이처럼 예외 처리를 강제합니다.

만약 throws CheckedException 키워드를 삭제한다면 에러가 발생합니다 ( 이유는 예외를 강제하니까요 )

 

public class CheckedException extends Exception {

}

public class Client {
    public void throwCheckedException() throws CheckedException
    {
        throw new CheckedException();
    }

    public void tryCatchCheckedException() {
        try {
            throwCheckedException();
        } catch (CheckedException e) {
            e.printStackTrace();
        }
    }
}


public class CheckedExceptionMain {
    public static void main(String[] args) {
        Client client = new Client();
        try {
            client.throwCheckedException();
        } catch (CheckedException e) {
            // 예외에 대한 적절한 처리
        }

        client.tryCatchCheckedException();
    }
}

 

 

2. UnCheckedException ( RuntimeException )

 

UnCheckedException은 주로 프로그램의 오류로 인해 발생합니다. 예를들어, null 참조에 대한 접근 배열의 범위를 벗어난 인덱스 접근 등입니다. UnCheckedException은 명시적으로 처리하지 않아도 컴파일 에러가 발생하지 않습니다. throw로 메소드 밖으로 던져 버립니다.

 

NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

 

public class UnCheckedException extends RuntimeException {
}


public class Client2 {
    public void throwUnCheckedException() {
        throw new UnCheckedException();
    }
    public void tryCatchCheckedException() {
        try {
            throwUnCheckedException();
        } catch (UnCheckedException e) {
            e.printStackTrace();
        }
    }
}


public class UnCheckedExceptionMain {

    public static void main(String[] args) {
        Client2 client1 = new Client2();
        client1.throwUnCheckedException();
    }
}

 

 

그럼 우린 어떤 예외를 사용해야 할까요? 예외가 발생하면 적절하게 처리하는게 맞아보입니다. 하지만, 우리가 부딪히는 대부분의 예외는 로직에서 해결할 수 없습니다. 그러므로 예외를 강제하지 않는 UnCheckedException을 사용해야 합니다.(try-catch 블럭 사용가능)  아래와 같이 파일을 찾을 수 없을 경우는 "파일을 찾을 수 없습니다. 파일 이름을 다시 입력해 주세요" 라는 메시지를 보낼겁니다.

 

 

 

예시

 

만약, CheckedException을 사용한다면 무의미한 thorw가 반복되겠죠

 

A -> B -> C 

A <- B <- C  이런식으로 말이죠.

 

'자바' 카테고리의 다른 글

Java Optional  (0) 2023.12.12
Object Class  (1) 2023.12.11
캡슐화  (0) 2023.12.11
추상클래스와 인터페이스  (0) 2023.12.11
상속과 다형성 기본  (0) 2023.12.11