☕ Ex01.java
// 💡 RuntimeException 과 그 자손들 : unchecked 예외
// - 주로 개발자의 실수로 일어나는 예외 (실수 안 하면 됨)
// - 예외처리가 필수가 아님 (하지 않아도 컴파일 가능)
public static void maybeException1 () {
if (new Random().nextBoolean()) {
throw new RuntimeException();
}
}
// ⚠️ 다른 예외들은 checked 예외
// - 해당 메소드 내에서, 또는 호출한 곳에서 예외처리 필수
// - 외적 요인으로 발생하는 예외 (조심해도 소용없으므로 대비해야 함)
// - ⭐️ IDE의 안내에 따라 두 가지 옵션 실행해보기
public static void maybeException2 () {
if (new Random().nextBoolean()) {
throw new FileNotFoundException();
}
}
☕ WrongMonthException.java
public class WrongMonthException extends Exception {
public WrongMonthException(String message) {
super(message);
}
public WrongMonthException(String message, Throwable cause) {
super(message, cause);
}
}
☕ Ex02.java
// 💡 예외를 던질 가능성이 있지만 스스로 처리하지는 않는 메소드
public static void registerDutyMonth (String name, int month) throws WrongMonthException {
if (month < 1 || month > 12) {
throw new WrongMonthException("하... 직원 교육 좀 시켜서 보내세요.");
}
System.out.printf("%s씨 %d월 담당으로 배정되셨어요.%n", name, month);
}
Map<String, Integer> dutyRegMap = new HashMap<>();
dutyRegMap.put("정핫훈", 7);
dutyRegMap.put("김돌준", 13);
dutyRegMap.forEach((name, month) -> {
// 💡 실행부에서, 혹은 또 이를 호출한 외부에서 처리해주어야 함
try {
registerDutyMonth(name, month);
} catch (WrongMonthException we) {
we.printStackTrace();
System.out.printf("%s씨 에어팟 빼봐요.%n", name);
} catch (Exception e) {
e.printStackTrace();
}
});