IMCAT.DEV
로그인 가입
Java 입문 문법

Java 예외 처리 기초

Java 예외 처리 기초 — 초급

예외 처리 기초

1. 도입 (왜 배워야 하는가)

프로그래밍에서 예외 처리는 매우 중요한 주제입니다. 예외는 프로그램 실행 중 발생할 수 있는 오류나 비정상적인 상황을 의미하며, 이를 적절히 처리하지 않으면 프로그램이 예기치 않게 종료되거나 잘못된 결과를 초래할 수 있습니다. 실무에서는 사용자에게 신뢰할 수 있는 서비스를 제공하기 위해 예외 처리를 통해 오류를 예방하고, 발생한 오류에 대해 적절한 조치를 취해야 합니다. 만약 예외 처리를 소홀히 한다면, 예를 들어 쇼핑몰 애플리케이션에서 결제 과정에서 문제가 발생했을 때 사용자에게 불편을 끼치고, 이는 직접적인 매출 손실로 이어질 수 있습니다.

2. 핵심 개념 설명

예외 처리의 기본 개념은 프로그램이 실행 중 오류가 발생했을 때, 이를 감지하고 처리하는 방법입니다. 이를 통해 프로그램이 중단되지 않고 계속 실행될 수 있도록 합니다.

  • 예외(Exception): 프로그램 실행 중 발생할 수 있는 오류입니다. 예를 들어, 사용자가 존재하지 않는 파일을 열려고 할 때 발생합니다.
  • 예외 처리(Exception Handling): 예외가 발생했을 때 이를 잡아서 적절하게 처리하는 것입니다.
  • 관련 용어 정리

    용어설명
    try예외가 발생할 수 있는 코드를 감싸는 블록
    catch발생한 예외를 처리하는 블록
    finally예외 발생 여부와 관계없이 항상 실행되는 블록
    throw사용자 정의 예외를 발생시키는 키워드
    throws메서드에서 예외를 던질 수 있음을 선언하는 키워드

    3. 기본 코드 예제

    아래는 간단한 예외 처리의 기본 사용법을 보여주는 코드입니다.

    public class ExceptionExample {
        public static void main(String[] args) {
            try {
                int result = divide(10, 0); // 0으로 나누기
                System.out.println("결과: " + result);
            } catch (ArithmeticException e) { // 산술 예외 처리
                System.out.println("예외 발생: " + e.getMessage());
            } finally {
                System.out.println("프로그램 종료");
            }
        }
    
        public static int divide(int a, int b) {
            return a / b; // 나누기 연산
        }
    }

    실행 결과:

    예외 발생: / by zero
    프로그램 종료

    코드 동작 설명:

    1. try 블록 내에서 divide 메서드를 호출하여 10을 0으로 나누려고 합니다.
    2. 0으로 나누기 때문에 ArithmeticException이 발생합니다.
    3. catch 블록에서 발생한 예외를 잡아서 "예외 발생: / by zero"라는 메시지를 출력합니다.
    4. finally 블록이 항상 실행되어 "프로그램 종료" 메시지를 출력합니다.
    5. 4. 실전 활용 예제

      1. 파일 읽기

      쇼핑몰에서 제품 정보를 파일로 저장하고 이를 읽는 상황을 가정해봅시다.

      import java.io.*;
      
      public class FileReadExample {
          public static void main(String[] args) {
              try {
                  BufferedReader reader = new BufferedReader(new FileReader("products.txt"));
                  String line;
                  while ((line = reader.readLine()) != null) {
                      System.out.println(line);
                  }
                  reader.close();
              } catch (FileNotFoundException e) {
                  System.out.println("파일을 찾을 수 없습니다: " + e.getMessage());
              } catch (IOException e) {
                  System.out.println("파일 읽기 오류: " + e.getMessage());
              }
          }
      }

      2. 사용자 입력 처리

      사용자로부터 정수를 입력받는 상황입니다.

      import java.util.Scanner;
      
      public class UserInputExample {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              try {
                  System.out.print("정수를 입력하세요: ");
                  int number = scanner.nextInt();
                  System.out.println("입력한 정수: " + number);
              } catch (java.util.InputMismatchException e) {
                  System.out.println("잘못된 입력입니다. 정수를 입력하세요.");
              } finally {
                  scanner.close();
              }
          }
      }

      5. 흔한 실수와 주의사항

      실수 1: 예외를 무시하기

      예외를 발생시키고 아무것도 하지 않는 것은 좋은 습관이 아닙니다. 예외를 처리하지 않으면 프로그램의 예측 가능성을 떨어뜨립니다.

      잘못된 코드:

      try {
          int result = divide(10, 0);
      } catch (ArithmeticException e) {
          // 아무 것도 하지 않음
      }

      올바른 코드:

      try {
          int result = divide(10, 0);
      } catch (ArithmeticException e) {
          System.out.println("0으로 나눌 수 없습니다.");
      }

      실수 2: finally 블록의 사용

      finally 블록은 항상 실행되지만, 이를 잘못 이해하고 중요한 리소스 해제를 잊는 경우가 많습니다.

      잘못된 코드:

      try {
          // 리소스를 열지만 닫지 않음
      } finally {
          // 리소스를 닫지 않음
      }

      올바른 코드:

      try {
          BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
      } catch (IOException e) {
          // 예외 처리
      } finally {
          if (reader != null) {
              reader.close(); // 리소스를 닫음
          }
      }

      6. 정리

    6. 예외 처리는 프로그램의 안정성을 높여준다.
    7. try, catch, finally의 기본 구조를 이해해야 한다.
    8. 예외를 적절히 처리함으로써 사용자에게 더 나은 경험을 제공할 수 있다.
    9. 다음에는 사용자 정의 예외 처리나 Java의 예외 계층 구조를 학습하면 좋습니다.