
💡 예외 처리란 무엇일까요?
예외 처리는 프로그램이 예상치 못한 문제에 부딪혔을 때, 멈추지 않고 똑똑하게 대처하는 방법이에요.
우리가 컴퓨터에게 어떤 일을 시켰는데, 그 일을 실행할 수 없는 상황이 생기는 것을 **예외(Exception)**라고 불러요.
🏠 쉬운 비유로 이해하기
예외 처리를 **'아주 중요한 심부름'**에 비유해 볼 수 있어요.
- 계획 (정상 동작):
- 엄마가 나에게 "냉장고에 있는 우유를 컵에 따라 마시렴." 하고 시키셨어요. (이것이 프로그램이 수행해야 할 일)
- 예외 발생 (문제가 생김):
- 내가 냉장고를 열어보니 우유가 없어요! 😱 (이것이 예외, Exception이에요. 컴퓨터에게는 '나누기'를 시켰는데 '0으로 나누기'를 하려는 상황과 같아요.)
- 예외 처리 (대처하는 방법):
- 처리 1 (멈추지 않고 대처): "어? 우유가 없네. 그럼 대신 주스를 마셔야겠다." 하고 다른 행동을 해요. (프로그램이 멈추지 않고 다른 코드를 실행하게 하는 것)
- 처리 2 (알려주기): "엄마! 우유가 없어요!" 하고 문제가 생겼다고 보고해요. (컴퓨터 화면에 '에러 메시지'를 출력하는 것)
자바의 예외 처리는 이처럼 문제가 생겼을 때 '멈춰!' 하고 프로그램이 강제로 끝나는 것을 막고, 대신 '이렇게 해!' 하고 다른 대비책을 마련해 두는 기술이랍니다.
📝 자바 예외 처리 예제: 0으로 나누기 방지
컴퓨터에서 어떤 숫자를 0으로 나누는 것은 수학적으로 불가능하기 때문에, 자바에서는 이런 상황을 **ArithmeticException**이라는 예외로 간주하고 프로그램이 강제로 멈추게 됩니다.
우리의 목표는 프로그램이 멈추지 않고, 사용자에게 "0으로 나눌 수 없다"는 친절한 메시지를 보여주는 '대비책'을 마련하는 것입니다.
1. 예외가 발생하는 상황 (예외 처리 X)
아래 코드는 예외를 처리하지 않아, ArithmeticException이 발생하면 프로그램이 즉시 멈춥니다.
Java
public class WithoutExceptionHandling {
public static void main(String[] args) {
int numerator = 10;
int denominator = 0; // 0으로 나누려는 문제가 되는 값
// 이 라인에서 ArithmeticException이 발생하며 프로그램이 멈춥니다.
int result = numerator / denominator;
// 이 코드는 실행되지 않습니다.
System.out.println("결과: " + result);
System.out.println("프로그램 종료.");
}
}
// 출력: (프로그램이 멈추면서 발생하는 에러 메시지)
// Exception in thread "main" java.lang.ArithmeticException: / by zero
2. 예외를 처리하는 상황 (예외 처리 O)
자바에서 예외를 처리하는 가장 기본적인 방법은 try-catch 블록을 사용하는 것입니다.
- try: 문제가 발생할 가능성이 있는 코드를 이 안에 넣습니다.
- catch: try 블록 안에서 특정 예외(ArithmeticException)가 발생했을 때, 프로그램이 멈추지 않고 대신 실행할 대비책 코드를 이 안에 넣습니다.
Java
public class WithExceptionHandling {
public static void main(String[] args) {
int numerator = 10;
int denominator = 0;
// 💡 문제가 생길 수 있는 코드를 'try'로 감쌉니다.
try {
int result = numerator / denominator;
System.out.println("결과: " + result);
}
// 💡 'ArithmeticException'이 발생하면 아래의 'catch' 블록이 실행됩니다.
catch (ArithmeticException e) {
// 프로그램이 멈추지 않고, 사용자에게 친절한 안내 메시지를 출력합니다.
System.err.println("❌ 에러 발생: 숫자를 0으로 나눌 수 없습니다.");
System.err.println("--- 대신 수행할 대처 코드 실행 ---");
}
// 예외가 발생했더라도 catch 블록 덕분에 이 코드는 계속 실행됩니다.
System.out.println("✅ 프로그램 정상 종료.");
}
}
// 출력:
// ❌ 에러 발생: 숫자를 0으로 나눌 수 없습니다.
// --- 대신 수행할 대처 코드 실행 ---
// ✅ 프로그램 정상 종료.
🎯 예제 결과 분석
| 구분 | 예외 발생 (처리 X) | 예외 처리 (처리 O) |
| 결과 | ArithmeticException이 발생하며 프로그램이 강제 종료됩니다. | catch 블록이 실행되며 프로그램이 정상 종료됩니다. |
| 코드 | System.out.println("프로그램 종료.") 부분이 실행되지 않음 | System.out.println("✅ 프로그램 정상 종료.") 부분이 실행됨 |
이처럼 예외 처리는 예상치 못한 상황에서도 프로그램이 사용자의 의도대로 작동을 멈추지 않고 다음 단계를 진행하게 하는 안전망 역할을 합니다.
예제1)
public class Main {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
}
}
}
예제2)
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[10]); // ArrayIndexOutOfBoundsException
int result = 10 / 0; // ArithmeticException
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array index does not exist.");
}
catch (ArithmeticException e) {
System.out.println("Cannot divide by zero.");
}
catch (Exception e) {
System.out.println("Something else went wrong.");
}
}
}'Java_language' 카테고리의 다른 글
| 간단한 은행 계좌 관리 시스템 구현 (1) | 2025.12.05 |
|---|---|
| 간단한 자바 성적 관리 프로그램 (0) | 2025.12.05 |
| 인터페이스란 무엇일까요? (0) | 2025.12.03 |
| 추상화란 (0) | 2025.12.03 |
| 오버라이딩 (Overriding) (0) | 2025.12.03 |