현재 CouponBoxException은 Exception을 상속받고 있어.
하지만 특별한 이유가 없다면 RuntimeException을 상속받는 게 더 유리한 경우가 많아.
이유는 다음과 같아.
📌 1. Exception은 체크 예외 (Checked Exception)
java
복사편집
public class CouponBoxException extends Exception { // Checked Exception
- Exception을 상속받으면 Checked Exception이 돼서,
모든 호출하는 곳에서 try-catch 또는 throws를 강제해야 함. - 불필요한 예외 처리가 많아져 코드가 복잡해질 수 있음.
📌 Checked Exception의 단점 예시
java
복사편집
public void processCoupon() { try { throw new CouponBoxException(CouponBoxStatusCode.INVALID_COUPON); } catch (CouponBoxException e) { // 반드시 예외를 처리해야 함 (강제됨) System.out.println("쿠폰 예외 발생: " + e.getMessage()); } }
✔ 매번 try-catch가 강제되므로, 코드가 지저분해질 가능성이 큼.
📌 2. RuntimeException은 언체크 예외 (Unchecked Exception)
java
복사편집
public class CouponBoxException extends RuntimeException { // Unchecked Exception
- RuntimeException을 상속받으면 Unchecked Exception이 돼서,
호출하는 곳에서 try-catch를 강제하지 않음. - 예외가 발생하면 런타임 시점에 자연스럽게 전파됨.
- 필요할 때만 try-catch를 사용할 수 있음.
📌 Unchecked Exception의 장점 예시
java
복사편집
public void processCoupon() { throw new CouponBoxException(CouponBoxStatusCode.INVALID_COUPON); } // 예외 처리가 필요하면 컨트롤러 레벨에서 한 번만 처리 가능 @ExceptionHandler(CouponBoxException.class) public ResponseEntity<String> handleCouponException(CouponBoxException e) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage()); }
✔ 예외 처리를 강제하지 않으면서, 한 곳에서만 효율적으로 처리할 수 있음.
📌 3. 스프링과 같은 프레임워크에서 Unchecked Exception이 더 유리
- 스프링에서는 @ExceptionHandler, @ControllerAdvice 등을 활용해 전역 예외 처리를 많이 함.
- Unchecked Exception이면, 서비스 레이어에서 예외를 던지기만 하면 되고, 컨트롤러 단에서 한 번에 처리 가능함.
- Checked Exception을 쓰면 모든 메서드에 throws를 붙이거나 try-catch를 해야 해서 불편함.
📌 결론: 특별한 경우가 아니면 RuntimeException을 쓰는 게 더 좋음!
✅ Checked Exception (Exception 상속)
- 반드시 try-catch 또는 throws가 필요함 → 코드가 복잡해질 수 있음.
- 파일 I/O, 네트워크 에러처럼 반드시 처리해야 하는 예외에 적합.
✅ Unchecked Exception (RuntimeException 상속)
- try-catch 강제가 없고, 예외가 전파됨 → 코드가 간결해짐.
- 대부분의 비즈니스 로직 예외는 RuntimeException을 쓰는 게 유리함.
- 스프링의 전역 예외 처리 (@ExceptionHandler)와 잘 어울림.
👉 그래서 CouponBoxException도 RuntimeException을 상속받는 게 더 적절해! 🚀
728x90
'Programming > Java' 카테고리의 다른 글
[java 스터디] 백준 1524번 문제풀이 (문제: 세준세비) (0) | 2025.02.19 |
---|---|
[java 스터디] 문제풀이 크리스마스 선물 14235 (0) | 2025.02.12 |
[JAVA 스터디] 250117 2차원배열 (1) | 2025.01.17 |
[Java] x,y 좌표 정렬 하기 (1) | 2023.10.06 |
[JAVA]camel 케이스 문자열을 snake 케이스 문자열로 변환 (0) | 2021.06.22 |