이전 걸음에서는 파일 입출력에 대해서 같이 공부를 했습니다. 이번에는 Java를 공부하면 꼭 알아두어야 할 내용을 같이 공부를 하려고 합니다. 오늘 내용은 실행이나 동작에 영향을 주기 보다는 프로그램 소스의 질을 향상을 시키고 문제 해결에 도움이 될 수 있습니다.
예외 처리에 대해서 이번 걸음에서 같이 보도록 하겠습니다. 예외 처리는 문제가 발생하지 않는 프로그램 소스라면 필요가 없지만 사람이 개발을 하면 기능에 문제가 발생을 할 수 있습니다. 그때 예외 처리를 사용을 하면 프로그램의 소스의 질이 향상이 될 수 있습니다.
예외 처리가 무엇 인지와 예외 처리를 사용하는 방법을 이번 걸음에서 같이 함께 이야기 할 예정입니다. 또한 예외 처리의 예제 소스를 통해서 직접 확인을 하고 결과에 대해서 공부를 할 예정입니다. 이번 걸음을 통해서 예외 처리에 대해서 완벽하게 이해를 하실 수 있습니다.
예외 처리란?
예외 처리는 프로그램 기능을 동작을 할 때 문제가 생기면 그 문제를 처리해주는 방법이나 명령을 지정 함으로써 문제를 처리 할 수 있게 됩니다. 이렇게 미리 생길 문제를 미리 정리와 분기 또는 방법을 선언을 한다면 추후에 진짜 문제가 생기게 되면 문제의 해결이 빨라지게 됩니다.
예외 처리 사용 방법
예외를 처리를 하는 방식에는 2가지 방법이 있습니다.
try ~ catch
try~catch 방식은 우선 try에 시도할 명령문을 넣어서 실행을 하고 그 명령을 실행을 할 때 문제가 생기는 것에 대해서 catch로 정의를 함으로써 문제가 생기는 예외에 대한 처리를 미리 해두면 됩니다.
try{
동작할 명령어
}catch(예외처리 클래스){
예외처리 발생시 동작할 로직
}
catch(예외처리 클래스){
예외처리 발생시 동작할 로직
}
finally{
최종적으로 불리는 명령어
}
예외처리 클래스는 미리 자바에서 Exception이 있고 그 Exception을 상속을 받는 특정 예외 class를 넣어주면 됩니다.
※ catch로 끝낼 수도 있지만 마지막 무조건 호출을 해야 할 명령문이 있다면 try~catch의 제일 하단에 finally을 넣어서 사용을 하면 됩니다.
2. throws
throws는 예외 상황에 대해 어떻게 동작을 할지 정의를 하지 않고 Method 선언 부에 Exception class 또는 그 자식 class를 넣어 줌으로써 그 Method에서 예외가 발생하면 예외의 기본적인 내용이 호출되고 종료가 되도록 합니다.
예)int main(String[] args) throws IOException 이와 같이 정의를 하게 됩니다.
예외 처리 예제
public class ExceptionTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int num = 0;
int flag = 0;
while(flag == 0) {
flag = 1;
try {
System.out.print("숫자 입력 = ");
num = sc.nextInt();
System.out.println("입력 받은 숫자는 = "+num);
}
catch(InputMismatchException e) {
flag = 0;
sc.nextLine();
System.out.println("정상적인 숫자를 입력하세요.");
}
}
}
}
위 예제와 같이 try~catch를 사용을 하면 숫자만 입력을 원할 때 유용하게 사용을 할 수 있습니다. 문자가 입력이 되면 계속 다시 입력을 유도해서 숫자 입력을 할 때까지 동작을 하게 됩니다. try~catch의 사용한 예제 소스를 참고를 해주세요.
import java.io.FileReader;
public class ExceptionTest2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FileReader file= new FileReader("a.txt");
int i;
while((i = file.read()) != -1) {
System.out.print((char) i);
}
file.close();
}
}
위의 예제를 보면 throws를 사용하여 예외에 대한 처리를 하고 프로그램을 실행을 하면 파일이 존재하지 않기 때문에 에러가 발생하고 프로그램이 종료가 되게 됩니다.