티스토리 뷰

Development/Java

예외처리(Exception)

김드랍 2017. 8. 24. 15:59

예외처리

프로그램을 만들다 보면 수없이 많은 에러가 발생한다

자바 자체적으로 프로그램이 오동작을 하지 않도록 에러가 발생하게 함

이러한 에러들을 발생하지 않도록 하거나 에러가 발생할 것을 미리 예상하여 발생시에 적절한 처리를 하도록 하는것이 예외처리이다



자바 가상 머신은 프로그램 실행중에 예외가 발생하면 관련된 예외 클래스로부터 예외 객체를 생성하여 프로그램에서 지정된 예외 처리 구문으로 넘긴다 프로그램에 지정된 예외 처리 구문은 예외가 발생하면 자바 강상 머신에 의해 호출되고 예외 객체를 자바 가상 머신으로부터 넘겨받아 적절한 처리를 수행한다



문법 오류

- 오타와 같이 자바 구문에 어긋난 코드에서 발생하며 컴파일시에 발생한다

실행오류

- 프로그램 실행시 상황에 따라 발생하는 오류

- 프로그램 자체의 구조적인 문제로 인한 논리적 오류 . 논리적 모순이 생기지 않도록 코딩

- 자바 가상 머신 자체의 문제로인한 오류

- 예외 : 프로그램 실행중에 발생할 수 있는 예기치 않은 사건으로 프로그래머의 노력으로 처리가능


예외의 종류와 특징

Error

- java.lang.Error클래스의 서브 클래스들

- 시스템에 비정상적인 상황시 발생

- 주로 JVM에서 발생시키므로 어플리케이션 코드에서 처리 불가능

- OutofMemoryError 나 ThreadDeath같은 에러는 Catch문에서 대응 불가능


체크예외 / 언체크 예외

- 에러가 아닌 Exception 클래스는 체크 예외와 언체크 예외로 구분된다

- 체크 예외 : Exception 클래스의 서브클래스이면서 RuntimeException 클래스를 상속하지 않은 것들

- 언체크 예외: RuntimeException을 상속한 클래스


체크예외

- 체크예외가 발생할 수 있는 메소드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 한다

- 사용할 메소드가 체크 예외를 던진다면 이를 catch문으로 잡든지 throws를 정의해서 메소드 밖으로 던져야 한다 그렇지 않으면 컴파일 에러가 발생한다


언체크 예외

- java.lang.RuntimeException 클래스를 상속한 Exception들은 명시적인 예외처리를 강제하지 않기 때문에 언체크 예외라고 불린다 또는 대표 클래스 이름을 따서 런타임 예외(RuntimeException)이라고도 한다

- Error와 마찬가지로 런타임 예외는 catch문으로 잡거나 throws로 선언하지 않아도 된다

- 런타임 예외는 주로 프로그램의 오류가 있을 때 발생하도록 의도된 것들이다 이런 예외는 코드에서 미리 조건을 체크하도록 주의 깊게 만든다면 피할 수 있다


예외클래스(Exception Class) 의 계층 구조



자바의 예외는 java.lang.Throwable 클래스의 하위 클래스인 java.lang.Exception 클래스에서 취급된다


ArithmeticException : 산술 연산 오류 (정수를 0으로 나누는 경우)

IndexOutOfBoundsException : 배열의 인덱스가 배열의 길이를 벗어날 때

IllegalArgumentException : 메소드의 매개변수 유형을 잘못 사용할 때

IOException : 입출력시 지정한 파일이 시스템에 존재하지 않을 때

.

.

.


예외처리 방법

try - catch

try 문안의 수행할 문장들에서 예외가 발생하지 않는다면 catch문 다음의 문장들은 수행되지 않는다

try 문안의 문장을 수행 중 해당 예외가 발생하면 예외에 해당하는 catch문이 수행된다

try 문의 수행 중 예외발생 여부에 상관없이 무조건 실행해야하는 문장이 있다면 finally구문에 작성한다


try{

...

} catch(Exception1 e1) {

...

} catch(Exception2 e2) {

...

}


ex)  0으로 나누었을때 발생하는 예외처리 예시 


                     

throw-throws

ex) throws로 예외 발생시키기


'Development > Java' 카테고리의 다른 글

비트연산자 & 논리연산자  (0) 2018.03.04
컬렉션 프레임워크(Collection Framework) 란?  (0) 2017.08.08
JVM 메모리 구조 와 가비지 컬렉션(Garbage Collection)  (0) 2017.08.02
Static이란?  (0) 2017.08.02
JSP란?  (0) 2017.08.01
댓글