JAVA 예외처리(Exception Handling)

박승현·2022년 3월 27일
0

JAVA

목록 보기
14/16

예외(Exception)란?

프로그램을 작동시킬 때 종종 예기치 못한 상황을 만나게 된다. 이런 상황들은 처음에 프로그램을 만든 프로그래머가 의도한 상황이 아니기 때문에 프로그램 실행 전체에 악영향을 끼칠 수 있다. 이러한 상황 중에서 개발자가 조치할 수 없는 수준의 오류를 에러, 수습될 수 있는 비교적 덜 심각한 오류를 예외라고 한다.

에러 : 개발자가 조치를 취할 수 없는 수준
컴파일 에러 : 컴파일 시에 발생하는 에러
런타임 에러 : 프로그램이 실행하는 도중에 발생하는 에러
로직 에러 : 실행은 되지만 의도와는 다르게 동작하는 에러
예외 : 다른 방식으로 처리 가능한 오류

예외 처리란?

예외가 발생했을 때 이를 적절히 처리하여 프로그램이 비정상적으로 종료되는 것을 막는 방법이다.

try - catch / finally

try - catch문

try문에는 예외가 발생할 수 있는 문장을 넣고 catch문에는 예외가 발생할 경우의 처리방법을 작성한다.

try{
	//예외 발생할 가능성이 있는 문장들
} catch(예외 1){
	//예외 1에 알맞은 처리
} catch(예외 2){
	//예외 2에 알맞은 처리
}

try문으로는 예외가 발생할 가능성이 있는 문장들을 중괄호로 묶어 준다. 그리고 catch문의 소괄호()에는 발생할 가능성이 있는 예외 클래스의 종류와 참조변수를 적어주고 중괄호 {}안에는 예외가 발생했을 때 실행해야 할 코드들을 작성한다. 만약 발생할 예외의 수가 많다면 복수의 catch문을 사용할 수도 있다.

public class Exception1 {

	public static void main(String[] args) {
		try {
			int[] a = {2,0};
			int b = 4;
			int c = b/a[2];
			System.out.println(c);
		} catch(ArithmeticException e) {
			System.out.println("산술 오류발생");
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("배열 길이 오류발생");
		}
		
		System.out.println("예외 처리 공부 ");
	}

}
// 실행결과
// 배열 길이 오류발생
// 예외 처리 공부

fianlly문

try - catch 문에 선택적으로 finally라는 구문을 추가한다. try구문 내부에서 오류가 발생하든 하지 않든 간에 상관없이 무조건 실행되는 구문이다.

public class Exception1 {

	public static void main(String[] args) {
	
		int a = 0;
		int b = 2;
		try {
			System.out.println("외부로 접속");
			int c = b / a;
		} catch(ArithmeticException e) {
			System.out.println("오류가 발생했습니다.");
		} finally {
			System.out.println("무조건 연결 해제");
		}
	}

}
/*
실행결과
외부로 접속
오류가 발생했습니다.
무조건 연결 해제
*/

예외 발생 throw

프로그래머가 고의로 예외를 발생시킬 수도 있다. 예외 클래스의 인스턴스를 생성한 다음 키워드 throw를 이용하면 직접 예외를 발생시킬 수 있다.

Exception e = new Exception("Exception");
throw e; // 예외 발생
public class Exception1 {

	public static void main(String[] args) {
	
		try {
			Exception e = new Exception("고의 예외");
			throw e;
		} catch(Exception e) {
			System.out.println("예외 발생");
			System.out.println(e.getMessage());
		}
	}
}
/*
실행결과
예외발생
고의예외
*/

예외 던지기(throws)

예외 던지기란 예외가 발생했을 경우 현재 메서드가 예외를 처리하지 않고 자신을 호출한 쪽으로 예외 처리에 대한 책임을 넘기는 것이다.

void method() throws Exception{
	//생략
}

다음은 try문 내부에 다른 try-catch문을 넣은 구조 속에서 예외가 어떻게 처리되는지 알아보는 코드이다.

public class Exception1 {

	public static void main(String[] args) {
		try {
			System.out.println("외부 try...");
			
			try {
				System.out.println("내부 try...");
				Exception e = new Exception();
				throw e;
			}
			catch(Exception e) {
				System.out.println("(내부 try-catch) exception : " + e);
				System.out.println("예외 던지기 한번더 : ");
				throw e;
			}
			finally {
				System.out.println("finally 구문출력");
			}
		}
		catch(Exception e) {
			System.out.println("(외부 try-catch) Catch exception : " + e);
		}
		System.out.println("종료");
	}

}
/*
실행결과
외부 try...
내부 try...
(내부 try-catch) exception : java.lang.Exception
예외 던지기 한번더 : 
finally 구문출력
(외부 try-catch) Catch exception : java.lang.Exception
종료
*/
profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글

관련 채용 정보