본문 바로가기
Java

예외처리

by BottleCoffin 2022. 5. 30.
    1. 예외처리란(Exception, Error Handling)
    • 코드를 완벽하게 짰다고 해서 항상 프로그램이 성공적으로 도는 것은 아닙니다. 다양한 예외 상황이 발생할 수 있다 이것에 대응하기 위해서 예외 처리 코드가 필요하다.
    • 예외처리의 목적
      1. 예외의 발생으로 인한 실행 중인 프로그램의 비정상 종료를 막기 위해서
      2. 개발자에게 알려서 코드를 보완할 수 있도록 하게 위해서
    • 자바에서는 상속을 이용해서 모든 예외를 표현/ 모든 예외 클래스는 Throwable의 자손 클래스
    • Throwable 에는 크게 두 종류의 자식 클래스가 있다.
      • Error 는 프로그램이 종료되어야 하는 심각한 문제를 표현합니다. 대부분 컴퓨터나 JVM이 시스템적으로 동작할 수 없는 상황을 표현합니다.  
      • 더보기
        ex) Java는 JVM내의 Heap이라는 메모리 공간을 운영체제로부터 할당 받아 사용하는데 할당 받을 수 있는 최대 메모리 이상을 사용하면, JVM이 다운될 수 밖에 없다. 이 경우 OutOfMemoryError가 나면서 프로그램이 종료된다. 이러한 자바의 대표적인 에러 상황으로 줄여서 OOM이라고도 한다.
      •  Exception 은 프로그램이 종료되지는 않지만 예외나 문제상황을 표현하기 위해 사용
    • 자바에 미리 정의 되어있는 예외 클래스 들이 있다. 기본적으로 이미 있는 것을 사용하되, 필요한 것으로 표현할 수 없거나 구체적인 목적을 가진 예외를 정의하고 싶다면, Throwable 또는 그 하위에 있는 예외 클래스를 상속받아서 자신만의 예외 클래스를 정의할 수 있다
      (아래 사진은 자바의 기본 예외 클래스들 중 대표적인 것들의 상속 관계도)

 

 

  • 표현하려는 예외 상황은 대부분 Exception 종류일 것입니다.
  • 실행도중 발생하는 Exception은 RuntimeException을 상속받아서 정의.
  • 파일을 읽고 쓰거나, 원격에 있는 저장소로부터 데이터를 읽고 쓸 때 나는 에러를 표현하려면 IOException을 상속받아서 정의.

자바의 예외 표현

try-catch(-finally)형식(finally는 필수 아님)

 

```java
try {
    // 예외가 발생할 가능성이 있는 코드를 구현.
} catch (FileNotFoundException e) {
    // FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현.
} catch (IOException e) {
    // FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현.
} finally {
    // 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현.
}
```

좁은 범위의 Exception을 앞에다가 선언 

 

package org.example;

public class Main {
    public static void main(String[] args) {
        int number = 10;
        int result;

        for(int i=10; i>=0; i--){
            try {
                result = number/i;
                System.out.println(result);
            } catch (Exception e) {
                //모든 exception은 getMessage를 가진다.(예외에 이유를 설명)
                System.out.println("Excepction 발생 "+e.getMessage());
            } finally {
                System.out.println("finally입니다.");
            }
        }
    }
}
결과
1
finally입니다.
1
finally입니다.
1
finally입니다.
1
finally입니다.
1
finally입니다.
2
finally입니다.
2
finally입니다.
3
finally입니다.
5
finally입니다.
10
finally입니다.
Excepction 발생 / by zero
finally입니다.

 

'Java' 카테고리의 다른 글

String literal과 new  (0) 2022.06.09
객체지향 프로그래밍, JVM  (0) 2022.05.22
Java 파일 기본구조  (0) 2022.05.17
Package  (0) 2022.05.17
접근 제어자  (0) 2022.05.17

댓글