예외 처리란?
예기치 않게 발생하는 에러에 대응할 수 있는 코드를 미리 사전에 작성하여
프로그램의 비정상적인 종료를 방지하고, 정상적인 실행 상태를 유지하기 위한것!
내부적인요인 - 개발자의 코드 에러
에러의 발생 시점이 다를수 있음
발생시점에 따라 에러를 컴파일 에러와 런타임 에러로 구분할수 있음
코드에 논리적인 오류가 있으면 발생하는 논리적 에러까지 세가지로 구분할수도 있음.
컴파일 에러와 런타임 에러
컴파일 에러
컴파일할때 발생하는 에러
주로 세미콜론 생략, 오탈자, 잘못된 자료형, 잘못된 포맷 등
문법적인 문제를 가리키는 신택스(syntax) 오류로부터 발생
빨간 줄로 친절하게 에러의 위치를 표시해 주는 것
런타임 에러
런타임시에 발생하는 에러
즉 프로그램이 실행이 될때 만나게 되는 에러임
런타임 에러는 주로 개발자가 컴퓨터가 수행할 수 없는 특정한 작업을 요청할 때 발생
예외 클래스의 상속 계층도
예외가 발생하면 예외 클래스로부터 객체를 생성하여 해당 인스턴스를 통해 예외 처리를 함
예외의 최고 상위 클래스인 Exception 클래스는 다시 크게
일반 예외 클래스와 실행 예외 클래스로 나눌 수 있음
일반 예외 클래스(Exception)
런타임 시 발생하는 RuntimeException 클래스와 그 하위 클래스를 제외한 모든
Exception 클래스와 그 하위 클래스를 가르킴
컴파일러가 코드 실행전에 예외 처리 코드 여부를 검사 한다고 하여 checked 예외라고 부르기도 함
주로 잘못된 클래스명(ClassNotFoundException)이나 데이터 형식(DataFormatException) 등
사용자편의 실수로 발생하는 경우가 많음
실행 예외 클래스(Runtime Exception)
앞서 언급한 런타임 시 발생하는 RuntimeException 클래스와 그 하위클래스를 지칭
컴파일러가 예외 처리 코드 여부를 검사하지 않는다는 의미에서 unchecked 예외라 부
주로 개발자의 실수로 발생하는 경우가 많고, 자바 문법 요소와 관련이 있음
클래스 간 형변환 오류(ClassCastException), 벗어난 배열 범위 지정(ArrayIndexOutOfBoundsException), 값이 null인 참조변수 사용(NullPointerException) 등 이 있
예외를 명백하게 정해놔야 함!!
내가 생각해서 예외를 다 적어놓음
내가 생각한 예외를 다 안썼을수도 있음! 빠트린게 있을수도 있음!!!!
그럴때 Exception 을 받아서 처리함
else{} "내가 모르는 예외가 있을때~~" 기록을 남겨 놓음!
try - catch문
예외처리를 try - catch블록을 통하여 구현할수 있음
try {
// 예외가 발생할 가능성이 있는 코드를 삽입
}
catch (ExceptionType1 e1) {
// ExceptionType1 유형의 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 유형의 예외 발생 시 실행할 코드
}
finally {
// finally 블록은 옵셔널
// 예외 발생 여부와 상관없이 항상 실행
}
try 블록 안에는 예외가 발생할 가능성이 있는 코드를 삽입
만약에 작성한 코드가 예외없이 정상적으로 실행이 되면 catch 는 건너 뛰고 finally 블록 실행됨
catch 블록은 예외가 발생할 때 실행이 되는 코드로 여러 종류의 예외를 처리함
finally 블록은 안써도 됨
예외 전가! ★ ★ ★
예외를 호출한 곳으로 다시 예외를 떠넘기는 방법
이를 위해 보통 메서드의 선언부 끝에 throws 키워드와 발생할 수 있는 예외들을 쉼표로 구분
void ExampleMethod() throws Exception{
// 이경우 Exception 클래스는 모든 예외 클래스의 상위 클래스이기 때문에
// 그 하위 클래스 타입의 예외 클래스들 모두 포함
}
예외가 발생한다는 것은 밑에 문들을 실행하지 않고 반환(종료) 해버리는 것
비지니스 로직 안에 다양한 예외를 처리 -> throws 사용으로 던지기?
두개의 차이점을 명확하게 알기!
throws 는 예외전가 , 예외를 떠넘기는 방법
throw 는 억지로 예외 발생시킴
'IT > JAVA' 카테고리의 다른 글
JAVA - 애너테이션(Annotation) (1) | 2024.12.02 |
---|---|
JAVA - 컬렉션 프레임 워크 (0) | 2024.12.02 |
JAVA - Collection 2) 제네릭 (0) | 2024.11.29 |
JAVA - Collection 1) 열거형 (0) | 2024.11.29 |
JAVA - 객체 지향 심화 3) 추상화 (0) | 2024.11.27 |