IT Developer/Java

Java 기초 <8. 예외 처리와 사용자 정의 예외>

TEMA_ 2025. 3. 9. 09:14
반응형

자바 Java

8. 예외 처리와 사용자 정의 예외

 

안녕하세요! 태마입니다.

Java 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

자바 Java

포스팅 시작하겠습니다 :)

1. 주제 간단 정리

 

1. 예외 처리(Exception Handling)란?

예외(Exception)란 프로그램 실행 중 발생할 수 있는 오류나 예기치 않은 상황입니다.
예외가 발생하면 프로그램은 종료되거나 예상치 못한 동작을 할 수 있기 때문에, 예외 처리는 안정적인 프로그램을 만들기 위해 매우 중요합니다.

📌 예외 처리를 사용하는 이유
✔ 프로그램이 비정상적으로 종료되지 않도록 방지
✔ 오류가 발생해도 프로그램의 다른 부분은 정상적으로 실행되게 함
✔ 오류 메시지를 사용자에게 제공하거나 로깅하여 디버깅을 쉽게 함


 

2. Java에서의 예외 처리 구조

Java에서는 예외를 처리하기 위해 try-catch-finally 구문을 사용합니다.

  • try : 예외가 발생할 가능성이 있는 코드를 작성
  • catch : 예외가 발생하면 이를 처리하는 코드
  • finally : 예외 발생 여부와 상관없이 항상 실행되는 코드 (자원 반납, 종료 작업 등)

기본 예외 처리 예제

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;  // 예외 발생
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        } finally {
            System.out.println("이 부분은 항상 실행됩니다.");
        }
    }
}​

📌 try-catch 구문은 예외를 잡아내고, finally 블록은 항상 실행되어 자원 반납 등 처리가 가능


 

3. 예외 클래스의 계층 구조

Java의 예외는 Throwable 클래스를 상속받고 있습니다.

  • Error : JVM 문제와 같은 심각한 오류
  • Exception : 프로그램에서 발생할 수 있는 예외

예외 클래스 계층 구조

  • Throwable
    • Error : 시스템의 오류 (예: OutOfMemoryError, StackOverflowError)
    • Exception : 프로그램에서 발생할 수 있는 예외
      • RuntimeException : 런타임 예외 (예: NullPointerException, ArrayIndexOutOfBoundsException)
      • Checked Exception : 컴파일 시 체크되는 예외 (예: IOException, SQLException)

📌 RuntimeException은 체크되지 않는 예외이며, Checked Exception은 반드시 처리해야 함.

반응형

2. 상세 주제 정리

 

1. 예외 던지기(Throwing Exceptions)

예외를 직접 던져서 호출한 곳에서 이를 처리할 수 있도록 할 수 있습니다.

  • throw : 예외를 명시적으로 던짐
  • throws : 메서드에서 발생할 수 있는 예외를 호출자에게 전달

throw 예제

public class ThrowExample {
    public static void checkAge(int age) {
        if (age < 18) {
            throw new IllegalArgumentException("나이가 18 미만입니다.");
        }
        System.out.println("입장 가능");
    }

    public static void main(String[] args) {
        try {
            checkAge(15); // 예외 발생
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage()); // "나이가 18 미만입니다." 출력
        }
    }
}

📌 throw를 사용하면 특정 조건에서 예외를 발생시킬 수 있음

throws 예제

public class ThrowsExample {
    public static void readFile(String filename) throws IOException {
        // 파일을 읽는 코드
        throw new IOException("파일을 읽을 수 없습니다.");
    }

    public static void main(String[] args) {
        try {
            readFile("test.txt"); // 예외 처리 위임
        } catch (IOException e) {
            System.out.println(e.getMessage()); // "파일을 읽을 수 없습니다." 출력
        }
    }
}

📌 throws를 사용하면 메서드에서 발생할 수 있는 예외를 호출한 곳에 전달


 

2. 사용자 정의 예외 (Custom Exception)

Java에서는 사용자가 직접 예외 클래스를 만들어 특정 오류를 처리할 수 있습니다.
예를 들어, 비즈니스 로직에 맞는 예외 처리를 하고 싶을 때 유용합니다.

사용자 정의 예외 예제

// 사용자 정의 예외 클래스
class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    public static void checkAge(int age) throws InvalidAgeException {
        if (age < 18) {
            throw new InvalidAgeException("나이가 18 미만입니다.");
        }
        System.out.println("입장 가능");
    }

    public static void main(String[] args) {
        try {
            checkAge(15); // 예외 발생
        } catch (InvalidAgeException e) {
            System.out.println(e.getMessage()); // "나이가 18 미만입니다." 출력
        }
    }
}

📌 사용자 정의 예외는 Exception 또는 RuntimeException을 상속받아 구현


 

3. 예외 처리의 베스트 프랙티스 (Best Practices)

✔ 예외는 최소화하고, 필요한 곳에서만 처리
✔ 예외 메시지는 구체적이고 명확하게 제공
적절한 예외 유형을 선택 (예: IOException, SQLException, RuntimeException)
✔ 예외를 빠르게 처리하고, 자원 정리 작업을 finally 블록에서 수행

📌 불필요한 예외 처리는 프로그램 성능을 저하시킬 수 있으며, 예외가 발생할 가능성이 높은 곳에서만 예외 처리를 해야 함.


지금까지 Java의 예외 처리와 사용자 정의 예외를 배웠어요!
👉 "이제 멀티스레딩, 동시성 프로그래밍에 대해 배우고 싶다면?"
다음 회차에서 멀티스레딩과 동시성 프로그래밍을 다뤄봅시다!

 

반응형