Java_17_예외·Exception

OngTK·2025년 8월 2일

Java

목록 보기
17/35

1. 예외처리


1) 예외

  • 개발자가 구현한 로직이나 사용자 영향으로 발생한 문제
    ※ 시스템 오류
  • 시스템이 종료되는 심각한 수준의 문제

2) 예외의 종류

(1) 일반 예외

  • 컴파일(실행)될 때, 예외 처리 코드 여부 검사, 즉 인위적으로 발생시킨 예외
  • 입출력, 네트워크, 파일, JBDC, 등 외부와 연동 시, 주로 사용
  • ex)
    • Class.forName( 클래스경로 ); : 해당 경로의 클래스 유무를 확인하는 함수
    • Thread.sleep( 미리초 ); : 1000 미리초(1초)간 thread가 sleep(정지)

(2) 실행 예외

  • 컴파일(실행)될 때, 예외 처리 코드 여부 검사를 하지 않고 발생하는 예외
  • 개발자의 경험 의존도가 높음

3) 특징

  • 예외 발생 시, 예외 발생 멘트와 함께 시스템이 중지됨
  • 실행 예외처리를 통해, 예외 발생 시 예외를 고치는 것이 아닌 흐름을 제어
  • 프로그램의 24시간 중단 없이 실행하기 위한 안전한 로직 구현을 위해 사용

4) 예외 클래스

Exception : 모든 예외들의 상위 클래스(SuperClass)
ClassNotFoundException : 클래스를 찾지 못하였을 때, 예외 발생 정보를 저장하는 클래스
InterruptedException : 흐름이 중단되었을 때, 예외 발생 정보를 저장하는 클래스
NullPointerException : 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생
NumberFormatException : 숫자가 아닌 리터럴을 숫자로 변환할 경우 발생
ArrayIndexOutOfBoundsException : 정해진 배열의 크기보다 크거나 음수 index에 대한 요청
InputMismatchException : input의 타입이 일치하지 않을 때

5) 사용법

   try { 
        '예외가 발생할 것 같은 코드 or 일반예외'
    } catch( 예외클래스명 매개변수명 ){ 
        `예외발생시 실행문` 
    } catch(){
    } finally{'예외 유무와 상관없이 무조건 실행'}
public class Practice {
    public static void main(String[] args) {
        // [1] 일반 예외
        // 예외 유무와 상관없이 무조건 예외처리를 하는 인위적으로 예외를 발생시킴
        try {
            Class.forName("java.lang.String");
            //Class.forName( 클래스경로 );   : 해당 경로의 클래스를 읽어오는 함수
            // String Class가 존재함 >> 밑의 catch 까지 실행하지 않음
        } catch (ClassNotFoundException e) {
            // catch( 예외클래스면 매개변수명 ) // 예외발생 시 처리를 위한 코드
            System.out.println("[예외발생] String 클래스가 없습니다." + e);
        }

        // [2] 일반예외, 예외 발생
        try {
            Class.forName("java.lang.String2");
            // String2 Class는 존재하지 않음
        } catch (ClassNotFoundException e) {
            System.out.println("[예외발생] String2 클래스가 없습니다." + e);
            // String2 Class가 없으므로 >> catch 실행
        }
    }
}

2. 예외 던지기


예외 발생 시, 메소드를 호출한 곳으로 예외를 전달(return)
한 곳에서 예외처리를 하기 위해 메소드 내부에서 발생한 예외를 다른 곳으로 이동·전달·리턴할 수 있음


public class Practice {
    //(1) 예외가 발생하는 메소드 생성
    // (3) 예외 발생시 예외 던지기(throws)
    // 메소드명() throws 예외클래스명{}

    // 일반예외 클래스는 주로 throws 예외 코드가 존재
    // 실행예외 클래스들은 주로 throws 예외 코드가 없음
    public static void method1() throws NullPointerException{
        String str = null;
        System.out.println(str.length());       // 예외 발생이 예측됨
    }

    public static void method2() throws ClassNotFoundException {
        Class.forName("com.sql.jdbc"); //클래스가 있는지 없는지 모름, 일반예외
    }

    public static void main(String[] args) {
        try {
            //(2) 예외 메소드 실행
            method1();
        } catch ( NullPointerException e) {
            System.out.println("[method1의 예외 발행]" + e );
        }

        try {
            method2();
        } catch (ClassNotFoundException e){
            System.out.println("[method2의 예외발생]" + e);
        }
    }
}
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글