18. JAVA의 예외(Exception), 에러(Error), try-catch문, throw, throws
에러 (Error)
에러(Error)란 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나
JVM 실행에 문제가 생겼을 경우 발생하는 것입니다.
따라서 개발자가 미리 예측하여 처리할 수 없기 때문에 애플리케이션에서 오류에 대한 처리를 신경 쓰지 않아도 됩니다.
예외(Exception)
사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류입니다.
예외가 발생하면 프로그램이 종료가 된다는 것은 에러와 동일하지만
예외는 예외처리(Exception Handling)를 통해 프로그램을 종료되지 않고 정상적으로 작동되게 만들어줄 수 있습니다.
자바에서 예외처리는 Try Catch문을 통해 해 줄 수 있습니다.
예외(Exception)- 개발자가 구현한 로직에서 발생하므로, 발생할 상황을 미리 예측하여 처리할 수 있습니다.
예외 처리를 사용하는 이유
- 제어문으로는 처리할 수 없는 경우
- 프로그램이 강제종료되는 것을 막기 위함
자주 발생하는 Exception 클래스
- NullPointerException : Null 레퍼런스를 참조할때 발생, 뭔가 동작시킬 때 발생한다.
- (XXX)IndexOutOfBoundsException : 배열과 유사한 자료구조(문자열, 배열, 자료구조)에서 범위를 벗어난 인덱스 번호 사용으로 발생
- (XXX)FormatException : 문자열, 숫자, 날짜 변환 시 잘못된 데이터(ex. "123A" -> 123 으로 변환 시)로 발생, 보통 사용자의 입력, 외부 데이터 로딩, 결과 데이터의 변환 처리에서 자주 발생한다.
- ArthmeticException : 정수를 0으로 나눌때 발생
- ClassCastException : 변환할 수 없는 타입으로 객체를 변환할 때 발생
- IllegalArgumentException : 잘못된 인자 전달 시 발생
- IOException : 입출력 동작 실패 또는 인터럽트 시 발생
- IllegalStateException : 객체의 상태가 매소드 호출에는 부적절한 경우
- ConcurrentModificationException : 금지된 곳에서 객체를 동시에 수정하는것이 감지될 경우 발생
- UnsupportedOperationException : 객체가 메소드를 지원하지 않는 경우 발생
주요 메소드들
- printStackTrace() : 발생한 Exception의 출처를 메모리상에서 추적하면서 결과를 알려준다. 발생한 위치를 정확히 출력해줘서 제일 많이 쓴다. void를 리턴한다.
- getMessage() : 한줄로 요약된 메세지를 String으로 반환해준다.
- getStackTrace() : jdk1.4 부터 지원, printStackTrace()를 보완, StackTraceElement[]이라는 문자열 배열로 변경해서 출력하고 저장한다.
예외 처리 문법
try{
////오류가 발생할 수 있는 문장
}catch(예외이름 객체명){
////오류 발생 시 실행할 문장
}catch(예외이름 객체명){
/////오류 발생 시 실행할 문장
}
...
}finally{
/////오류 발생 여부에 상관없이 무조건 실행할 문장
/////※외부 장치와 연결 했을 경우 다시 닫을 때 주로 사용된다.
}
예외처리 사용 예시
예외 발생시키기 (throw, throws)
throw와 throws 키워드는 비슷하지만 다른 용도로 사용됩니다.
throw는 Exception을 발생시킬 때 사용하는 키워드입니다.
즉, throw는 개발자가 exception을 강제로 발생시켜 메서드 내에서 예외처리를 수행하는 것입니다.
반면에 throws는 메소드를 정의할 때 사용하며,
현재 메서드에서 자신을 호출한 상위 메서드로 Exception을 발생 시킵니다.
예외를 전가시키는 것( 예외를 자신이 처리하지 않고, 자신을 호출하는 메소드에게 책임을 전가하는 것)
이상으로 예외처리에 대해 알아보았습니다.
'KoreaIt Academy > JAVA' 카테고리의 다른 글
20. JAVA의 제네릭, 컬렉션 프레임워크 - LIST (0) | 2021.07.23 |
---|---|
19. JAVA의 Wrapper 클래스, 박싱(Boxing), 언박싱(UnBoxing) (0) | 2021.07.22 |
17. JAVA의 람다식(Lambda Expression) , 메소드 참조 (0) | 2021.07.22 |
16. JAVA의 API, 외부 API를 이용하여 문자보내기 (2) | 2021.07.21 |
15. JAVA의 내부클래스, 익명클래스(Anonymous inner class) (0) | 2021.07.20 |
댓글