Exception
컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 자바에서 에러 (Error) 라고 한다. 자바에서는 에러이외에 예외라고 부르는 오류가 있다. 예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램의 오류를 말한다. 이러한 오류는 예외 처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.
예외는 두 가지 종류가 있다. 일반 예외( Exception ) 이고, 다른 하나는 실행 예외( Runtime Exception ) 이다. 일반 예외는 컴파일러 체크 예외라고도 하는데 자바 소스를 컴파일 하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문이다. 모든 예외 클래스는 java.lang.Exception 클래스를 상속받는데, 일반 예외와 실행 예외를 구별하는 방법은 일반 예외는 Exception을 상속받지만 , 실행 예외는 Exception을 상속받지 않는 클래스들이고, 실행 예외는 RuntimeException을 상속 받은 클래스들이다.
실행 예외
실행 예외는 개발자가 직접 코드를 삽입해야 한다. 만약 실행 예외를 넣지 않았을 경우, 해당 예외가 발생 시 곧바로 코드가 종료된다.
NullPointException
자바 프로그램에서 가장 빈번하게 발생하는 예외이다. 이것은 객체 참조가 없는 상태, Null값을 갖는 참조변수로 객체 접근 연산자로 도트 (.) 를 사용했을때 발생한다. 객체가 없는 상태에서 객체를 사용하려고 하면 발생한다.
ArrayIndexOutOfBoundsException
배열에서 인덱스 범위를 초과하여 사용할 경우 발생한다.
NumberFormatException
문자열로 된 데이터를 숫자로 변경하는 경우 , 숫자로 변환될 수 없는 문자가 포함되어 있을 경우 발생한다.
ClassCastException
타입 변환은 상위클래스와 하위 클래스 간에 발생하고, 구현 클래스와 인터페이스 간 발생하는데 억지로 타입 변환을 시도할 경우 발생한다.
예외 처리 코드
프로그램에서 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 한다. 예외 처리 코드는 Try - Catch - Finally 블록을 이용한다.
try - catch - finally 블록은 생성자 내부와 메서드 내부에서 작성되어 일반적 예외와 실행 예외가 발생할 경우 예외처리를 할 수 있도록 해준다.
try 블록은 예외 발생 코드가 위치한다. 만약 예외발생이 없다면 catch를 건너뛰어 finally로 이동해 코드를 실행한다. finally는 보통 생략이 가능하다. 예외 발생여부와 없이 코드 실행할 경우에 finally 블록을 작성한다.
예외 종류에 따른 처리 코드
다중 Catch
try - catch문에서 다양한 예외가 발생할 수 있는데, 발생되는 예외 처리 코드를 다르게 하기 위해 다중 catch문을 사용한다.
Catch 순서
다중 catch 블록을 작성 시 주의 점은 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야한다. try 블록에서 예외가 발생시 처리해줄 catch 블록은 위에서부터 차례대로 검색된다.
try { ...
// 예외 발생
}catch(예외클래스 e){ ...
// 예외 처리
} finally { ...
// 항상 실행
}
예외 떠넘기기
메서드 내부에서 예외처리 시 try-catch 문 이외에도 메서드를 호출한 곳으로 예외를 떠넘길 수 도 있는데, 이때 처리하는 키워드는 **throws**이다. throws 키워드는 메서드 선언부 끝에 작성되어 메서드에서 처리하지않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.
리턴타입 메서드명 ( 매개변수 , ..) throws Exception {
}
'언어 공부 > Java' 카테고리의 다른 글
프로세스와 스레드 (0) | 2022.08.23 |
---|---|
상속과 인터페이스 ( Feat. JAVA ) (0) | 2022.08.13 |
자바 클래스 (0) | 2022.08.11 |
JavaScript란 (0) | 2022.08.02 |
Servlet이란 (0) | 2022.08.01 |