티스토리 뷰

🎮 자바의 Exception

자바는 Throwable이라는 모든 예외와 오류의 최상위 클래스를 가진다.

그리고 Error와 Exception이 각각 Throwable을 상속하는 구조이다.

Exception 클래스는 예외의 슈퍼 클래스로 Checked Exception과 Runtime Exception 으로 나뉜다. Unchecked Exception이 Runtime Exception의 하위 클래스이다. (Error는 Exceptoin에 속하지 않는다.)

 

Checked Exception

컴파일 타임에 처리해야 하는 예외로 개발자가 강제적으로 처리해야 하는 Exception

 

중요한 것은 Checked Exception은 예외 처리가 강제된다는 것이다.

public void throwsCheckedException() throws CheckedException {
    throw new CheckedException();
}

public void tryCatchCheckedExceptionMethod() {
    try {
        throw new CheckedException();
    } catch (CheckedException e) {
        e.printStackTrace();
    }
}

 

이렇게 throws를 통해 메소드 호출자에게 예외 처리를 넘기거나, try - catch 문으로 예외를 처리해주어야 한다.

대표적인 Checked Exception으로는 IOException, SQLException, ClassNotFoundException 등이 있다.

 

Unchecked Exception

런타임 시점에 발생하는 예외로 예외 처리가 강제되지 않는 Exception

 

중요한 것은 Unchecked Exception은 예외 처리가 강제되지 않는다는 것이다.

Unchecked Exception은 Runtime Exception을 상속받는다.

public void throwsUncheckedException() {
    throw new UncheckedException();
}

 

이렇게 throws를 통해서 예외를 던지지 않아도 컴파일 오류가 나지 않는다.

이 때, Unchecked Exception은 예외 처리가 강제되지 않는 것이지 예외 처리를 할 수 없는 것은 아니다.

public void tryCatchUnCheckedExceptionMethod() {
    try {
        throw new CheckedException();
    } catch (CheckedException e) {
        e.printStackTrace();
    }
}

 

try - catch문으로 예외 처리를 해줄 수도 있다.

대표적인 Unchecked Exception으로는 NullPointerException, ArrayIndexOutOfBoundsException, ClassCastExcpetion 등이 있다.

 

둘 중 어떤 예외를 사용하는 것이 좋을까?

Unchecked Exception을 쓰는 것이 낫다. Unchecked Exception도 예외 처리가 가능하기 때문이다.

만약 Checked Exception을 사용하고 try - catch문으로 다시 RuntimeException을 던질거면 애초에 Unchecked Exception으로 던져주는 것이 좋기 때문이다.

또한 Checked Exception을 사용해서 throws로 예외 처리를 던지면 해당 메소드를 호출한 메소드에서 다시 throws로 예외 처리를 넘기거나 try - catch문으로 예외를 처리해야 한다. 무의미한 throws가 많아질 수 있다.

 

참고 자료

강의 : 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴(강의자: Foo)

 

'java' 카테고리의 다른 글

얕은 복사와 깊은 복사  (0) 2024.11.27
일급 컬렉션  (0) 2024.11.23
인터페이스 vs 추상클래스  (0) 2024.05.16
상속과 메모리 구조  (0) 2023.12.21
자바 main 메소드는 왜 static일까?  (0) 2023.12.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함