JAVA를 JAVA라

[JAVA] 예외처리, Exception (try - catch문) 본문

JAVA/열일하는 블로그

[JAVA] 예외처리, Exception (try - catch문)

샛별KIM 2021. 12. 7. 13:13

'예외' 란?

컴퓨터 하드웨어의 오작동 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것을 자바에서 '에러'라고 말한다.

(즉 에러 = 프로그래머가 고치지 못하는 것)

에러는 JVM 실행에 문제가 생겼다는 것이므로 개발자는 이러한 에러를 극복할 방법이 없다.

이러한 '에러' 외 프로그램 실행 시 발생되는 모든 에러 상황을 '예외'라고 한다.

 

발생되는 순서는 대략 다음과 같다.

컴파일 -> 실행 -> 실행 중 예외 발생 -> VM이 발생한 예외의 종류 및 내용을 파악한 뒤 예외 객체 생성 -> 발생된 코드 밖으로 예외 던지기(throw) -> 예외의 콜 스택에 전이 -> main 메소드 밖까지 던지게 되면 프로그램 비정상 종료

 

위처럼 예외는 '던진다' 라고 표현한다.

 

 

또한 예외는 객체이기 때문에 '클래스'로 정의되어 있다.

예외의 최고 클래스는 lang 패키지의 Throwable으로, 자식으론 Error와 Exception이 있다.

 

[Error]

Error 하위 타입은 일반적으로 java 실행기, 즉 VM에 관련된 에러 상황들을 정의한 클래스이다.

이러한 문제(상황)들은 프로그래머가 처리할 수 없는 것들로 VM, 즉 JRE의 전반적인 문제이다.

따라서 프로그래머는 Error 하위 타입들의 에러는 처리하지 않고 무시한다. (처리할 수 없음!)

 

[Exception]

이 타입이 프로그래머가 처리해야 할 예외 타입이다. 따라서 보통 '예외'라고 표현할 때 최고 클래스로는 Exception 클래스를 말한다. Throwable 클래스는 자식 클래스로 Error를 가지고 있기 때문에 예외의 최고 클래스로 표현하지 않는다.

 

 

 

예외는 크게 두 종류로 나뉜다.

컴파일러가 관여하지 않으면서 실행 시 예외가 발생할 수도, 발생하지 않을 수도 있는 예외를 [알려지지 않은 예외(Unchecked Exception)] 라고 하며, 컴파일러가 관여하는 예외는 [알려진 예외(Checked Exception)] 이라고 한다.

 

구분하는 방법은?

Exception 하위 클래스 중 RuntimeException이 있는데 해당 클래스의 자식 클래스들은 모두 알려지지 않은 예외이다.

나머지는 모두 알려진 예외이다!

 


여하튼 이런 예외는 발생되면 프로그램이 바로 종료된다. 그러나 '예외 처리'를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

 

예외 처리 해보기

1. 직접 처리

try{
	[예외가 발생할 만한 코드];
} catch(Exception e) {
	[예외가 발생하면 실행할 코드];
} finally {
	[예외 발생 유무와 상관 없이 반드시 실행되야 하는 코드];
    //이는 주로 닫기 문장이 들어간다. 본인의 직장에서는 주로 return이 들어가는 듯
}

 

2. 던지기 (throw)

public int TestFunc() throws Exception{
	[실행할 코드];
}

메소드 뒷부분에 throw 처리 할 예외 타입을 적어준다.

메소드가 실행되다가 예외를 만나면 메소드를 호출한 쪽으로 예외를 던진다.

 

 

3. 예외 객체 만들어서 처리하기

public static void main(String[] args) {
	try {
		throw new Exception("예외 발생");
	} catch(Exception e) {
		e.printStrackTrace();
	} finally {
		[꼭 실행되어야 하는 코드];
	}
}

 

3번은 봐도 잘 모르겠다. . . 고의 발생 예외 처리를 검색하면 나오는 듯.

다음 블로그에 자세한 설명이 있으니 참고해보자!

 

예외처리(exception handling)

목차

catsbi.oopy.io

 

Comments