예외처리 (Exception Handling)

2023. 11. 28. 11:42
728x90

- 예외 : 일반적인 코드수행 중 발생한 예상치 못한 상황

- 예외처리 (Exception Handling) : 예외가 발생했을 경우 해당 상황을 수습하고 정상적인 흐름으로 되돌리는 기법.

 

1) try-catch-finally

- try :  예외 발생 가능한 곳

- catch : 내부에서 발생할 수 있는 예외 (여러 개의 catch문도 가능)

> 두가지 예외 블럭이 동시에 만족되는 상황에는 먼저오는 블럭이 먼저 실행. 

> 서로 다른 예외지만 동일하게 처리하고 싶을 때는 |로 하나의 catch문 안에 넣을 수 있음. 

- catch {} : 예외 발생시 실행되는 코드. (e.getMessage() 활용하여 예외 발생 코드가 작성한 메시지 확인 가능)

- finally : 예외가 발생하든 안하든 실행하고 싶은 코드가 별도로 있다면 추가.

public class ExceptionHandling {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        System.out.println(divide(a, b));
        System.out.println("Bye!");
    }

    public static int divide(int a, int b) {
        return a / b;          // b==0이기 때문에 ArithmeticException 발생.
    }
}

// try-catch문 사용
public static void main(String[] args) {
    int a = 10;
    int b = 0;
    try {
        System.out.println(divide(a, b));
        System.out.println("Bye!");
    } catch (ArithmeticException | NullPointerException e) {
        System.out.println("Sorry, can't do that!"+e.getMessage());
    } finally {
    	System.out.println("Bye!");
    }
}

 

2) throw 

: 상황에 따라 직접 예외를 발생시키고 싶을 수 있다.

만약 의도하지 않은 상황에 대해서 직접 예외를 발생시키고 싶다면 throw ~ Exception 으로 새로운 예외 객체 생성.

+ 생성자에 메시지도 넣을 수 있음. 

public static double divide(int a, int b) {
	if (b==0) throw new ArithmeticException("Division by Zero");
    return (double) a/b;
}

 

3) Throwable & throws

- 예외의 가장 조상은 Throwable

- Error : JVM 단위에서 발생하는 개발자가 처리 불가한 에러. 더이상 실행이 불가능할 정도의 심각한 상황에 대한 예외.

- Exception : 기대하지 않은 상황에 대한 예외 > 처리가 필요함.

 

   * RuntimeException : 일반적인 프로그래밍 오류로 인해 코드 실행중 발생하는 예외. 코드 작성을 꼼꼼히 한다면 방지가 가능하다.

(unchecked exception 컴파일러가 직접 잡아주지 않음)

  • NullPointerException : 잘못된 null 사용 (null의 메서드 호출 등)
  • ArrayIndexOutOfBoundsException : 어떤 배열의 범위를 벗어나는 index 사용
  • ArithmeticException : 0으로 나누는 등 수학적 오류가 있는 계산을 시도할 때 발

   * Checked Exception : RuntimeException을 상속받지 않는 모든 예외. 프로그래밍 오류로 발생하는 예외가 아님.

(컴파일 단계에서 예외 발생을 인지하고 개발자에게 예외 사전처리를 강제함)

  • FileNotFoundException: 파일을 사용하려 하는데 파일이 존재하지 않을 때 발생
  • SQLException : 데이터베이스 사용 중 문제가 발생.

    => 사전에 예외처리를 하거나, 호출하는 측에서 알아서 처리하도록 throws 활용.

// 사전처리 try-catch 활용
public static void readFileContents(String filename) {
	File file = new File(filename);
    try {
    	Scanner scanner = new Scanner(file);
    } catch (FileNotFoundException e) {
    	System.out.println("File Not Found!");
    }
}

// throws 활용
public static void readFileContents(String filename)
        throws FileNotFoundException, AccessDeniedException {
    File file = new File(filename);
    Scanner scanner = new Scanner(file);
}
728x90

'Programming > Java' 카테고리의 다른 글

Stream API  (1) 2023.11.30
제너릭 (Generics)  (1) 2023.11.29
객체지향 프로그래밍  (1) 2023.11.28
클래스 (Class)  (1) 2023.11.28
메서드 (Methods)  (1) 2023.11.23

BELATED ARTICLES

more