활동/독서

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

ByeongJun 2023. 9. 13. 11:44
반응형

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

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

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


 

07-04 예외 처리

프로그램을 만들다 보면 수없이 많은 예외 상황이 발생한다. 물론 예외가 발생하는 것은 프로그램이 오동작을 하지 않게 하기 위한 자바의 배려이다. 하지만 이러한 예외 상황을 무시하…

wikidocs.net

 

 

 

 

 

프로그램을 만들다 보면 무조건 예외 상황이 발생할 것이다. 

그런 상황이 없으면 더욱 좋겠지만 현실적으로 그럴 수 없다. 

 

예외를 처리하고 안전한 프로그래밍을 구사하기 위해 

try ~ catch, throws 구문을 이용해보도록 한다. 

 

 

 

try {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ...
} catch(예외1) {
    <수행할 문장 A>;
    ...
} catch(예외2) {
    <수행할 문장 a>;
    ...
}

try문 안의 수행할 문장 중에서 예외가 발생하지 않으면 

catch문에 속한 문장들은 수행되지 않는다. 

 

public class Sample {
    public static void main(String[] args){
        int c = 4 / 0;
    }
}

 

4를 0으로 나누려고 하면 계산 문제가 발생했다는 

ArithmeticException 예외가 발생할 것이다. 

 

그럴 때 예외 처리를 하려면 다음과 같이 할 수 있다.

 

public class Sample {
    public static void main(String[] args) {
        int c;
        try {
            c = 4 / 0;
        } catch(ArithmeticException e) {
            c = -1;  // 예외가 발생하여 이 문장이 수행된다.
            System.out.println(c + " : " + "예외가 발생했습니다");
        }
    }
}

 

ArithmeticException 예외가 발생하면 c에 -1을 대입하여

해당 메시지를 출력하는 코드를 통해 '-1 : 예외가 발생했습니다' 문구가 콘솔에 출력된다.

 

 

 

 

 ArithmeticException 은 자바에서 제공하는 예외 클래스 중 하나로, 

산술 연산 중 예외적인 상황이 발생했을 때 던져지는 예외이다. 

 

- 정수를 0으로 나눌 때

- 부동소수점 연산 중 무한대(Infinity)

- 정의할 수 없는 값(NaN)이 발생할 때 

 

이런 상황에서 예외가 발생하는데 처리하기 위해선

'try-catch' 블록을 사용해 예외 처리 코드를 작성해야 한다.

 

 

 


Exception

Checked Exception(확인된 예외) 라고도 하며, 예층 가능한 경우에 사용한다. 

  • 컴파일러가 확인하는 예외이며 반드시 예외 처리(try-catch 블록 또는 throw)가 필요
  • 주로 I/O 작업, 네트워킹, 데이터베이스 등과 관련된 예외가 여기 해당
  • 몇 가지 예외의 예시
    • IOException : 파일 또는 네트워크 연결과 관련된 문제가 발생한 경우
    • SQLException : 데이터베이스 작업 중 문제가 발생한 경우
    • ClassNotFoundException : 클래스가 존재하지 않는 경우

 

 

 

RuntimeException

Unchecked Exception(미확인 예외) 라고도 하며, 발생할 수도 안 할수도 있는 경우에 사용한다.

  • 실행 시 발생하는 예외이며 예외 처리가 필수는 아니다.
  • 주로 프로그래머의 오류, 논리 오류 등에 의해 발생
  • 몇 가지 예외의 예시
    • NullPointerException : null 객체에 접근하는 경우
    • ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 인덱스에 접근하는 경우
    • ArithmeticException : 0으로 나누는 등의 산술 연산 오류

 

 

RuntimeException을 상속하던 것을 Exception을 상속하도록 변경하면 

Unchecked Exception에서 예측 가능한 Checked Exception으로 변경되어

예외 처리를 컴파일러가 강제하기 때문에 컴파일 오류가 발생한다.

반응형