2024-07-25 DAY12

보히·2024년 7월 25일
  1. 예외 처리
  • 예외(Exception)는 프로그램 실행 중에 발생할 수 있는 예기치 않은 상황으로, 이를 처리하지 않으면 프로그램이 강제로 종료됩니다.
  • 자바에서는 try-catch-finally 구문을 사용하여 예외를 처리할 수 있습니다.
  • try 블록: 예외가 발생할 가능성이 있는 코드를 작성합니다.
  • catch 블록: 특정 예외가 발생했을 때 처리할 코드를 작성합니다.
  • finally 블록: 예외 발생 여부에 관계없이 항상 실행되는 코드를 작성합니다.
  • 예외는 Exception 클래스를 상속받으며, 자바에서 발생할 수 있는 다양한 예외 상황에 대한 클래스를 제공합니다.
  1. 에러의 종류
  • 컴파일 에러: 코드의 문법적 오류로 인해 컴파일이 불가능한 상태입니다. 이클립스와 같은 IDE에서 빨간색 밑줄로 표시되며, 실행 전에 발견할 수 있어 고치기 쉽습니다.
  • 런타임 에러: 실행 중에 발생하는 오류로, 다양한 경우의 수에 대응하지 못해 발생합니다. 대부분의 에러는 런타임 에러에 해당하며, 프로그램이 실행된 후에 발생하기 때문에 더 주의가 필요합니다.
  1. 런타임 에러의 종류
  • 논리 오류: 코드의 논리적 모순으로 인해 발생합니다. 개발자가 코드를 작성할 때 논리적으로 모순되지 않도록 주의해야 합니다.
  • 자바 가상머신 오류: 프로그래머가 직접 처리할 수 없는 오류로, 자바 가상머신 자체에서 발생하는 문제입니다.
  • 예외(Exception): 개발자가 처리할 수 있는 오류로, 프로그램 실행 중에 발생할 수 있는 예기치 않은 사건을 의미합니다.
  1. Exception 클래스
  • 모든 예외 상황을 처리할 수 있는 최상위 클래스입니다.
  • 모든 예외 상황에 일괄적으로 대응할 수 있지만, 세분화된 개별적인 처리는 불가능합니다.
  • 다양한 종류의 예외를 개별적으로 처리하고 싶을 때는 구체적인 예외 클래스를 사용해야 합니다.
  1. catch 블록을 사용한 복합 에러 처리
  • catch 블록을 여러 개 작성하여, 다양한 예외 상황에 따라 각각 다른 처리를 할 수 있습니다.
  • 일반적으로 구체적인 예외 클래스를 먼저 작성하고, 그다음 Exception 클래스를 마지막에 사용하여 예상하지 못한 예외를 처리하는 것이 좋습니다.
  1. 에러 객체 e의 기능
  • e.getMessage(): 발생한 예외에 대한 간략한 메시지를 반환합니다.

  • e.printStackTrace(): 예외 발생 시의 호출 스택을 출력하여 디버깅에 도움을 줍니다. 주로 개발자가 예외의 원인을 분석할 때 사용합니다.

    예외 코드1)
    package work0725_exception;

public class Main05 {

public static void main(String[] args) {
    // 문자열 배열 src를 정의합니다. 일부 값은 정수로 변환할 수 없습니다.
    String[] src = {"2", "3", "3", "가"};
    
    // 정수 배열 arr를 정의합니다. 길이는 3입니다.
    int[] arr = new int[3];
    
    try {
        // src 배열의 각 요소를 정수로 변환하고 arr 배열에 저장합니다.
        for (int i = 0; i < src.length; i++) {
            // 문자열을 정수로 변환합니다.
            arr[i] = Integer.parseInt(src[i]);
            // 변환된 정수를 출력합니다.
            System.out.println(arr[i]);
        }
    } 
    // NumberFormatException: 문자열을 정수로 변환할 수 없을 때 발생합니다.
    catch (NumberFormatException e) {
        e.printStackTrace(); // 예외의 스택 트레이스를 출력합니다.
        System.out.println("문자열을 숫자로 바꾸는데 오류 발생");
    } 
    // ArrayIndexOutOfBoundsException: 배열의 인덱스가 범위를 벗어날 때 발생합니다.
    catch (ArrayIndexOutOfBoundsException e) {
        e.printStackTrace(); // 예외의 스택 트레이스를 출력합니다.
        System.out.println("배열 오류 발생");
    } 
    // Exception: 위의 두 가지 예외 외의 모든 예외를 처리합니다.
    catch (Exception e) {
        e.printStackTrace(); // 예외의 스택 트레이스를 출력합니다.
        System.out.println("알 수 없는 예외가 발생");
    } 
    // finally: 예외 발생 여부와 관계없이 항상 실행됩니다.
    finally {
        System.out.println("데이터 변환 종료");
    }
    
    // try-catch-finally 블록 후에 출력됩니다.
    System.out.println("프로그램 종료");
}

}

설명)

  • 문자열 배열 src 정의: 문자열 배열 src는 정수로 변환할 수 있는 문자열과 그렇지 않은 문자열을 포함합니다.
  • 정수 배열 arr 정의: 정수 배열 arr은 크기가 3인 배열로, 최대 3개의 정수를 저장할 수 있습니다.
  • try 블록: src 배열의 각 요소를 정수로 변환하고 arr 배열에 저장합니다. 변환된 값을 출력합니다.
  • catch (NumberFormatException e): 문자열을 정수로 변환할 수 없을 때 발생하는 예외를 처리합니다. 예외의 스택 트레이스를 출력하고, 오류 메시지를 출력합니다.
  • catch (ArrayIndexOutOfBoundsException e): 배열의 인덱스가 범위를 초과할 때 발생하는 예외를 처리합니다. 예외의 스택 트레이스를 출력하고, 배열 오류 메시지를 출력합니다.
  • catch (Exception e): 위에서 처리되지 않은 모든 예외를 처리합니다. 예외의 스택 트레이스를 출력하고, 알 수 없는 예외 메시지를 출력합니다.
  • finally 블록: 예외 발생 여부와 관계없이 항상 실행됩니다. 데이터 변환 종료 메시지를 출력합니다.
  • 프로그램 종료 메시지: 모든 예외 처리 및 finally 블록 실행 후에 프로그램 종료 메시지를 출력합니다.

0개의 댓글