코드작업을 하다보면 많은 오류를 접할 수 있다.
그 오류들의 대부분이 컴파일 오류, 실행오류이다.
컴파일 오류 (Compile Error)
: 프로그램 코드 작성 중 발생하는 문법적 오류
실행오류 (Runtime Error)
: 실행 중인 프로그램이 의도하지 않은 동작을 하거나 프로그램이 중지되는 오류
실행오류는 비정상 종료가 되는 경우 시스템의 심각한 장애를 불러올 수 있다.
이 때 예외처리를 통해서 비정상적인 종료를 피해 시스템이 원활이 실행되도록 할 수 있다.
어떤 오류가 발생하는지 log를 남겨놓는다면 추후에 오류를 찾아내 수정하기가 용이하다.
에러와 오류의 차이점
에러 (Error)
: 가상머신에서 발생해 프로그래머가 처리할 수 없는 물리적 한계를 가진 오류이다.
동적 메모리가 없는 경우, 스택 메모리 오버플로우 등과 같은 상황에 발생한다.
예외 (Exception)
: 프로그램 내에서 제어할 수 있는 오류로,
읽어 들이려는 파일이 존재하지 않거나, 네트워크나 DB에 연결되지 않는 경우 등과 같은 상황에 발생한다.
예외클래스들
모든 예외 클래스의 최상위 클래스는 Exception 클래스이다.
하위 클래스로
- IOException : 입출력 예외처리
- RuntimeException : 실행 오류 예외처리
가 존재하고
또 하위 클래스로
- FileNotFoundException : 파일이 지정된 위치에 존재하지 않은 경우
- ArrayIndexOutOfBoundsException : 배열의 크기를 넘어선 위치를 참조하려는 경우
- NullPointException : 초기화 되지 않은 Object를 사용하는 경우
- ArithmethicException : 정수를 0으로 나눈 경우 발생
등이 존재한다.
어떤 오류일지 모르는 상황에는 Exception으로 예외처리를 해주면 된다.
예외처리를 하는 방법
- try-catch 문
try{
오류가 날 수도 있는 문장;
}catch(예외타입1 e1){
오류 발생 시 실행할 문장;
}catch(예외타입2 e2){
오류 발생 시 실행할 문장;
}...
catch를 한 개 이상 적용할 수 있다.
- try-catch-finally
try{
오류가 날 수도 있는 문장;
}catch(예외타입 e){
오류 발생 시 실행할 문장;
}finally{
오류 발생 여부에 상관없이 무조건 실행할 문장;
}
예제코드
public class ExceptionEx1{
public static void main(Stirng[] args){
int[] arr = {1,2,3,4,5};
for(int i=0; i<10; i++){
System.out.println(arr[i]);
}
}
}
int 형 배열에 0~4까지 5개의 데이터를 넣어놨는데,
for문으로 배열의 데이터들을 출력하는 과정에서 가끔 인덱스 값을 확인하지 못하고 실행하는 경우가 있다.
이 때, 우리는 java.lang.ArrayIndexOutOfBoundsException 이라는 오류를 만날 수 있다.
이 오류는 컴파일 시점에는 오류인지 몰랐다가
run 을 해봐야 실행오류인지 알 수 있다.
또 오류를 만나면 실행이 그 순간 중단되어서 이후의 코드들은 실행되지 않는다.
이럴때 예외처리를 해 준 다면 어떻게 되는지 확인해 보겠다.
public class ExceptionEx1{
public static void main(Stirng[] args){
int[] arr = {1,2,3,4,5};
try{
for(int i=0; i<10; i++){
System.out.println(arr[i]);
}
}catch(ArrayIndexOutOfBoundsException e){
System.out.println(e);
}
System.out.println("여기가 실행이 될까요?");
}
}
try-catch문으로 예외처리를 해 주었고,
예외처리 이후의 코드들이 실행되는지 확인하기 위해서 테스트문구를 출력하는 코드를 넣었다.
결과는 발생한 오류를 출력한 뒤 중단되지 않고 이후의 코드가 실행되는 것을 확인할 수 있었다.
'Back-End > Java' 카테고리의 다른 글
[Back-End][Java] 37. 제네릭(Generic) 프로그래밍 (1) (0) | 2021.09.26 |
---|---|
[Back-End][Java] 36. Object 클래스 (0) | 2021.09.24 |
[Back-End][Java] 34. 익명클래스 Annoymous Inner Class (0) | 2021.09.23 |
[Back-End][Java] 33. 내부 클래스 Inner Class (0) | 2021.09.16 |
[Back-End][Java] 32. 인터페이스 Interface (0) | 2021.09.14 |