My Melody Is Cute JAVA 예외처리
본문 바로가기

개발공부🌷/JAVA

JAVA 예외처리

컴퓨터에서 에러가 발생하는 원인

내부적 / 외부적

 

실행전 알 수 있는 오류와 실행후 알 수 있는 오류

 

컴파일 에러( Compile Time Error)

컴파일 할 때 발생하는 에러

 

런타임 에러( Run Time Error)

런타임 시에 발생하는 에러

(프로그램이 실행 될 때)

 

에러와 예외

에러(error) : 복구하기 어려운 수준의 심각한 오류

예외(exception) : 잘못된 사용 또는 코딩으로 인한 상대적 미약한 수준의 오류 코드수정등으로 수습이 가능

자바의 모든 에러와 예외 클래스는 Throwable클래스로부터 확장

모든 예외의 최고 상위 클래스는 Exception클래스

Exception 클래스는 일반예외클래스와 실행예외클래스로 나뉜다

 

일반예외클래스(Exception)

런타임 시 발생하는 클래스와 그 하위클래스를 제외한 모든 Exception 클래스와 그 하위클래스

checked예외

잘못된 클래스명이나 데이터 형식등 사용자편의 실수로 발생

 

실행예외클래스(Runtime Exception)

런타임 시 발생하는 클래스와 그 하위클래스

컴파일러가 예외처리코드 여부를 검사하지 않는다는 의미에서 unchecked예외라고 부르기도 한다

주로 개발자의 실수로 발생하는 경우 자바 문법 요소와 관련

ex) 클래스간 형변환 오류, 벗어난 배열범위, 값이 null 인 참조변수 사용..등등

 

try - catch문

예외처리란 잠재적으로 발생할 수 있는 비정상 종료나 오류에 대비하여 정상 실행을 유지할 수 있도록 처리하는 코드 작성과정

try {
    // 예외가 발생할 가능성이 있는 코드를 삽입
} 
catch (ExceptionType1 e1) {
    // ExceptionType1 유형의 예외 발생 시 실행할 코드
} 
catch (ExceptionType2 e2) {
    // ExceptionType2 유형의 예외 발생 시 실행할 코드
} 
finally {
    // finally 블록은 옵셔널
    // 예외 발생 여부와 상관없이 항상 실행
}

try블록 안에 예외 발생가능성 있는 코드 삽입

예외없이 정상실행되면 finally 블록 실행(finally는 옵셔널이다 하지만 포함될경우 무조건 실행)

catch 블록은 예외가 발생할 때 실행되는 코드 여러종류의 예외를 처리 할 수 있다

catch블록이 여러개이면 일치하는것만 실행

예외가 발생하면 catch블록은 위에서부터 순차적으로 진행되기 때문에

구체적인 예외클래스인 하위클래스를 먼저 위에 배치해 상위 예외 클래스가 먼저 실행되지 않도록 방지하는게 좋다

(조건문을 배울때 구체적인 범위의 조건을 먼저 정의해준것과 같다)

 

예외전가

예외를 호출한 곳으로 다시 예외를 떠넘기는 방법도 있다

메서드의 선언부 끝에 throws키워드와 발생할 수 있는 예외들을 쉼표로 구분하여서 나열해 주면 된다

반환타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
	...생략...
}

void ExampleMethod() throws Exception {
} //특정 메서드에서 모든 종류의 예외가 발생할 가능성이 있는경우

Exception 클래스는 모든 예외 클래스의 상위클래스이기 때문에

그 하위 클래스 타입의 예외 클래스들이 모두 포함되게 된다

 

예외를 의도적으로 발생시키기

throw키워드 사용