IT/JAVA

Java Section 14 : 예외처리

_KH_ 2025. 1. 21. 14:11

■ 예외(exception) 

: 프로그램 구동 중 나타나는 오류들. 문법적으로는 문제없어 보이지만 실제 운영 중에 생기는 문제를 나타냄

 

* 에러(error) 와 다르다! 에러는 개발자가 예측하거나 처리할 수 없는 영역이다.

구분 체크 예외 비체크 예외
처리 여부 문법적으로 예외 처리를 강제함
반드시 처리해야 함
문법적으로 강제하지 않음
개발자의 판단에 의해 처리
확인 시점 컴파일 단계 실행 단계
예외 클래스 Runtime Exception을 제외한 모든 예외
IOException
SQLException 등
Runtime Exception의 자식 클래스 모두 포함
NullPointerException
IndexOutOfBoundException
ClssNotFoundException 등

 

예외클래스

[자주 사용되는 예외]

① NullPointerException : 자바에서 가장 빈번하게 발생하는 실행 예외

- 객체가 제대로 생성되지 않은 상태에서 사용할 경우 발생 (실제 메모리에 생성되지 않은 경우)

② NumberFormatException : 잘못된 문자열을 숫자로 형 변환 할 때 발생

③ ArrayIndexOutOfBoundException : 배열에서 인덱스 범위를 초과해 사용할 때 발생

 

예외처리 문법

- JVM이 예외를 발생 지점으로 던지는데, 이를 처리해야 프로그램이 비정상적으로 종료되지 않는다.

■ 기본 예외처리 문법 : "try-catch"

try {	
	// 예외가 발생할 가능성이 있는 코드
} 
catch(예외클래스명 e) {
	// 예외 처리 코드
} finally {
	// 무조건 실행되는 코드
}

□ 예외를 처리할 때 Exception 클래스를 이용하면 모든 예외를 처리할 수 있지만, Exception을 가장 하단에 둘 것. 그렇지 않으면 문법 에러가 발생한다.

 

다중 catch문 : 예외별로 예외 처리 코드를 다르게 하여 다양한 예외 처리 진행

   -> 예외를 다중처리함으로써 안정적인 프로그래밍 가능!

try {
			fr= new FileReader(path+fileName); // 파일 읽어들이기
			BufferedReader br = new BufferedReader(fr); 

			while(true) {
				msg = br.readLine();
				if(msg == null) { 
					break; 
				}
				System.out.println(msg);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

예시.

 

finally : 예외 발생 유무와 상관없이 실행되며 생략할 수 있다. 보통 외부 연동이나 예외가 발생해도 정상 종료되어야 할 구문들에서 사용한다.

 

■ 예외 던지기 : 메서드 내부에서 예외를 처리하지 않고 미룬 후, 해당 메서드를 호출한 쪽에서 예외를 처리하도록 함

    - "throws" 키워드 사용. 

    - 예외 객체는 여러 개 던질 수 있으며, 여러 개 던질 시 콤마(,)로 구분해서 나열한다.

 

□ 프로그램의 규칙에 위배되어 예외를 발생해야 할 경우, 임의로 예외 발생 가능

: throw new 예외 객체(메세지);

 

사용자 정의 예외 처리

□ 자바가 제공하는 예외 객체 외에도 개발자의 목적에 의해 예외 객체 생성 가능

- 사용자가 만든 클래스에 Exception 또는 RuntimeException을 상속하면 해당 클래스를 예외 처리 객체로 사용할 수 있다.

- 체크 예외는 Exception, 비체크 예외는 RuntimeException