이전 걸음에서는 파일 입출력에 대해서 같이 공부를 했습니다. 이번에는 Java를 공부하면 꼭 알아두어야 할 내용을 같이 공부를 하려고 합니다. 오늘 내용은 실행이나 동작에 영향을 주기 보다는 프로그램 소스의 질을 향상을 시키고 문제 해결에 도움이 될 수 있습니다.
예외 처리에 대해서 이번 걸음에서 같이 보도록 하겠습니다. 예외 처리는 문제가 발생하지 않는 프로그램 소스라면 필요가 없지만 사람이 개발을 하면 기능에 문제가 발생을 할 수 있습니다. 그때 예외 처리를 사용을 하면 프로그램의 소스의 질이 향상이 될 수 있습니다.
예외 처리가 무엇 인지와 예외 처리를 사용하는 방법을 이번 걸음에서 같이 함께 이야기 할 예정입니다. 또한 예외 처리의 예제 소스를 통해서 직접 확인을 하고 결과에 대해서 공부를 할 예정입니다. 이번 걸음을 통해서 예외 처리에 대해서 완벽하게 이해를 하실 수 있습니다.
예외 처리는 프로그램 기능을 동작을 할 때 문제가 생기면 그 문제를 처리해주는 방법이나 명령을 지정 함으로써 문제를 처리 할 수 있게 됩니다. 이렇게 미리 생길 문제를 미리 정리와 분기 또는 방법을 선언을 한다면 추후에 진짜 문제가 생기게 되면 문제의 해결이 빨라지게 됩니다.
예외를 처리를 하는 방식에는 2가지 방법이 있습니다.
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를 사용하여 예외에 대한 처리를 하고 프로그램을 실행을 하면 파일이 존재하지 않기 때문에 에러가 발생하고 프로그램이 종료가 되게 됩니다.