Error
, Exception
, RuntimeException
차이우리는 웹 페이지나 모바일 애플리케이션을 만들어서 사용자들에게 제공했을 때, 사용자들은 정말 기상천외한 방법들로 예상을 벗어나는 액션을 취한다. 예를 들면, 분명 회원가입 창에서 휴대폰 번호 입력 칸에 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이 발생한다.
}
}
}
위 코드를 실행해서 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으로 숫자를 나눌 수 없습니다.");
**}**
}
이번엔 다른 요구사항을 처리해보자. 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());**
**}**
}
}
try
, catch
문법