[JAVA] 예외처리
예외처리
자바를 실행하다보면 갑자기 프로그램이 종료되거나, 어떤 원인에 의해 잘못 동작하여 오류 메세지가 나타나는 등 예기치 못한 오류가 발생한다.
전자는 개발자가 해결할 수 없는 시스템에러가 발생해서 종료된 경우
후자는 프로그램 사용 중 발생한 오류를 개발자가 처리해서 메세지가 출력된 경우
1. 에러(Error)
시스템에 비정상적 상황이 생겼을 때 발생. 외부요인일수도 있고 프로그램 구동중 발생하는 치명적 오류일 수 있다. 이러한 에러는 개발자가 예측하거나 처리할 수 없는 영역
OutOfMemoryError : 프로그램 실행중 메모리 부족(컴퓨터 자체메모리)
IOError : 입출력 에러
StackOverFlowError : 가용 메모리 부족(무한루프나 함수의 재귀호출(함수안에서 본인호출)이 일어날때)
2. 예외(Exception)
대체로 프로그램 구동 중 나타나는 오류. 문법적으로는 문제가 없어보이지만 실제 운영중에 생길 수 있는 문제. 체크예외와 비체크예외 두 경우로 나뉜다.
체크예외 : 자바 소스를 컴파일하는 과정에서 검사o, 문법적으로 강제로 예외처리 해야하는 경우
IOException
SQL Exception
비체크예외 : 컴파일 과정에서 검사x, 그렇기 때문에 사용자의 경험이나 테스트로 찾아야하는 경우
NullPointerException
IndexOutOfBoundException
ClassNotFoundException
...
NullPointerException : 가장 빈번하게 발생하며 객체가 제대로 생성되지 않은(메모리에 잡혀있지않은) 상태에서 사용하는 경우 발생
String[ ] strArray = null; //배열을 만들기만 하고 생성하지 않음
System.out.println("strArray[0] : "+strArray[0]); //생성되지 않은 배열을 출력하려고 함 -> 오류
NumberFormatException : 잘못된 문자열을 숫자로 형변환할 때 발생 (ex. 숫자형태 문자열"111"은 정수타입으로 변환가능하지만 실수형태문자열"11.11"은 정수타입으로 변환불가)
String str01 = "11";
String str02 = "11.11";
//정수형태 문자열을 정수로 변환
int num01 = Integer.parseInt(str01);
System.out.println("String to int : "+num01); //11
//실수형태 문자열을 정수로 변환
int num02 = Integer.parseInt(str02);
System.out.println("String to int : "+num02); //오류
//실수형태 문자열을 실수로 변환
float num03 = Float.parseFloat(str02);
System.out.println("String to float : "+num03); //11.11
ArrayIndexOutOfBoundsException : 배열에서 index 범위를 초과해서 사용할 때 발생
int[ ] arr = { 1, 6, 9, 7, 10 };
System.out.println(arr[5]); //오류
ArithmeticException : 정수를 0으로 나누려고할 때 발생
int x = 10;
int result = 0;
result = x/0; //오류