JAVA · 예외처리
예외 번역(Exception Translation)
저수준 예외를 고수준 예외로 변환하는 예외 번역 패턴입니다.
예외처리중급예외번역exception-translationcause계층
핵심 설명
저수준 예외를 고수준 예외로 변환하는 예외 번역 패턴입니다.
Java code
import java.sql.*;
// 저수준 예외를 고수준으로 변환
class RepositoryException extends RuntimeException {
RepositoryException(String msg, Throwable cause) { super(msg, cause); }
}
class ServiceException extends RuntimeException {
ServiceException(String msg, Throwable cause) { super(msg, cause); }
}
class UserRepository {
void save(String user) {
try {
// JDBC 호출 시뮬레이션
if (user.isEmpty()) {
throw new SQLException("제약 조건 위반");
}
} catch (SQLException e) {
// SQL 예외 -> 리포지토리 예외로 번역
throw new RepositoryException("사용자 저장 실패", e);
}
}
}
class UserService2 {
private final UserRepository repo = new UserRepository();
void createUser(String user) {
try {
repo.save(user);
} catch (RepositoryException e) {
// 리포지토리 예외 -> 서비스 예외로 번역
throw new ServiceException("사용자 생성 실패", e);
}
}
}
class Main {
public static void main(String[] args) {
try {
new UserService2().createUser("");
} catch (ServiceException e) {
System.out.println("서비스: " + e.getMessage());
System.out.println("원인1: " + e.getCause().getMessage());
System.out.println("원인2: " + e.getCause().getCause().getMessage());
}
}
}학습 팁
예외 번역으로 계층 간 추상화를 유지합니다. 컨트롤러에서 SQLException을 직접 알 필요가 없어집니다.
주의할 점
번역 시 원인 예외(cause)를 생략하면 디버깅이 불가능합니다. 항상 원본 예외를 체이닝하세요.
자주 묻는 질문
예외 번역(Exception Translation)란 무엇인가요?
저수준 예외를 고수준 예외로 변환하는 예외 번역 패턴입니다.
예외 번역(Exception Translation) 학습 시 주의할 점은 무엇인가요?
번역 시 원인 예외( cause )를 생략하면 디버깅이 불가능합니다. 항상 원본 예외를 체이닝하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.