개발_웹/Java

Java | 예외 처리의 3가지 방식

zuyo 2021. 5. 15. 03:19
반응형

참고

2019.05.09 - [IT&프로그래밍/Java] - Java | 예외 처리 (try-catch, throw, throws)

 

Java | 예외 처리 (try-catch, throw, throws)

try-catch문 프로그램의 실행 중에 비정상적인 상황이 발생할 경우에는 실행이 중지되고, Exception 객체나 Error 객체가 생성됩니다. try-catch문은 예외(non runtime exception)가 발생할 수 있는 코드를 처리

zuyo.tistory.com

 

예외 처리의 3가지 방식

  1. 예외복구 (재시도)
  2. 예외회피 (throws)
  3. 예외전환

 

예외복구 (재시도)

public void sampleMethod() {
        int maxRetry = 10; // 재시도 횟수 10회

        while (maxRetry > 0) {
            try {
                // 이곳에 예외가 발생할 가능성이 있는 코드 작성 ex) 네트워크의 불안정
                return; // 예외 없이 성공 시 리턴
            } catch (IOException e) {
                // 예외에 대한 로그 출력, 정해진 시간 만큼 대기
                maxRetry--; // 재시도 횟수 감소
            } finally {
                // 여기서 리소스 반납 및 정리 작업
            }
        }

 

예외회피 (throws)

현재 메소드 안에서 예외 처리를 하지 않고, 현재 메소드를 호출한 메소드로 예외 처리를 떠넘긴다.

public void sayNick(String nick) throws FoolException { // FoolException 발생시 떠넘기기
    if("fool".equals(nick)) {
        throw new FoolException(); // FoolException 발생
    }
    System.out.println("당신의 별명은 "+nick+" 입니다.");
}

…

public static void main(String[] args) {
    Test test = new Test();

    try {
        test.sayNick("fool");
        test.sayNick("genious");
    } catch(FoolException e) {
        // sayNick()에서 발생한 FoolException이 여기서 처리됨
    }
}

 

위와 같이 sayNick 메소드를 변경하면 main 메소드에서 컴파일 에러가 발생할 것이다

throws 구문 때문에 FoolException의 예외를 처리해야 하는 대상이 sayNick 메소드가 아닌

호출한 main 메소드로 변경되었기 때문이다.

 

예외전환

예외처리 관리를 간단하게 하고 싶을 때 사용한다.

public class AccountTest {
    public static void main(String[] args) {

        // 객체 생성 (계좌 개설)
        Account a = new Account(10_000);

        // 출금
        try {
            a.withdraw(15_000);
        } catch (OverDraftException e) {
            throw new NullPointerException(); // OverDraftException을 NullPointerException로 전환함
        }

        // 조회
        System.out.println(a.getBalance());
    }
}
반응형