예외

    예외 vs 에러

    예외

    연산 오류, 숫자 포맷 오류 등과 같이 상황에 따라 개발자가 해결할 수 있는 오류

    에러

    자바 머신 자체에서 발생하는 오류로 개발자가 해결할 수 없는 오류

     

    예외 처리

    오류가 발생했을 때 차선책을 제시함으로써 오류를 피하는 과정

     

    예외 클래스의 상속 구조

    일반 예외 & 실행 예외

    일반 예외

    : 컴파일 전에 체크 가능 - Exception으로부터 상속

    실행 예외

    : 예외 처리를 하지 않아도 컴파일은 가능하나, 실행 중 예외가 발생하면 프로그램 종료 - RuntimeException으로부터 상속

     

    예외 처리

    try {
    	// 일반 예외, 실행 예외 발생 가능 코드
    } catch (예외 클래스명 참조 변수명) {
    	// 예외가 발생했을 때의 처리
    } finally {
    	// 예외 발생 여부와 관계없이 무조건 실행
    }

     

    다중 예외 처리

    try {
    	// 일반 예외, 실행 예외 발생 가능 코드
    } catch (예외 클래스명1 참조 변수명1) {
    	// 예외가 발생했을 때의 처리
    } catch (예외 클래스명2 참조 변수명2) {
    	// 예외가 발생했을 때의 처리
    } catch (예외 클래스명3 참조 변수명3) {
    	// 예외가 발생했을 때의 처리
    } finally {
    	// 예외 발생 여부와 관계없이 무조건 실행
    }

    또는

    try {
    	// 일반 예외, 실행 예외 발생 가능 코드
    } catch (예외 타입 A | 예외 타입 B 참조 변수명) {
    	// 예외가 발생했을 때의 처리
    } finally {
    	// 예외 발생 여부와 관계없이 무조건 실행
    }

    multicatch block에서의 주의사항

    : 나열된 예외 클래스들이 부모-자식 관계가 있다면 오류가 발생함

    리소스 자동 해제 예외 처리(try with resource)

    • 예외 처리 구문이 완료된 후 리소스 객체의 close() 메서드를 자동으로 삽입
    • AutoCloseable 인터페이스를 상속받은 클래스의 객체에 한해서만 사용 가능
    public static void main(String[] args) {
    				
    		try (
    			// 자원 생성 구문
    			InputStreamReader isr = new InputStreamReader(System.in);
    			// …
    		) {
    			isr.read();
    			System.out.println(3/0);
    			
    		} catch (IOException | ArithmeticException ae) {
    			System.out.println("예외 발생");
    			
    		} catch (Exception e) {
    			System.out.println("예측하지 못한 예외가 발생");
    			
    		} finally {
    			// 자원 해제 구문(close() 메서드를 호출)을 생략 
    		}
    		
    		System.out.println("정상 종료");
    	}

     

    throw

    • 고의로 예외를 발생시킬 때 사용
    • 프로그램 동작 중 개발자가 원하는 조건을 만족하지 않을 때 더 이상 코드가 진행하지 못하도록 예외를 발생시킬 때 사용
    • 대표적으로 라이브러리를 만들 때 사용

     

    throws

    • 예외가 발생한 메서드를 호출한 곳으로 예외 객체를 넘기는 방법

    'JAVA' 카테고리의 다른 글

    대표적인 예외의 종류  (0) 2023.04.02
    인터페이스  (0) 2023.04.02
    상속  (0) 2023.04.02
    접근지정자 - Abstract  (0) 2023.04.02
    접근지정자 - Final  (0) 2023.04.02

    댓글