본문 바로가기
Back-End/Java

[Back-End][Java] 35. 예외처리 (Exception) - try/catch

by nanee_ 2021. 9. 23.
728x90
반응형
SMALL

코드작업을 하다보면 많은 오류를 접할 수 있다.

그 오류들의 대부분이 컴파일 오류, 실행오류이다.

 

컴파일 오류 (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문으로 예외처리를 해 주었고,

예외처리 이후의 코드들이 실행되는지 확인하기 위해서 테스트문구를 출력하는 코드를 넣었다.

 

결과는 발생한 오류를 출력한 뒤 중단되지 않고 이후의 코드가 실행되는 것을 확인할 수 있었다.

 

 

 

 

 

 

728x90
반응형
LIST