작성
·
34
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
서비스 계층의 순수성을 위해 체크 예외를 런타임 예외로 변환해서 던지고, 런타임 예외로 변환 시 반드시 기존 체크 예외를 포함하여 던져야 한다.
왜냐하면 예외 발생 시 어떤 예외 때문에 해당 예외가 발생했는지 스택 트레이스를 참고하기 위해서이다.
그러면 차라리 런타임 예외 클래스의 생성자에서 예외를 포함하도록 강제하면 예외를 포함하여 던져야 한다. 는 부분이 해결 될 것 같은데요
강의에서는 다음과 같이 파라미터가 없는 기본 생성자를 만드는 특별한 이유가 있는 것인지 아니면 중요한 주제가 아니라 남기셨는지 궁금합니다.
public class MyDbException extends RuntimeException {
public class MyDbException() {
// 이 부분을 없애고 다음의 생성자만 남김
}
public class MyDbException(Throwable cause) {
// 이 생성자만 강제하면 반드시 예외를 포함하여 던져야 하므로 문제가 해결됨
}
}
답변 2
0
안녕하세요. Jay님
이 부분은 상황에 따라서 다를 것 같아요.
만약 MyDbException이라는 예외가 스스로 발생하지 못하고 항상 예외를 변환하는 목적으로만 사용해야 한다면 생각하신 것이 맞고, 그렇지 않고, MyDbException이 예외 변환 뿐만 아니라 스스로 생성하는 목적으로도 사용되는 경우가 있다면 기본 생성자를 허용해야 합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. Jay님.
말씀하신 것처럼 체크 예외를 런타임 예외로 변환할 때 기존 예외(cause)를 포함하여 던지는 것은 매우 중요합니다. 이를 통해 예외 발생의 근본 원인을 정확히 추적할 수 있기 때문입니다.
강의에서는 기본 생성자를 제공하고 있지만, 사실 모든 상황에서 강제적으로 기본 생성자가 필요한 것은 아닙니다. Throwable
객체를 인자로 받는 생성자만 사용하도록 유도하여, 항상 원인이 되는 예외를 포함하도록 강제하는 것도 좋은 설계 방법입니다.
기본 생성자를 포함하는 것은 Java의 기본 규칙 준수와 혹시 모를 예외 상황대를 대비하기 위한 일반적인 관습이지만, 실무에서는 필요하지 않다면 과감히 제거하고 명확한 생성자 사용을 강제하는 것이 좋습니다.
관련한 참고 자료로는 체크 예외 -> 언체크 예외 전환 시 질문 게시물이 도움이 될 수 있습니다. 해당 게시물에서는 예외 전환 시의 의도와 처리 방식에 대한 설명이 제공되고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.