JAVA

[JAVA] 예외처리(Exception)

기정님 2025. 4. 29. 11:19

▶ 프로그램 오류

프로그램 수행 시 치명적 상황이 발생하여 비정상 종료 상황이 발생한 것, 프로그램 에러라고도 함

 

 오류의 종류

1. 컴파일 에러 : 프로그램의 실행을 막는 소스 상의 문법 에러, 소스 구문을 수정하여 해결

2. 런타임 에러 : 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등 주로 if문 사용으로 에러 처리

3. 시스템 에러 : 컴퓨터 오작동으로 인한 에러, 소스 구문으로 해결 불가

 

 오류 해결 방법

소스 수정으로 해결 가능한 에러를 예외(Exception)라고 하는데 이러한 예외 상황(예측 가능한 에러) 구문을 처리 하는 방법인 예외처리를 통해 해결


▶ 예외 클래스 계층 구조

Exception과 Error 클래스 모두 Object 클래스의 자손이며 모든 예외의 최고 조상은 Exception 클래스 반드시 예외 처리해야 하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨

 


 

▶ 예외처리(Exception)


▶ 예외처리(Exception)

 


▶ 예외처리 방법

1. Exception 처리를 호출한 메소드에게 위임

메소드 선언 시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임 / 계속 위임하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료

2. Exception이 발생한 곳에서 직접 처리

try~catch문을 이용하여 예외처리

- try : exception 발생할 가능성이 있는 코드를 안에 기술

- catch : try 구문에서 exception 발생 시 해당하는 exception에 대한 처리 기술 여러 개의 exception처리가 가능하나 exception간의 상속 관계 고려

- finally : exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술 중간에 return문을 만나도 finally구문은 실행되지만 System.exit();를 만나면 무조건 프로그램 종료 주로 java.io나 java.sql 패키지의 메소드 처리 시 이용

package com.kh.example.chap01_throws.controller;

import java.io.IOException;

public class ThrowsController {

	public void method1(){
		System.out.println("method1() 호출됨...");
		try {
			int a = 10/0;
			method2();
		} catch (ArithmeticException e) {
			e.printStackTrace();
		} catch (RuntimeException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// method3();: handle finally clause
			System.out.println("예외 발생 여부와 상관없이 무조건 실행");
		}
		System.out.println("method1() 종료됨...");
	}
	public void method2() throws IOException {
		System.out.println("method2() 호출됨...");
		throw new IOException("강제 오류 발생합니다~");
//		System.out.println("method3() 종료됨...");
	}
}

 exception간의 상속 관계 고려를 무조건 해야한다 

catch는 자손부터 부모로 내려가야된다 catch문을 부모로 먼저 받으면 그 밑에 자식 에러는 판단할 필요가 없어지기때문이다

Exception은 최상위 trycatch클래스이다.

 


▶ 예외처리(Exception)


▶ 예외처리 방법


▶ Exception과 오버라이딩


▶ 사용자 정의 예외

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] 컬렉션(Collection), 제네릭  (0) 2025.05.01
[JAVA] 입출력(IO)  (0) 2025.04.29
[JAVA] 기본 API  (0) 2025.04.28
[JAVA] 다형성(Polymorphism),추상화,인터페이스  (0) 2025.04.28
[JAVA] 상속(Inherit)  (0) 2025.04.25