반응형
* 본 게시물은 이지스퍼블리싱 [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(); // 예외에 상관없이 무조건 수행
}
}
}
반응형