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의 차이점에 대해 알아 보겠습니다. 감사합니다.

Leave a Comment