#025. Exception (예외처리) 알아보기...
1. Exception (예외처리) 을 알아보기 전에 Error(오류)에 대해서 먼저 알아보자.
Java 만이 아니라 program 에서 오류의 종류는 두 가지가 있다. 컴파일 중 오류와 런타임 중 오류로 나눠진다. 컴파일 중 오류는 컴파일러가 문법오류 등을 체크해준다. 런타임 중 오류는 100% 개발자가 코딩을 잘못해서 나오는 오류를 말한다.
테스트를 위해 io 패키지를 만들고, ExceptionDemo 클래스 파일을 만들어 보자.
1) 컴파일 중 오류 : 문법 오류 등을 체크함.
코드 | package io;
public class ExceptionDemo { public static void main(String[] args) { // 컴파일 중 오류 int i = "김동혁"; } } |
설명 | 문장6: 정수형 변수 i 에 문자열을 집어 넣으려고 하니 빨간색 밑줄이 그어지며, 컴파일이 안된다. |
2) 런타임 중 오류 : 100% 개발자 실수.
코드 | package io;
public class ExceptionDemo { public static void main(String[] args) { // 컴파일 중 오류 // int i = "김동혁";
// 런타임 중 오류 Integer[] ii = new Integer[5]; ii[-1] = 100; } } |
설명 | 문장9: wrapper class Integer 로 배열 5개짜리 객체 ii 를 생성했다. 문장10: array index 에 -(음수)가 오면 컴파일 중엔 알 수가 없으며, 런타임(실행)중에 오류를 발생한다. Console 창을 보면 ArrayIndexOutOfBoundsException 이 발생 되는 것을 확인 할 수 있다. |
2. 이제 Exception (예외처리) 에 대해서 알아보자.
Exception 은 checked Exception 과 unchecked Exception 이 존재를 한다.
1) checked Exception 은 대표적인 클래스로 IO로 예를 들어보자. IO는 Input / Output 의 약자로 입출력을 말한다. File 처리할 때, Network 처리할 때, 역시 IO 클래스를 사용한다. Network으로 채팅을 하고 있을 때, 인터넷이 끊기거나 하면, 프로그램이 오류를 발생하고 종료된다. 또한, 파일의 내용을 확인하려 할 때, 경로가 잘못되어 접근할 수 없을 경우 역시 오류를 발생하고 프로그램이 종료된다. 그렇기 때문에 IO는 exception 을 필히 입력해야 한다. 입력하지 않는다면, 컴파일러가 컴파일을 하지 않고 빨간색 밑줄이 그어 질것이다.
2) unchecked Exception 은 본문1-2)에서 봤듯이 Array 의 index가 잘못 되었을 때, 예외처리를 해줘야 한다. 개발자의 실수 이고, 발생하지 않아야 하는 곳에서 발생되기 때문에 컴파일러가 신경을 쓰지는 않는다. 이런 경우는 개발자가 신경을 써서 예외처리를 해야 한다. |
1) checked Exception : 컴파일러가 예외처리를 알려준다..
코드 | package io; import java.io.FileInputStream; public class ExceptionDemo { public static void main(String[] args) { FileInputStream fis = new FileInputStream("C:/Hello.java"); } } |
설명 | 문장2: FileInputStream 을 사용하려면 java.io.FileInputStrem 를 추가해야 한다. 문장7: C:/Hello.java 파일이 존재하지 않을 수 있기 때문에 컴파일러가 예외처리를 알려준다. |
2) checked Exception : 예외처리 방법..
코드 | package io; import java.io.FileInputStream; import java.io.FileNotFoundException; public class ExceptionDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("C:/Hello.java"); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } } } |
결과 | C:\Hello.java (지정된 파일을 찾을 수 없습니다) |
설명 | 문장3: FileNotFoundException 을 사용하기 위해서는 문장3을 작성해야 한다. 문장6~10: 예외처리 하는 방법이다. try { 구현 } catch (예외종류) { 오류발생시내용 } 으로 사용을 한다. 문장9: 오류 내용을 출력하고 있다. 결과는 JVM 이 런타임 중에 이미 지정된 해당 오류 내용을 보여주고 있다. |
3) unchecked Exception : 예외처리 방법..
코드 | package io; import java.io.FileInputStream; import java.io.FileNotFoundException; public class ExceptionDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("C:/Hello.java"); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } try { Integer[] ii = new Integer[5]; ii[-1] = 100; } catch (Exception e) { System.out.println(e.getMessage()); } } } |
결과 | C:\Hello.java (지정된 파일을 찾을 수 없습니다) -1 |
설명 | 문장11~16: 내용만 추가 되었다. 본문1-2)에서 봤던 런타임 오류 시에 개발자가 임의로 예외를 처리 하는 모습이다. 결과를 보면 -1 이라고 내용이 출력되고 본문1-2)에서의 결과와는 다른 모습으로 보이는 것을 알 수가 있다. |
프로그램에서 예외처리를 하지 않으면, 프로그램이 에러를 발생하고 종료를 하게 된다. unchecked Exception 은 개발자가 신경 써서 수를 줄이면 좋겠고, checked Excption 은 컴파일러가 알려주면 작성하면 되겠다.
다음시간엔 oop 의 마지막 I/O Stream 에 대해서 알아보겠다..
잡담. 오늘 알아본 exception 은 내용이 긴데.. 설명은 간단하네요^^; 오늘도 화이팅!!
'Developer > Java-oop' 카테고리의 다른 글
#027. FileInputStream / FileOutputStream 알아보기... (2) | 2011.04.17 |
---|---|
#026. I/O Stream 알아보기... (0) | 2011.04.14 |
#024. Interface Iterator<E> 알아보기... (0) | 2011.04.12 |
#023. Collection HashMap<K,V> 알아보기... (0) | 2011.04.11 |
#022. Collection ArrayList<E> 알아보기... (0) | 2011.04.10 |