[JAVA-8] 예외

ParkJunHa·2023년 10월 22일

예외 (Exception)

오류 : 프로그램 중요 기능의 수행을 불가능 하게 하는 오류
예외 : 오류보다 가벼운 문제, 프로그램 자체로 처리 가능

  • 예외 발생시 프로그램이 비정상 종료 되는 것을 막고, 예외와 상관없는 기능은 정상동작되도록 처리하는 작업

  • Java에서는 Exception 클래스로 제공됨. 예외가 발생하면 객체로 인식함

![[Pasted image 20231022163455.png]]

예외의 종류

컴파일러 체크 유무에 따라

Checked Exception

자바 소스 작성 시 반드시 예외처리
예외 처리를 하지 않고 컴파일 시에는 오류가 발생

예외 클래스설명
IOException입출력 작업 오류시
FileNotFoundException파일 입출력 작업시
SQLExceptionDB 연동 작업 도중 오류

Unchecked Exception

자바 소스에서 예외처리 하지 않아도 됨
JVM 실행시 예외 발생을 인지하여 처리해줌

예외 클래스설명
ArrayIndexOutOfBoundsException배열 마지막 인덱스 범위를 넘은 경우
ArithmeticException수치형 데이터를 0으로 나눌때
NullPointerException생성되지 않은 인스턴스 참조시
NumberFormatException변경하려는 문자열이 수치형이 아닌 경우
ClassCastException인스턴스와 다른 종류의 클래스로 캐스팅시 발생
ClassNotFoundException클래스가 존재하지 않은 경우

예외 처리 과정

  1. 예외발생시 JVM에게 예외를 던진다.
  2. JVM은 예외를 분석하여 알맞은 Exception 클래스의 객체를 생성
  3. 생성된 예외 객체를 예외가 발생한 곳으로 던진다.
  4. 발생한 곳에서 예외처리를 하지 않으면 프로그램은 비정상 종료된다.

예외 처리 방법

try-catch

try{
	//예외 발생
}catch{
	//예외 처리 코드
}
// 실행 코드

다중 catch

try{
	//Exception
}catch(FileNotFoundException e1){
	// 파일 예외
}catch(IOException e2){
	// 입출력 예외
}catch(Exception e3){
	// 그 외 예외
}

[!caution] 다중 catch문 사용시 주의
Exception 계층구조에서 상위 클래스 타입 매개변수를 가지는 catch문은 뒤에 위치시켜야 한다.

finally

예외 발생 유무와 상관없이 실행
프로그램에서 외부장치 연동시 많이 사용됨

throws

자바의 메서드 호출 방법을 이용하여 메서드 내에서 발생한 예외를 처리함.

  • 예외 발생 시 발생한 예외를 메서드를 호출한 곳으로 전달하여 예외 처리
  • 최초 메서드를 호출한 main() 메서드에서는 try/catch문으로 예외 처리
  • RuntimeException은 throws할 필요 없음
public class Test{
	public void call() throws Exception{
		//code
	}
}

명시적 예외 처리 방법

예외 발생 상황이 아니더라도 강제로 예외 발생시키는 기능
사용자 정의 예외 클래스로 예외 처리시 사용

import java.io.IOEXception;
public class ArrayUtil{
	if(...) throw new IOException("~~");
}
사용자 정의 예외 클래스
public class UserDefinedException extends Exception{
	public String toStrint();
	public String getUserExceptionInfo();
	public static String showTime();
}
profile
PS린이

0개의 댓글