개발자 온보딩 가이드의 "4장: 운영 환경을 고려한 코드 작성"에 Exception 사용 방법이 잘 정리되어 있다. 이 책의 내용과 ChatGPT를 활용하여, Exception 사용 팁을 정리해봤다.
1. Exception 이름은 구체적으로 네이밍하자.
- 구체적인 이름은 Exception이 발생한 원인을 빠르게 이해하고, 문제를 해결하는 데 도움을 준다.
- Good Example: InvalidOrderException, UserNotFoundException
2. Exception에 추가 정보를 활용하자.
- Exception 생성자에 메시지를 포함하거나, 필요한 경우 커스텀 필드를 추가하여 유용한 정보를 제공하.
public class InvalidOrderException extends RuntimeException {
public InvalidOrderException(String message, int orderId) {
super(String.format("%s (Order ID: %d)", message, orderId));
}
}
3. Exception은 가장 이른 시점에 던지고, 최대한 나중에 처리하자
- 예외를 가능한 한 문제가 발생한 위치에서 던지면 스택 트레이스와 컨텍스트를 유지할 수 있습다.
- 처리하는 로직은 상위 레벨(Controller, Handler 등)에서 수행하여 코드의 가독성과 유지보수성을 높이는 것이 이상적이다.
public void validateOrder(Order order) {
if (order == null) {
throw new InvalidOrderException("Order cannot be null", -1);
}
}
try {
validateOrder(order);
processOrder(order);
} catch (InvalidOrderException e) {
log.error("Order processing failed: {}", e.getMessage());
return ResponseEntity.badRequest().body("Invalid order.");
}
4. 비즈니스 로직 용도로 Exception을 사용하지 말자
- 단순히 조건문으로 처리할 수 있는 로직을 Exception으로 처리하는 것은 좋지 않다.
try {
if (userAge < 18) {
throw new IllegalArgumentException("User must be 18 or older.");
}
} catch (IllegalArgumentException e) {
return "Access denied.";
}
5. 예외를 삼키지 말자
- Exception을 처리할 때 가장 나쁜 습관은 아무 행동도 하지 않고 삼키는 것이다.
try {
doSomething();
} catch (Exception e) {
// 아무것도 하지 않음
}
'배움 조각 (Computer Science)' 카테고리의 다른 글
비결정적 코드를 결정적 코드로 만들기 (2) | 2024.12.09 |
---|---|
[구글엔지니어는 이렇게 일한다] 테스트 크기와 범위 (0) | 2023.12.22 |
[구글엔지니어는 이렇게 일한다] 테스트 코드가 주는 혜택 (0) | 2023.12.12 |