예외, 에러 종류 (Error, Exception, RuntimeException)

✅ 이것만은 꼭 정리해놓자!

예외 다루는 방법 (try, catch)

우리는 웹 페이지나 모바일 애플리케이션을 만들어서 사용자들에게 제공했을 때, 사용자들은 정말 기상천외한 방법들로 예상을 벗어나는 액션을 취한다. 예를 들면, 분명 회원가입 창에서 휴대폰 번호 입력 칸에 01011112222와 같이 숫자만 입력하라고 설명을 해놔도, 사용자들은 010-1111-2222와 같이 숫자와 문자를 같이 입력하는 사람들이 꼭 1명씩은 있다.

이걸 개발자가 잘 처리하지 않으면, 예상치 못한 에러를 발생시켜 프로그램이 종료되거나 데이터가 이상하게 잘못 저장된다. 이 때문에 코드를 짤 때는 예외처리가 아주 중요하다. 아래 예시를 통해 어떻게 예외를 처리할 수 있는 지 알아보자.

public class Main {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (true) {
      System.out.println("숫자를 입력하세요.");
      int input = scanner.nextInt();
      System.out.println(5 / input); // 특정 숫자를 0으로 나누면 Exception이 발생한다.
    }
  }
}

Untitled

위 코드를 실행해서 0을 입력하는 순간 ArithmeticException이 발생하는 걸 눈으로 확인할 수 있다. 하지만 while문이 있음에도 불구하고 프로그램이 종료되어 버린다. 왜냐하면 0으로 나눈다는 건 잘못된 계산 방법이기 때문이다. 그래서 프로그램 자체를 종료시켜버린다.

여기서 우린 ArithmeticException이 발생할 때, 0으로 숫자를 나눌 수 없습니다.라고 출력함으로써 프로그램이 종료되지 않고 사용자에게 다시 값을 받고 싶을 수도 있다. 이 때, 우리는 try-catch문을 사용해서 예외처리를 할 수 있다.

Scanner scanner = new Scanner(System.in);
while (true) {
  System.out.println("숫자를 입력하세요.");
  int input = scanner.nextInt();
  **try {**
    System.out.println(5 / input); // 특정 숫자를 0으로 나누면 Exception이 발생한다.
  **} catch (ArithmeticException e) {**
    System.out.println("0으로 숫자를 나눌 수 없습니다.");
  **}**
}

Untitled

이번엔 다른 요구사항을 처리해보자. ArithmeticException이 발생할 때, 에러 메시지 : __________라고 출력함으로써 프로그램이 종료되지 않고 사용자에게 다시 값을 받을 수 있게 만들어보자.

Scanner scanner = new Scanner(System.in);
  while (true) {
    System.out.println("숫자를 입력하세요.");
    int input = scanner.nextInt();
    **try {**
      System.out.println(5 / input); // 특정 숫자를 0으로 나누면 Exception이 발생한다.
    **} catch (ArithmeticException e) {**
      **System.out.println("에러 메시지 : " + e.getMessage());**
    **}**
  }
}

Untitled

✅ 이것만은 꼭 정리해놓자!