검사된 예외는 프로그래머가 예외적인 조건을 처리하도록 하여 코드 안정성을 높이는 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 OptionalloadFile(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(); Optionalcontent = 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를 더욱 유연하고 사용하기 쉽게 만듭니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3