예외가 발생한 후, 예외 상황을 처리하고 프로그램이 정상적으로 계속 실행될 수 있도록 하는 방법
try {
// 파일 읽기 작업
FileReader file = new FileReader("file.txt");
} catch (FileNotFoundException e) {
// 예외 복구 - 다른 파일 경로 시도
System.out.println("파일이 존재하지 않습니다. 다른 파일을 시도합니다.");
FileReader file = new FileReader("backup_file.txt");
}
2. 예외 회피 (Exception Avoidance)
예외가 발생하지 않도록 사전 예방적인 조치를 취하는 방식
File file = new File("file.txt");
if (file.exists()) {
FileReader file = new FileReader("file.txt");
} else {
System.out.println("파일이 존재하지 않습니다.");
}
3. 예외 전환 (Exception Propagation)
발생한 예외를 상위 메소드나 호출자에게 전달하는 방법
public void readFile() throws FileNotFoundException {
FileReader file = new FileReader("file.txt");
}
public void processFile() {
try {
readFile();
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
}
}
예외 전환의 필요성
책임 분리
예외를 상위 메소드로 전달해서 상위에서 전체적인 흐름을 관리
어디서 예외가 발생했는지, 그 예외에 어떻게 반응해야 하는지를 더 높은 수준에서 결정
아래 코드와 같이 더 구체적이고 명확하게 표현 가능
public void processFile() throws FileNotFoundException {
// 파일을 읽는 로직
FileReader file = new FileReader("file.txt"); // 예외 발생 가능
}
public void handleFileProcessing() {
try {
processFile(); // 예외 전환
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
}
}
유연성
하위 메소드에서 예외를 처리하면 고정된 방식으로 처리
ex. 파일을 찾지 못하면 그 즉시 오류 메시지를 출력하거나 기본 파일을 대신 사용
상위 메소드에서 예외를 받아 상황에 맞게 대응
ex. 예외가 발생했을 때 로그를 남기고 다른 작업을 이어서 실행, 또는 사용자에게 메시지를 출력하거나 애플리케이션을 종료
재사용성
예외를 상위 메소드로 전환하면 하위 메소드는 더 일반적이고 재사용 가능한 형태로 남아, 다양한 상황에서 유연하게 사용 가능