활동/독서

[Do it! 점프 투 자바] 07.자바 심화학습 (예외와 에러 차이 / throw와 throws 차이 / finally)

ByeongJun 2023. 9. 13. 17:56
반응형

* 본 게시물은 이지스퍼블리싱 [Do it! 점프 투 자바] 서평단 미션 수행 및 학습 목적으로 작성하였습니다.
 

  모든 내용, 디자인, 이미지, 편집 구성의 저작권은 이지스퍼블리싱(주)와 지은이에게 있으며

  학습 목적으로 내용을 재구성하여 작성했음을 밝힙니다. 문제시 삭제하도록 하겠습니다.


 

[Do it! 점프 투 자바] 07.자바 심화학습 (Try문-Catch문을 이용한 예외 처리와 ArithmeticException / Exception

* 본 게시물은 이지스퍼블리싱 [Do it! 점프 투 자바] 서평단 미션 수행 및 학습 목적으로 작성하였습니다. 모든 내용, 디자인, 이미지, 편집 구성의 저작권은 이지스퍼블리싱(주)와 지은이에게 있

3mmmeee.tistory.com

 

 

 

 

 

 

예외와 에러는 모두 예외적인 상황을 다루기 위한 개념이지만, 차이점이 있다.
 
 에러 (Error) 

 예외 (Exception) 
발생 원인 프로그램이 실행 중에 예측할 수 없는 치명적인 상황에서 발생한다. 프로그래머의 통제를 벗어난 것으로 대부분 JVM (Java Virtual Machin) 또는 하드웨어 문제와 관련이 있다. 예를 들어 OutOfMemoryError (메모리 부족) 같은 상황 프로그램이 실행 중에 예측 가능한 조건 또는 오류 상황에서 발생한다. 예를 들어 사용자가 잘못 입력한 경우나 파일을 찾을 수 없는 경우
처리 방식 일반적으로 프로그램에서 복구할 수 없는 치명적인 문제를 나타낸다. 따라서 에러가 발생하면 프로그램이 중단될 수 있다. 프로그램 자체에서 에러를 복구하려고 시도하는 것은 일반적으로 권장되진 않는다. 프로그램에서 예외 메커니즘을 사용해 처리할 수 있다. 예외 처리를 통해 예외를 잡아서 적절히 처리하거나 상위 호출자로 전파 가능하다.
종 류 시스템 에러는 주로 운영체제 수준에서 발생하며, 가상 머신 에러는 주로 JVM에서 발생한다. Checked 예외는 반드시 예외 처리 코드를 작성해야 하므로 컴파일러가 강제한다.Unchecked 예외는 예외 처리 코드를 작성하지 않아도 되는 예외로 런타임 시 발생한다.자세한 건[이전 글] 참고
요 약 일반적으로 프로그램에서 처리할 수 없는 치명적인 문제 (대부분 시스템이나 환경의 문제로 간주되어 일반적으로 개발자가 직접 처리하지 않음) 프로그램 코드에서 처리 가능하고 복구 가능한 상황 (예외에 대한 대비책 마련이 중요)

 

 

 

 

 


throw와 throws의 차이점 

 

throw

public void someMethod() {
    if (/* some condition */) {
        throw new CustomException("This is a custom exception.");
    }
}
  • 메서드 내에서 예외를 발생시키는데 사용한다.
  • throw 키워드 다음에는 예외 객체를 지정하고 해당 예외 객체를 발생시킨다.

 

 

 

throws

public void someMethod() throws CustomException {
    if (/* some condition */) {
        throw new CustomException("This is a custom exception.");
    }
}
  • 메서드 선언부에서 사용되며, 해당 메서드가 어떤 예외를 던질 수 있는지 명시한다. 
  • throws 키워드 뒤에는 해당 메서드가 던질 수 있는 예외 클래스들을 열거한다.
  • 메서드 내에서 예외가 발생할 수 있지만 직접 예외를 처리하지 않고,
    이를 호출한 코드에게 예외 처리를 위임할 때 사용한다. 

 

 throws CustomerException은 

 someMethod()CustomerException을 던질수 있다는 것을 선언 

 

 

 

 요약 

throw는 예외를 명시적으로 발생시키는데 사용한다.

throws는 메서드가 어떤 예외를 던질 수 있는지 선언하는데 사용한다.

 

 

 

 

 


finally

프로그램 수행 중 예외가 발생하면 프로그램이 중지되거나 예외 처리에 의해 catch구문이 실행된다. 

하지만 어떤 예외가 발생해도 반드시 실행되어야 하는 부분이 있을 때 finally를 사용한다.

 

public class Sample {
    public void shouldBeRun() {
        System.out.println("ok thanks");
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c;
        try {
            c = 4 / 0;
        } catch (ArithmeticException e) {
            c = -1;
        } finally {
            sample.shouldBeRun();  // 예외에 상관없이 무조건 수행
        }
    }
}
반응형