JAVA의 예외 처리란?

JAVA의 예외 처리란?

# 에러의 종류

1. 컴파일 에러 - 컴파일 시에 발생하는 에러

2. 런타임 에러 - 실행 시에 발생하는 에러

3. 논리적 에러 - 실행은 잘 되는데 의도와 다르게 동작하는 에러

<컴파일 에러>

- 소스코드를 컴파일 하면 컴파일러가 소스코드에 대해 기본적인 검사를 수행하고 에러가 있는지를 확인해준다.

- 오타, 잘못된 구문, 자료형 체크 등 기본적인 검사 수행.

- 컴파일러는 실행 도중에 발생할 수 있는 잠재적인 오류까지 모두 잡아내지는 못한다.

- 이왕 에러가 날거면 컴파일 에러가 최고의 에러

# 에러(Error)와 오류(Exception)

에러(Error) - 프로그램 코드에 의해 수습될 수 없는 심각한 오류

오류(Exception) - 프로그램 코드에 의해 수습될 수 있는 미미한 오류

모든 예외의 최고 조상은 Exception 클래스이다.

예외 클래스는 다시 두가지 종류로 나눠볼 수 있다. RuntimeException과 그 나머지들이다.

ExceptionClass -> 사용자의 실수와 같은 외적인 요인에 의해 발생

(FileNotFoundException, DataFormatException...)

RuntimeExceptionClass -> 주로 개발자의 실수로 인해 발생

(IndexOutofBoundsException, NullPointerException...)

ExceptionClass의 경우, 예외처리가 되어있지 않다면 컴파일 에러를 발생시켜 예외처리를 강제한다.

RuntimeExceptionClass는 컴파일러가 예외처리가 되어있는지 여부를 확인해주지 않는다.

# try-catch 예외처리

프로그램의 실행 도중 발생하는 에러는 개발자가 손 쓸 도리가 없다.

하지만 예외는 개발자가 "예외처리"를 함으로써 예외의 발생으로 인한 프로그램의 비정상적인 종료를 막고 정상 운영 상태를 유지할 수 있도록 할 수 있다. (예외처리를 하지 못하면 에러와 동일하게 프로그램이 비정상적으로 종료된다)

* try-catch 문에서의 흐름

1. try 블럭 내에서 예외가 발생 -> 발생한 예외와 일치하는 catch 블럭이 있는가?

-> 있으면 try 블럭을 곧바로 빠져나가 catch블럭 내에 있는 문장들을 수행. 이후 try-catch문을 빠져나간다

(try 블럭에서 예외 발생 시, 예외 발생 위치 이후의 문장들은 수행되지 않는다.)

-> 없으면 예외를 처리하지 못하고 비정상 종료.

2. try 블럭 내에서 예외가 발생하지 않으면 catch 블록을 실행하지 않고 try-catch문 탈출, 다음 문장 수행.

try 문에서 예외 발생 -> 해당 예외에 해당하는 클래스의 인스턴스 생성 -> 해당 예외를 처리할 수 있는 catch 블럭이 있는지 순차 탐색 ( instanceof 연산자를 통해) -> 있으면 예외처리 수행

(Exception 클래스는 모든 예외 클래스의 조상 클래스이므로, Exception 타입을 선언하면 모든 예외를 받을 수 있다)

* try-catch 예외처리 시 유의사항

1. try 블럭 또는 catch 블럭 안에 또다른 try-catch문이 들어갈 수 있다.

- 이 경우, 같은 이름의 참조변수를 사용할 수 없다.

2. 예외를 받을 수 있는 catch 블럭이 여러개 있을 경우, 가장 먼저 있는 catch 블럭만 수행한다.

* prinitStackTrace() 메서드로 예외발생 당시의 메서드 정보돠 예외 메시지를 화면에 출력할 수 있다

* getMessage() 메서드로 발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다

from http://sedangdang.tistory.com/180 by ccl(A) rewrite - 2021-11-26 16:01:51