JAVA - 예외처리(Exception Handling)

이재원·2024년 12월 11일
0

JAVA

목록 보기
9/10

예외처리

프로그램 실행 중에 예기치 못한 상황에서 발생하는 비정상적인 상황을 가리킨다. 문법에 맞지 않게 작성된 코드는 사전에 컴파일 오류로 걸러지지만, 런타임 에러는 실행중에 발생한다. 이러한 예외가 발생한 경우 프로그램의 비정상적인 종료 대신 계속해서 정상적인 수행을 할 수 있도록 처리하는 것을 예외 처리라고 한다.

이러한 처리의 장점으로는 코드 상에서 정상 상태와 예외 상태를 명로하게 구분 가능하고, 예외가 발생한 이후의 코드에 대해 신경 쓸 필요가 줄어든다.

예외 객체와 예외 클래스

예외 객체(Exception Object)

자바는 모든 것이 객체이기 때문에 예외 역시 하나의 객체로 표현된다. 일반 객체처럼 클래스를 이용하여 정의되어 사용 가능하다.

예외 클래스(Exception Class)

예외를 나타내는데 사용되는 클래스로 java.lang.Throwable 로부터 파생된 클래스이다. 생성자, 멤버 필드, 메서드 등을 가질 수 있으며, 일반 객체와 차이점은 throws 할 수 있다는 점이다.

예외 클래스의 종류와 구조

Exception 클래스

상대적으로 덜 심각한 예외를 표현하며, 보통 ‘예외’라고 부르는 예외 처리 대상이다.

Unchecked Exception

  • 필요에 따라 예외 처리 가능
  • 예외처리 하지 않아도 컴파일 가능
  • RuntimeException 이하의 클래스가 이에 해당한다.

Checked Exception

  • 반드시 예외 처리를 해야 컴파일 가능
  • 나머지 클래스로 IOException이 이에 해당한다.

RuntimeException 클래스의 서브 클래스들

  • ArithmeticException: 0으로 나누는 경우에 주로 발생
  • ArrayIndexOutOfBoundsException: 잘못된 배열의 첨자를 사용한 경우 발생
  • NegativeArraySizeException: 배열 선언시 할당 크기가 음수인 경우 발생
  • ClassCastException: 허용 불가능한 형변환 수행시 발생
  • NullPointerException: null 값을 갖는 참조변수에 멤버를 접근하는 경우 발생
  • NumberFormatException
    : 래퍼 클래스의 parseXXX() 메서드로 문자열이 나타내는 숫자로 변환시 일치하지 않는 자료형의 숫자로 변환시 발생
  • java.util.InputMismatchException
    : Scanner 클래스의 nextXXX() 메서드로 입력시 입력 받고자 하는 자료형과 입력된 값의 자료형이 다른 경우 발생
  • java.io.IOException: 입출력 동작의 실패

Error 클래스

  • 상대적으로 더 심각한 예외를 표현
  • 보통 ‘에러’라 부르는 예외 처리 불가능한 대상

예외 메시지 표시 방법

Throwable 클래스의 멤버 메서드로 표시한다.

  • String getMessage()
    : 예외 객체가 가지고 있는 에러 메시지를 반환
  • void printStackTrace()
    : 예외 발생 원인과 경로를 추적하여 콘솔에 표시하며, 주로 개발 단계에서 디버깅 목적으로 사용

예외 처리 방법

예외 처리 방법에는 두 가지가 있는데, 첫번째 방법은 try ~ catch문을 사용하는 것이고 두번째 방법은 throws문으로 예외를 호출측으로 던지는 것이다.

try-catch-finally 문

예외 발생시 catch 문에서 처리하며, 여러개의 catch문이 있는 경우 위에서부터 순서대로 처리되며, 상대적으로 상위 예외 클래스형의 객체를 더 나중에 검사하도록 해야 한다.

finally 블록은 예외 발생여부와 상관없이 무조건 실행되는 것으로, 생략해도 상관없으며 실제 많은 경우 생략한다.

throws

메서드 구현부에 기술하며, 예외 발생시 예외 처리를 현재 메서드를 호출한 곳으로 던진다. 메서드 호출의 역순으로 예외가 처리될 때까지 전달되며, 호출 측에서 try-catch문을 통해 처리해 줘야 한다.

throw

throw 키워드는 자바에서 예외를 명시적으로 발생시키는 데 사용하는 것으로 new 키워드와 함께 사용하여 특정 객체를 생성하고 이를 프로그램 흐름에서 던질 수 있다. 이를 통해 예외를 강제시킬 수 있다.

예외 처리 예제

// 사용자 정의 예외 클래스
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

public class ThrowNewCustomException {
    public static void main(String[] args) {
        try {
            validateScore(-10); // 예외 발생
        } catch (CustomException e) {
            System.out.println("예외 처리: " + e.getMessage());
        }
    }

    public static void validateScore(int score) throws CustomException {
        if (score < 0) {
            // 사용자 정의 예외를 명시적으로 던짐
            throw new CustomException("점수는 0 이상이어야 합니다.");
        }
        System.out.println("점수가 유효합니다.");
    }
}

출처
명품 JAVA programming - 황기태, 김효수
https://www.youtube.com/사람만이

profile
20학번 새내기^^(였음..)

0개의 댓글