본문 바로가기
Java_language

💡 예외 처리란 무엇일까요?

by 헬로제이콥 2025. 12. 5.

💡 예외 처리란 무엇일까요?

예외 처리는 프로그램이 예상치 못한 문제에 부딪혔을 때, 멈추지 않고 똑똑하게 대처하는 방법이에요.

우리가 컴퓨터에게 어떤 일을 시켰는데, 그 일을 실행할 수 없는 상황이 생기는 것을 **예외(Exception)**라고 불러요.

🏠 쉬운 비유로 이해하기

예외 처리를 **'아주 중요한 심부름'**에 비유해 볼 수 있어요.

  1. 계획 (정상 동작):
    •   엄마가 나에게 "냉장고에 있는 우유를 컵에 따라 마시렴." 하고 시키셨어요. (이것이 프로그램이 수행해야 할 일)
  2. 예외 발생 (문제가 생김):
    •   내가 냉장고를 열어보니 우유가 없어요! 😱 (이것이 예외, Exception이에요. 컴퓨터에게는 '나누기'를 시켰는데 '0으로 나누기'를 하려는 상황과 같아요.)
  3. 예외 처리 (대처하는 방법):
    •   처리 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