반응형
참고
2019.05.09 - [IT&프로그래밍/Java] - Java | 예외 처리 (try-catch, throw, throws)
예외 처리의 3가지 방식
- 예외복구 (재시도)
- 예외회피 (throws)
- 예외전환
예외복구 (재시도)
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());
}
}
반응형
'개발_웹 > Java' 카테고리의 다른 글
Java | 접근 지정자 (Access Modifier) (0) | 2021.05.19 |
---|---|
Java | 컬렉션 (Collection) (0) | 2021.05.15 |
JSP | 숫자 앞자리 0으로 채우는 팁 (패딩) (0) | 2021.05.12 |
Java | 업캐스팅, 다운캐스팅, instanceof (0) | 2021.05.11 |
Java | clone()으로 깊은 복사하기 (0) | 2021.05.02 |