자바 프로그램 실행중에 발생하는 오류를 예외(Exception)라고 합니다. 예를들면 정수를 0으로 나누게 되면 ArithmeticException이 발생되어 프로그램이 강제 종료됩니다.
만약 이와같은 오류상황들이 프로그램 실행중에 발생할 가능성이 있다면, 이에 적절히 대응할 수 있는 코드를 작성해 주어야 합니다. 이때 사용하는 코드가 try-catch-finally문입니다.
이와 같이 프로그램 실행중 발생할 수 있는 오류상황에 대처하는 방법인 예외처리에 대해서 알아보도록 하겠습니다.
목차
예외처리란 프로그램 실행중에 발생하는 오류 즉, 예외(Exception)가 발생되었을 때, 프로그램이 강제종료되지 않고 정상 처리될 수 있도록 하는 방법을 말합니다.
예외처리를 위해서 사용되는 문법은 try-catch-finally문이며, 이중 catch문은 예외타입에 따라 여러개를 사용할 수 있습니다. 그리고 finally문은 필요하지 않을 경우 생략 할 수 있습니다.
1) 작성방법
try {
① 예외가 발생할 수 있는 코드;
} catch (발생할 수 있는 예외 타입) {
② 예외처리 코드;
} finally {
③ 예외와 상관없이 무조건 실행되는 코드;
}
2) 예외정보 메소드 : getMessage()와 printStackTrace()
예외가 발생되면 예외에 따른 예외객체가 생성됩니다. 그리고 이 객체에 속한 메소드를 통해 예외 정보에 접근할 수 있습니다. 대표적인 메소드로 getMessage()와 printStackTrace()가 있으며 catch문 안에서 사용됩니다.
(1) 예제코드
package com.study;
public class HelloWorld {
public static void main(String[] args) {
int num = 0;
int result = 0;
try {
result = 10 / num;
} catch(Exception e) {
e.printStackTrace();
System.out.println("예외발생내용: " + e.getMessage());
} finally {
System.out.println("finally: 무조건 실행 구문");
}
}
}
(2) 실행결과
java.lang.ArithmeticException: / by zero
at com.study.HelloWorld.main(HelloWorld.java:9)
예외발생내용: / by zero
finally: 무조건 실행 구문
Exception클래스의 상속도는 아래와 같습니다. 예외중에는 try-catch문으로 필히 처리해야 하는 예외과 그렇지 않은 예외가 있는데, try-catch문으로 꼭 처리해야 하는 예외를 checked예외, 그렇지 않은 예외를 unchecked 예외라고 합니다.
checked예외가 발생할 수 있는 코드의 경우 try-catch문으로 예외 처리를 해주지 않으면 컴파일시에 에러가 발생합니다.
RuntimeException 클래스와 그 하위클래스들은 모두 unchecked예외이며, 나머지 Exception클래스와 그 하위 클래스들은 checked예외에 속합니다.
Exception클래스의 상속도
프로그램 코드중 내가 임의로 예외상황을 발생시켜 처리하고 싶을 때는 Exception 객체를 생성후 throw 키워드를 통해 예외를 발생시킬수 있습니다.
throw new Exception("임의로 발생시킨 예외");
1) 예제코드
package com.study;
public class HelloWorld {
public static void main(String[] args) {
try {
throw new Exception("임의로 발생시킨 예외");
} catch(Exception e) {
e.printStackTrace();
System.out.println("예외발생내용: " + e.getMessage());
} finally {
System.out.println("finally: 무조건 실행 구문");
}
}
}
2) 실행결과
java.lang.Exception: 임의로 발생시킨 예외
at com.study.HelloWorld.main(HelloWorld.java:6)
예외발생내용: 임의로 발생시킨 예외
finally: 무조건 실행 구문
지금까지는 예외처리를 위해서 예외가 발생할 가능성이 있는 코드를 try-catch 문으로 감싸 처리를 하였습니다. 그런데 예외가 발생할 가능성이 있는 곳에서 직접 처리하지 않고, 해당구문이 속한 메소드를 호출하는 쪽에서 처리하게도 할 수 있습니다.
이렇게 호출한 쪽으로 예외를 던져버릴때 사용되는 키워드가 바로 throws 키워드입니다.
1) 예제코드
package com.study;
public class HelloWorld {
public static void main(String[] args) {
try {
myCalculator();
} catch(Exception e) {
e.printStackTrace();
System.out.println("예외발생내용: " + e.getMessage());
}
}
static public void myCalculator() throws Exception {
throw new Exception("임의로 발생시킨 예외");
}
}
try-catch문 처리를 myCalculator() 메소드안에서 처리해도 되지만, throws 키워드를 통해 해당 메소드를 호출한 곳에서 처리하도록 하였습니다.
2) 실행결과
java.lang.Exception: 임의로 발생시킨 예외
at com.study.HelloWorld.myCalculator(HelloWorld.java:14)
at com.study.HelloWorld.main(HelloWorld.java:6)
예외발생내용: 임의로 발생시킨 예외
[예외] 예외 던지기 (0) | 2023.03.23 |
---|---|
[예외] try catch (0) | 2023.03.22 |
[Object] 자바 객체복사2 (0) | 2023.03.22 |
[Object] 자바 객체복사 (0) | 2023.03.22 |
[object]객체 복사하기 (0) | 2023.03.22 |
댓글 영역