Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[JAVA] 예외(Exception) 본문

개발공부/JAVA

[JAVA] 예외(Exception)

jnnjnn 2024. 3. 25. 18:06

예외와 예외 클래스

 

Java에서 예외 처리는 프로그램 실행 중에 발생할 수 있는 예외나 오류 상황을 적절히 처리하는 메커니즘이다.
모든 예외처리는 Throwable 클래스를 상속받는다.
Throwable을 상속 받는 클래스로는 Exception과 Error가 있다.

 

- Error : 프로그램 코드로는 복구할 수 없는, 개발자가 대처할 수 없는 오류를 말한다.  
- Exception : 프로그램 실행 중 발행할 수 있는 잘못된 사용 또는 코딩으로 인한 오류를 말한다.

 

예외가 발생하면 프로그램이 곧바로 종료되지만, 예외 처리를 하면 계속 실행 상태를 유지할 수 있다.

예외 클래스는 java.lang.Exception을 상속받아 만들어진다.

Exception을 상속받는 예외에는 다음 두 가지가 있다.

 

 - 일반 예외 (Exception) : 컴파일러가 예외 처리 코드 여부를 검사하는 예외를 말함
 컴파일러가 예외 처리를 검사하기 때문에 checked exception이라고 하며 예외 처리 코드를 반드시 포함해야 한다.

 - 실행 예외 (Runtime Exception) : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외를 말함
  컴파일러가 예외 처리를 검사하지 않기 때문에 unchecked exception이라고 하며 예외 처리 코드를 포함하지 않아도 된다.

 

 

예외 처리 코드

 

  • 프로그램 실행 중 예외가 발생하면 자바가상머신(JVM)은 Exception 클래스의 객체를 생성하여 프로그램으로 넘기게 된다.
  • 예외를 발생시킨 프로그램이 예외객체를 catch 하여 처리하게 된다
  • 예외처리를 하지 않으면 프로그램은 종료한다.

 

예외 처리 코드는 try - catch - finally 블록으로 구성된다.


try 블록에서 작성한 코드가 예외 없이 실행되면 catch 블록은 실행되지 않는다
try 블록에서 예외가 발생하면 catch 블록이 실행된다.
finally 블록은 예외와 상관 없이 무조건 실행된다

public class Main {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("결과: " + result);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        } finally {
            System.out.println("finally 블록 실행");
        }
    }

    public static int divide(int num1, int num2) {
        return num1 / num2;
    }
}
0으로 나눌 수 없습니다
finally 블록 실행

 

위 예제에서는 try 블록에서 ArithmeticException이 발생했기 때문에 catch 블록에서 예외를 처리했고 finally 블록은 예외 처리와 상관없이 항상 실행된다.

 

And

  • catch 블록은 여러 개로 작성할 수 있다.
  • catch 블록이 여러 개라 할지라도 하나의 예외는 하나의 catch 블록만 실행시킨다
  • 여러 예외 클래스들이 상속 관계에 있을 때는 상위 클래스 catch 블록을 가장 나중에 작성한다.
  • 두 개 이상의 예외를 하나의 catch 블록으로 예외 처리할 때는 기호 |로 연결한다.

 

예외 떠넘기기

  • 메소드 내부나 생성자에서 예외가 발생할 때 try-catch 블록으로 예외를 처리하지 않고 throws를 사용하여 메소드를 호출한 곳으로 예외를 떠넘길 수 있다.
  • throws는 메소드 선언부 끝에 작성한다
  • 떠넘길 예외 클래스가 여러개일 경우 쉼표로 구분한다
  • 예외를 떠넘긴 후 메소드를 호출한 곳에서 예외를 떠넘기거나 try-catch로 처리해야 한다.
  • main 메소드에서 예외를 떠넘길 경우 JVM이 최종적으로 예외 처리를 한다
리턴타입 메소드명(매개변수, ...) throws Exception {
}

 

사용자 정의 예외

개발자가 직접 Exception 클래스를 상속받는 예외 클래스를 정의하여 사용자 정의 예외를 만들 수 있다

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
    public CustomException() {}
}
try {
    throw new CustomException("사용자 정의 예외 발생");
} catch (CustomException e) {
    System.out.println(e.getMessage());
}

 

사용자 정의 예외를 만들 때 매개변수를 포함한 생성자를 만들게 되면 기본 생성자를 사용하지 못하니 기본 생성자도 함께 생성해준다.

'개발공부 > JAVA' 카테고리의 다른 글

[JAVA] I/O Stream  (1) 2024.03.27
[JAVA] 멀티 스레드  (0) 2024.03.26
[JAVA] 수정할 수 없는 컬렉션  (0) 2024.03.21
[JAVA] Stream API  (0) 2024.03.21
[JAVA] Stack, Queue  (0) 2024.03.20