Categories: 미분류

Java에서의 예외 처리: try, catch, throw 사용법에 대해 알아 보겠습니다.

Java에서 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 처리하기 위한 중요한 메커니즘입니다. 이를 통해 프로그램의 안정성을 높이고, 예기치 못한 상황에서도 정상적으로 작동하도록 만들 수 있습니다. 이번 글에서는 try, catch, throw 키워드를 사용하여 Java에서 예외를 처리하는 방법과 그 원리를 알아 보겠습니다.


1. 예외(Exception)란?

예외란 프로그램 실행 중 예기치 않은 상황이나 오류가 발생했을 때 이를 나타내는 객체입니다. 예외는 크게 두 가지로 나뉩니다

  1. Checked Exception
    • 컴파일 시점에 처리해야 하는 예외입니다.
    • 예: IOException, SQLException
  2. Unchecked Exception:
    • 런타임 시점에 발생하는 예외입니다.
    • 예: NullPointerException, ArrayIndexOutOfBoundsException

2. 예외 처리 기본 구조

Java에서 예외 처리는 주로 try, catch, finally, throw, throws 키워드를 사용하여 이루어집니다.

기본 구조

try {
    // 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType e) {
    // 예외가 발생했을 때 처리할 코드
} finally {
    // (선택적) 항상 실행되는 코드
}

3. 예외 처리 예제

  1. 파일 읽기 예제
import java.io.*;

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            FileReader reader = new FileReader("example.txt");
            BufferedReader br = new BufferedReader(reader);
            System.out.println(br.readLine());
            br.close();
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다: " + e.getMessage());
        }
    }
}

출력: (파일이 없는 경우)

파일을 읽는 중 오류가 발생했습니다: example.txt (No such file or directory)
  1. ArithmeticException 처리
public class DivideByZeroExample {
    public static void main(String[] args) {
        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
        }
    }
}

출력

0으로 나눌 수 없습니다: / by zero

4. throw와 throws

  1. throw 키워드
    • 특정 조건에서 예외를 강제로 발생시킬 때 사용합니다.

예제:

public class ThrowExample {
    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (IllegalArgumentException e) {
            System.out.println("예외 발생: " + e.getMessage());
        }
    }

    public static void checkAge(int age) {
        if (age < 18) {
            throw new IllegalArgumentException("나이는 18세 이상이어야 합니다.");
        }
    }
}

출력

예외 발생: 나이는 18세 이상이어야 합니다.
  1. throws 키워드
    • 메서드가 호출자에게 예외를 던질 수 있음을 명시합니다.

예제

import java.io.*;

public class ThrowsExample {
    public static void main(String[] args) throws IOException {
        readFile("example.txt");
    }

    public static void readFile(String fileName) throws IOException {
        FileReader reader = new FileReader(fileName);
        BufferedReader br = new BufferedReader(reader);
        System.out.println(br.readLine());
        br.close();
    }
}

5. finally 블록

finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 리소스를 해제하거나 정리하는 작업에 사용됩니다.

예제

public class FinallyExample {
    public static void main(String[] args) {
        try {
            int[] arr = {1, 2, 3};
            System.out.println(arr[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("배열 인덱스 초과: " + e.getMessage());
        } finally {
            System.out.println("예외 처리 종료.");
        }
    }
}

출력

배열 인덱스 초과: Index 5 out of bounds for length 3
예외 처리 종료.

6. 예외 처리의 장점

  1. 프로그램 안정성 증가
    • 예외 처리 없이 프로그램이 멈추는 것을 방지합니다.
  2. 문제의 원인 파악 용이
    • 적절한 예외 메시지를 제공하여 문제 해결에 도움을 줍니다.
  3. 코드 유지보수성 향상
    • 예외 처리를 통해 오류가 발생할 가능성이 있는 부분을 명확히 분리할 수 있습니다.

결론

Java에서의 예외 처리는 안정적이고 유지보수 가능한 프로그램을 개발하는 데 필수적인 요소입니다. try, catch, throw와 같은 키워드를 적절히 활용하여 예외를 처리하고, 예외 상황에서도 프로그램이 정상적으로 작동할 수 있도록 설계해 보세요. 예외 처리를 통해 코드의 품질을 한 단계 업그레이드가 될 수 있습니다.

다음시간에는 Java 컬렉션 프레임워크 완벽 가이드: List, Set, Map의 차이점에 대해 알아 보겠습니다. 감사합니다.

루루파파

Recent Posts

2025년 디딤돌 전세 대출로 전세금 2억 원 마련한 후기 (금리, 한도, 계산기 활용)

디딤돌 전세 대출을 받은 실제 경험 바탕으로 포스팅을 작성합니다. 디딤돌 대출은 생애최초, 신혼부부 대출로 나뉘어져…

3주 ago

Spring Security를 활용한 인증 및 권한 관리에 대해 알아보기

현대 웹 애플리케이션에서는 보안이 중요한 요소이며, Spring Security는 강력한 인증 및 권한 관리 기능을 제공합니다.…

3주 ago

Java에서의 로깅 및 모니터링 전략에 대해 알아보기

애플리케이션 개발에서 로깅(logging)과 모니터링(monitoring)은 필수적인 요소입니다. Java 애플리케이션이 실행되는 동안 발생하는 이벤트를 기록하고, 성능 및…

4주 ago

Java에서의 API 설계 가이드 중 RESTful API vs GraphQL API에 대해 알아보기

API(Application Programming Interface)는 애플리케이션 간 데이터를 주고받기 위한 인터페이스로, Java에서는 주로 RESTful API와 GraphQL API를…

4주 ago

Java에서의 디자인 패턴 심화 중 GoF 패턴 분석에 대해 알아보기

디자인 패턴(Design Patterns)은 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 일반적인 해결책을 제공합니다. 특히, GoF(Gang…

4주 ago

Java 애너테이션(Annotation)과 커스텀 애너테이션 활용법에 대해 알아보기

Java의 애너테이션(Annotation)은 메타데이터를 코드에 추가하는 기능을 제공합니다. 이를 활용하면 코드의 가독성을 높이고, 프레임워크에서 런타임 처리를…

4주 ago