예외 : 잘못된 값이나 의도 외의 행위에 의한 문제
개발자에게 있어 예외란 개발자의 의도 외의 동작에 의한 이상 현상을 의미한다.
자체적인 동작은 조건문 if 와 유사하지만,
조건문 if의 경우 오류를 유발할 수 있는 값과 정상 값의 구별이 어렵다.
구별이 불가능한 건 아니지만, 개발자 본인이 예외를 상정하고 추가적인 조건을 추가해야 할 필요가 있고, 예외를 상정한 조건을 추가하지 못한 경우, 해당 조건에 의해 오류가 발생 할 수 있다.
하지만 예외 처리의 경우 개발자 본인이 상정하지 못한 경우의 예외 상황에 대해서도 예외의 전달이 가능하다.
try, catch, finally 로 구성 되어 있으며, 각각
try : 예외 처리 구간
catch : try 에서 발생한 예외에 따른 처리
finally : 예외 발생 여부 상관없이 반드시 실행됨
①try 에서 예외 발생 시, ①try에서 발생한 예외의 종류에 따라 각 ②catch 문에서 지정한 동작을 수행, 마지막으로 ③finally 문에 지정한 동작을 무조건 수행한다
try 블록과 catch 문의 블록 사이에는 if 문 처럼 다수의 catch문 블록을 작성할 수 있으며, 각 catch문에 대한 각 오류의 종류 또한 다양하게 설정할 수 있다.
예외 클래스의 종류
NullPointerException : 객체 참조가 없는 상태
ArrayIndexOutOfBoundsException : 배열 인덱스 초과
NumberFormatException : 문자열의 숫자 변환 시 변환 불가 할 경우
ClassCastException : 상하위 클래스 타입 변환이 아닌 경우 발생
Exception : 모든 예외에 대한 처리일 경우
예제)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import java.util.Scanner; public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub try { int i = 0; System.out.print("what val : "); Scanner instrScanner = new Scanner(System.in); i = instrScanner.nextInt(); // 오류 유발 가능 : 0~4 이외의 값 입력시 int[] numbers = {1,2,3,4,5}; System.out.println("val : " + numbers[i]); }catch (ArrayIndexOutOfBoundsException e) { System.out.println("error : "+e.getMessage()); // index 초과 범위 호출 }catch (Exception e) { System.out.println("error : "+e.getMessage()); // 모든 오류 }finally { System.out.println("complete"); } } } | cs |

댓글
댓글 쓰기