정구리의 우주정복

[Spring] Exception, RuntimeException 상속에 대해 (Checked Exception, Unchecked Exception 이란 ?) 본문

JAVA/STUDY

[Spring] Exception, RuntimeException 상속에 대해 (Checked Exception, Unchecked Exception 이란 ?)

Jungry_ 2024. 6. 10. 22:52
반응형

예외처리를 위해 Exception 을 정의하던 중 왜 RuntimeException 을 상속받는지 궁금해져버렸다 !

 

자바는 예외를 크게 두종류인

Checked Exception, Unchecked Exception 

으로 분류할 수 있다

 

Checked Exception 


  • 컴파일러가 예외 처리 코드를 작성하도록 강제하는 예외 
  • 파일 입출력, 네트워크 통신, DB 접근 등 외부 자원과 상호작용할 때 발생할 수 있는 예외
  • Exception 을 상속
  • 컴파일 시점에 반드시 처리되어야 한다
  • throws 절을 사용해서 메서드 선언에 예외를 명시해줘야 한다
  • 호출할 때 try-catch 블록으로 처리해야한다
public class CheckedException extends Exception {
    public CheckedException(String message) {
        super(message);
    }
}

public void testMethod() throws CheckedException {
    
}

public static void main(String[] args) {
	try {
    	testMethod();
    } catch (CheckedException e) {
    	e.printStackTrace();
    }
}

 

메소드에서 throws를 사용해서 예외를 명시해주기 ! 그리고 호출시에 try-catch 블록을 사용해서 처리해야한다

 

Unchecked Exception


  • 컴파일러가 예외처리 코드를 작성하도록 강제하지 않음
  • 주로 프로그래밍 오류를 처리할때 사용함 (null point, index out of range 등등 )
  • RuntimeException 클래스를 상속받음
  • 강제되지 않기 때문에 throws 절을 선언하지 않아도 됨
  • try-catch 블록으로 예외를 처리하지 않아도 컴파일 오류가 발생하지 않음
public class RecommendNotFoundException extends RuntimeException{
    public RecommendNotFoundException(String message) {
        super(message);
    }
}

public RecommendResponse getRecommend(String id) {
    Recommend recommend = recommendRepository.findById(id)
            .orElseThrow(() -> new RecommendNotFoundException("ERROR: Cannot found id"));
    return RecommendMapper.toDto(recommend);
}

 

나는 이런 식으로 사용해봤다

Checked 와 다르게 throw 를 사용하지 않고 try-catch 로 처리하지 않아도 된다

 

  Checked Exception Unchecked Exception
처리 강제 여부 컴파일러가 예외처리를 강제함
메서드에 throws 를 사용, try-catch 블록으로 처리해야함
컴파일러가 예외처리를 강제하지 않음 , 선택적
발생 시점 주로 컴파일 할때 예외 발생 가능성을 확인 주로 런타임에 발생
상속 계층  Exception 상속(단 RuntimeException 의 하위 클래스를 제외) RuntimeException 상속

 

정말 신기하다 !

반응형
Comments