지난번 상속(Inheritance)에 이어서
이번글에서는 예외 처리(Exception)에 대해서
알아보도록 하겠습니다.
자바에서 프로그램을 실행시키는 경우
에러(Error)가 발생할 경우에 프로그램 실행이
정지하게 됩니다.
프로그램 코드가 길어지고 여러 입력과 출력이 반복되는
과정이 생기면 오류가 발생할 확률이 높아지게 됩니다.
에러가 발생할 때마다 프로그램이 정지할 경우 에러가
발생한 후의 상황은 실행되지 않고 바로 프로그램이 정지하기
때문에 에러 이후 상황을 확인하려면 코드를 수정하고 다시 처음부터
확인을 해야 하는 번거로움이 생기게 됩니다.
따라서 에러가 발생할 가능성이 높은 코드는 미리 예외 처리를
통해서 발생하는 예외들을 처리하는 것이 가능합니다.
그럼 예외 처리에 대해서 좀 더 자세히 알아보겠습니다.
자바에서 예외 처리는 크게 두 가지로 가능합니다.
첫 번째는 try - catch 구문으로 처리하는 것이고
두 번째는 'throw' 키워드를 사용하는 것입니다.
예외처리 (Exception) - try & catch
try - catch 구문은 예외 처리가 필요한 부분을
try {} 괄호 안에 작성하고
catch(){} 괄호 안에 예외가 발생할 시에
실행할 코드를 작성하는 방식으로 작동합니다.
예시를 통해 더 자세히 알아보도록 하겠습니다.
예시로는 유저에게 입력을 받는 예시를 사용할 예정이며
따로 scanner클래스로 만들어놓은 In 메소드를 사용할
예정이라 보시는 분들께서는 Scanner 패키지를 import한 후에
코드를 작성해야 작동됨을 알려드립니다!
자 그럼 아래 코드를 살펴보겠습니다.
import java.util.InputMismatchException;
class TestException{
public static void main(String[] args){
int num;
while(true){
try{
System.out.println("Enter the number: ");
num = In.nextInt();
break;
// int 값이 성공적으로 입력되었을 경우에 while 반복문을
// 빠져나오기
}catch(InputMismatchException e){
System.out.println("Wrong input. Please enter the integer value");
In.nextInt();
// In.nextInt()를 작성하는 이유는
// 자바의 입력을 읽는 방법과 관련이 있습니다.
// 이에 관해서는 아래 링크의 글 내용 참고 부탁드립니다.
}
}
System.out.println("Entered number: " + num);
}
}
일단 위 글에서 catch 부분에서 In.nextInt()를 작성하는 이유에
대해서는 아래 링크의 글에 설명되어 있으니 참고 부탁드립니다!
https://jaythecode.tistory.com/12
자바(JAVA) 기초 함께 알아보자(12) - Scanner클래스 와 입력
지난글에서는 continue/break에 대해서 알아보았습니다.이번글에서는 Scanner클래스와 유저입력을 받는 방법에 대해서 알아보겠습니다. 자바를 사용하다보면 유저의 입력(input)을 받아야하는 상황이
jaythecode.tistory.com
우선 구조를 살펴보자면 이번 코드 같은 경우에 유저에게 input
즉 입력을 받는 구조이기 때문에 유저가 올바르지 않은 값을 입력할
가능성이 있습니다.
따라서 이런 경우에는 InputMismatchException이 발생하게 됩니다.
이와 같이 올바른 Exception을 import한 후에 catch 구문을 통해서
효과적으로 예외를 처리할 수 있습니다.
또 다른 흔히 일어나는 예외에 대해서 알아보겠습니다.
이제 소개해드릴 예외는 ArrayIndexOutOfBoundsException입니다.
이 exception은 배열에서 벗어난 index값이 입력되었을 때 발생하는 오류입니다.
아래 예시를 통해서 자세히 살펴보겠습니다.
class ArrayException{
pubilc static void main(String[] args){
try{
int[] numbers = {11, 22, 33, 44, 55};
int value = numbers[10];
// numbers의 길이가 5이기 때문에 numbers 배열에는
// 10의 인덱스를 가진 값이 존재하지 때문에 error가 발생합니다.
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Array Index Out Of Bounds: The index is out of bound");
}
}
}
위 코드를 살펴보면 numbers 배열의 길이는 5이고
그렇기 때문에 value에 numbers의 10의 인덱스값을 불러올 경우
index 범위를 벗어나기 때문에 exception이 발생하게 됩니다.
이때 이 exception을 ArrayIndexOutOfBoundsException을 통해
catch 구문으로 다루는 것이 가능합니다.
배열에서 index를 벗어나는 경우가 생각보다 흔하기 때문에
정확히 배열에서 index값을 지정해 주는 것이 아닌 경우에
유용하게 쓰일 수 있습니다.
그럼 마지막으로 try - catch 구문으로 여러 가지 exception을
다루는 방법을 알아보겠습니다.
이번 예시에서는 위에서 봤던 두 가지 exception이 나타나는 경우를
살펴보겠습니다.
import java.util.InputMismatchException;
class MultipleExceptions{
public static void main(String[] args){
int[] numbers = {11, 22, 33, 44, 55, 66};
System.out.println("Enter an index for array index: ");
int index = In.nextInt();
int value = numbers[index];
System.out.println("Entered Index: " + index);
System.out.println("Value: " + value);
}catch(InputMismatchException e){
System.out.println("Invalid input. Please enter a valid integer.");
In.nextLine();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Index out of range. Please enter a valid index");
}
}
위와 같이 catch 구문을 연달아 작성하면 try 부분에서 발생할 수 있는
다양한 예외들을 함께 처리하는 것이 가능합니다.
예외처리(Exception) - throw
지금까지 try - catch 안에서 예외처리하는 방법을
알아보았습니다.
이번에는 throw 키워드를 통해서 예외처리하는 방법을
알아보겠습니다.
아래 코드를 살펴보겠습니다.
class ThrowException{
public static void main(String[] args){
try{
System.out.println("How many apple do you want to add? ");
double amount = In.nextDouble();
// 음수값 집어넣으면 예외처리
if(amount <= 0){
throw new IllegalArgumentException("Please enter positive number!");
}
}catch(InputMismatchException e){
System.out.println("Invalid input. Please enter a valid number");
}catch(IllegalArgumentException e){
System.out.println("Error occurred: " + e.getMessage());
}
}
}
위에 코드에서 보는 것과 같이
만약 입력값이 음수이면 안 되는 상황이 있다면
throw new ~~ 를 통해서 원하는 조건에 따라 예외처리를
하는 것이 가능합니다.
여기서 사용한 IllegalArgumentException은 인스턴스 생성 시에
발생하는 예외를 처리합니다.
따라서 자세히 살펴보면 입력값이 음수인 인스턴스가 생성될 시에
예외를 발생시켜 입력값이 음수가 되는 것을 방지하는 것입니다.
지금까지 예외처리하는 방법에 대해서 알아보았습니다.
예외처리에는 위에서 보여드린 예시보다 더 다양한 예외들이 있으니
상황에 맞게 검색을 통해서 적절한 예외처리를 통해
프로그램이 정지하는 것을 방지하면서 효과적인 예외처리를 가능하게 하는
코드를 작성하시는 것을 추천드립니다!
다음 글에서는 상수(Constant)에 대해서 알아보도록 하겠습니다.
'자바(JAVA) 기초 함께 알아보자' 카테고리의 다른 글
자바(JAVA) 기초 함께 알아보자(22) - 열거형(Enumeration) (0) | 2025.01.14 |
---|---|
자바(JAVA) 기초 함께 알아보자(21) - 상수(Constant) / static (0) | 2025.01.08 |
자바(JAVA) 기초 함께 알아보자(19) - 상속(Inheritance) (0) | 2024.12.30 |
자바(JAVA) 기초 함께 알아보자(18) - HashMap (2) | 2024.12.29 |
자바(JAVA) 기초 함께 알아보자(17) - Array(배열)과 ArrayList의 차이 (2) | 2024.10.19 |