본문 바로가기
JAVA

자바 예외 처리

by 얍얍1234 2024. 6. 26.

안녕하세요! 오늘은 자바 예외 처리에 대해 이야기해보려고 합니다. 프로그래밍을 하다 보면 예상치 못한 상황이 발생할 수 있습니다. 예를 들어, 파일을 읽으려는데 파일이 존재하지 않거나, 네트워크 연결이 끊기거나, 사용자가 잘못된 입력을 하는 경우 등이 있죠. 이러한 상황에서 프로그램이 비정상적으로 종료되지 않고, 우아하게 문제를 처리할 수 있도록 하는 것이 바로 예외 처리입니다. 자바에서는 이 예외 처리를 매우 잘 지원하고 있습니다.


예외(Exception)란 무엇인가?

예외는 프로그램 실행 중에 발생하는 예기치 않은 사건을 말합니다. 자바에서는 이러한 예외를 처리하기 위해 다양한 방법을 제공합니다. 예외는 크게 두 가지로 나뉩니다: 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception).

 

체크 예외(Checked Exception)

체크 예외는 컴파일 타임에 체크되는 예외로, 반드시 예외 처리를 해야 합니다. 예를 들어, 파일 입출력 작업을 할 때 발생하는 예외나 네트워크 관련 예외 등이 있습니다. 이러한 예외는 반드시 `try-catch` 블록으로 처리하거나, 메서드 시그니처에 `throws` 키워드를 사용해 던져야 합니다.

public void readFile(String filePath) {
    try {
        FileReader reader = new FileReader(filePath);
        // 파일 읽기 작업
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

 


언체크 예외(Unchecked Exception)

언체크 예외는 런타임 예외(Runtime Exception)로, 컴파일러가 예외 처리를 강제하지 않습니다. 대표적으로 `NullPointerException`, `ArrayIndexOutOfBoundsException` 등이 있습니다. 언체크 예외는 주로 프로그래머의 실수나 논리적 오류로 발생합니다.

public void divide(int a, int b) {
    int result = a / b; // b가 0일 경우 ArithmeticException 발생
}

 


예외 처리 방법

자바에서 예외를 처리하는 방법은 크게 네 가지입니다: `try-catch`, `try-catch-finally`, `try-with-resources`, `throws`.


1. try-catch

가장 기본적인 예외 처리 방법입니다. `try` 블록 내에서 예외가 발생할 가능성이 있는 코드를 작성하고, `catch` 블록에서 예외를 처리합니다.

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



2. try-catch-finally
`finally` 블록은 예외 발생 여부와 상관없이 항상 실행됩니다. 리소스를 해제하거나 정리할 때 유용합니다.

public void readFile(String filePath) {
    FileReader reader = null;
    try {
        reader = new FileReader(filePath);
        // 파일 읽기 작업
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}



3. try-with-resources
자바 7부터 도입된 try-with-resources 구문은 리소스를 자동으로 해제합니다. 리소스는 `java.lang.AutoCloseable` 인터페이스를 구현해야 합니다.

public void readFile(String filePath) {
    try (FileReader reader = new FileReader(filePath)) {
        // 파일 읽기 작업
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}



4. throws
메서드 시그니처에 `throws` 키워드를 사용해 예외를 던질 수 있습니다. 호출된 메서드에서 예외를 처리하도록 강제합니다.

public void readFile(String filePath) throws FileNotFoundException {
    FileReader reader = new FileReader(filePath);
    // 파일 읽기 작업
}

 


사용자 정의 예외

자바에서는 사용자가 직접 예외 클래스를 정의할 수 있습니다. 주로 체크 예외를 상속받아 사용하며, 필요에 따라 언체크 예외를 상속받을 수도 있습니다.

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

public void someMethod() throws CustomException {
    // 예외 발생 조건
    throw new CustomException("사용자 정의 예외 발생");
}

 


예외 처리의 모범 사례

1. 구체적인 예외를 처리: 예외를 포괄적으로 처리하지 말고, 구체적인 예외를 처리하여 발생한 문제를 정확히 파악하고 대응합니다.
2. 적절한 예외 메시지 제공: 예외 메시지를 통해 발생한 문제를 명확히 전달합니다.
3. 예외 로깅: 예외 발생 시 로그를 남겨 추후 문제 해결에 도움을 줍니다.
4. 필요한 경우 예외 전환: 적절한 예외로 전환하여 상위 메서드에서 더 쉽게 처리할 수 있도록 합니다.

public void someMethod() {
    try {
        // 코드 실행
    } catch (SpecificException e) {
        throw new AnotherException("문제 발생", e);
    }
}



이렇게 자바의 예외 처리에 대해 알아보았습니다. 예외 처리는 프로그램의 안정성과 신뢰성을 높이는 중요한 부분입니다. 여러분도 코드 작성 시 예외 처리를 꼼꼼히 하여, 예기치 않은 상황에서도 우아하게 대처할 수 있는 프로그램을 만들기 바랍니다. 

'JAVA' 카테고리의 다른 글

Java final 정리해보기  (0) 2024.06.30
알고리즘 공부를 해보자  (0) 2024.06.29
JAVA 참조 자료형  (0) 2024.06.25
Java 이너클래스  (0) 2024.06.24
Java 클래스와 객체  (0) 2024.06.23