"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 항목 Checked Exception의 불필요한 사용 방지

항목 Checked Exception의 불필요한 사용 방지

2024년 11월 17일에 게시됨
검색:866

Item  Evite o uso desnecessário das exceções verificadas

검사된 예외는 프로그래머가 예외적인 조건을 처리하도록 하여 코드 안정성을 높이는 Java의 강력한 도구입니다. 그러나 과도하게 사용하면 API 사용이 어려워질 수 있습니다. 확인된 예외가 정당화되려면 상황이 정말 예외적이고 프로그래머가 유용한 조치를 취할 수 있어야 합니다. 그렇지 않으면 확인되지 않은 예외가 더 적절할 수 있습니다.

Java 8에서는 확인된 예외를 사용하는 데 추가적인 문제가 발생했습니다. 예외를 발생시키는 메서드를 스트림에서 직접 사용할 수 없어 코드에서 추가 처리가 필요하기 때문입니다. 이러한 복잡성을 피하기 위해 검증 가능한 예외를 발생시키는 대신 Optional 개체를 반환하거나 메서드를 오류 가능성을 확인하는 메서드와 작업을 수행하는 메서드로 분할하는 등의 대안을 고려할 수 있습니다.

확인된 예외는 자제해서 사용해야 합니다. 복구가 불가능한 경우 확인되지 않은 예외를 사용하세요. 복구가 가능한 경우 반품 옵션을 고려하세요. 이것이 충분한 정보를 제공하지 않으면 확인된 예외가 정당화될 수 있습니다.

을 더한:
다음은 검사 예외 및 Optional과 같은 대안의 적절한 사용 및 검사 방법 사용을 설명하는 몇 가지 예입니다.

Checked Exception을 적게 사용하기
파일에서 데이터를 로드하는 메서드가 있다고 가정해 보겠습니다. 파일을 찾을 수 없으면 호출자에게 문제를 알리기 위해 예외를 발생시키고 싶습니다. 이 경우 개발자가 문제를 해결하기 위한 조치(예: 올바른 아카이브 경로 제공)를 취할 수 있으므로 확인된 예외가 적합합니다.

public class FileLoader {
    public String loadFile(String filePath) throws FileNotFoundException {
        File file = new File(filePath);
        if (!file.exists()) {
            throw new FileNotFoundException("Arquivo não encontrado: "   filePath);
        }
        // Código para carregar o arquivo
        return "Conteúdo do arquivo";
    }
}

여기서 호출자는 파일에 대한 올바른 경로를 제공하여 문제를 해결할 수 있으므로 FileNotFoundException 예외를 처리해야 합니다.

Checked Exception 대신 Optional 사용
누락된 파일이 정상적인 실행을 방해해서는 안 되는 조건인 경우 Optional을 사용하여 예외를 발생시키지 않고 결과가 누락될 수 있음을 나타낼 수 있습니다. 이는 가치가 없음을 용인할 수 있는 경우에 API를 더욱 유연하게 만듭니다.

import java.util.Optional;

public class FileLoader {
    public Optional loadFile(String filePath) {
        File file = new File(filePath);
        if (!file.exists()) {
            return Optional.empty();
        }
        // Código para carregar o arquivo
        return Optional.of("Conteúdo do arquivo");
    }
}

발신자 코드:

FileLoader loader = new FileLoader();
Optional content = loader.loadFile("caminho/para/arquivo.txt");
content.ifPresentOrElse(
    System.out::println,
    () -> System.out.println("Arquivo não encontrado.")
);

이 예에서 호출자는 예외를 처리할 필요가 없으며 Optional을 사용하면 누락된 콘텐츠를 보다 원활하게 처리할 수 있습니다.

방법을 두 가지로 나누기: 검증과 조치
어떤 경우에는 메서드를 조건을 확인하는 메서드와 작업을 수행하는 메서드로 나눌 수 있습니다. 이를 통해 호출자는 기본 메서드를 호출하기 전에 예외 조건을 처리할 수 있으므로 API가 더욱 유연해집니다.

public class FileLoader {
    // Verifica se o arquivo está disponível
    public boolean isFileAvailable(String filePath) {
        File file = new File(filePath);
        return file.exists();
    }

    // Carrega o conteúdo do arquivo
    public String loadFile(String filePath) {
        if (!isFileAvailable(filePath)) {
            throw new IllegalStateException("Arquivo não encontrado: "   filePath);
        }
        // Código para carregar o arquivo
        return "Conteúdo do arquivo";
    }
}

발신자 코드:

FileLoader loader = new FileLoader();
String filePath = "caminho/para/arquivo.txt";

if (loader.isFileAvailable(filePath)) {
    String content = loader.loadFile(filePath);
    System.out.println(content);
} else {
    System.out.println("Arquivo não encontrado.");
}

여기서는 호출자가 파일의 사용 가능 여부를 먼저 확인하지 않고 파일을 로드하려고 시도하는 경우 확인되지 않은 예외인 IllegalStateException을 사용합니다.

요약
Checked Exception: 파일에 대한 FileNotFoundException과 같이 호출자가 직접 수정할 수 있는 조건에 사용합니다.
선택 사항: 값이 없어도 프로그램 흐름이 중단되어서는 안 되는 경우에 사용합니다.

메서드 분할: 오류를 예측하고 방지할 수 있는 경우 검사 및 실행 방법을 분리하여 API를 더욱 유연하고 사용하기 쉽게 만듭니다.

릴리스 선언문 이 기사는 https://dev.to/giselecoder/item-71-evite-o-uso-desnecessario-das-excecoes-verificadas-4ap7?1에서 복제됩니다. 침해가 있는 경우, [email protected]으로 문의하시기 바랍니다. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3