인프런 커뮤니티 질문&답변

나민혁님의 프로필 이미지

작성한 질문수

Readable Code: 읽기 좋은 코드를 작성하는 사고법

해피 케이스와 예외 처리

의도한 예외와 의도하지않은 예외가 정확하게 무슨뜻인가요 ?

작성

·

84

·

수정됨

0

우선 강의 잘 듣고있습니다. 의도한 예외와 의도하지 않은 예외가 조금 헷갈리는데 제가 이해한 개념이 맞는지 여쭈어봅니다.

 

강사님께서 말씀하시는 의도한 예외는 개발자가 인지하고 Exception을 던지는 경우를 말씀하시고 의도하지 않은 예외는 개발자가 인지하지 못하고 Exception이 발생한다는 뜻일까요 ??

 

그렇다면 잘짜여진 코드에서는 모두 의도한 예외가 되어야 되는건가요 ??
의도하지 않은 예외를 사용하는 일은 없는건가요 ?

 

의도한 예외 - 개발자가 예상하고 처리한 예외

의도하지 않은 예외 - 개발자가 놓치거나, 빼먹은 예외

의도하지 않은 예외 발생시 의도한 예외로 바꾼다.


이렇게 이해하면 될까요 ?

답변 3

0

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, 나민혁 님!

 

강사님께서 말씀하시는 의도한 예외는 개발자가 인지하고 Exception을 던지는 경우를 말씀하시고 의도하지 않은 예외는 개발자가 인지하지 못하고 Exception이 발생한다는 뜻일까요 ??

맞습니다!
이해하신대로 "의도한 예외"를 발생 시켜 흐름을 제어하거나 어떤 의도를 전달할 수도 있고,
반대로 "의도하지 않은 예외"가 발생하는 것을 방지하기 위해 예외가 발생할 수 있는 구간을 잘 방어하여 "의도한 예외"로 전환하는 과정이 중요합니다.

감사합니다 🙂

0

잘 이해하신 것 같아요 거기에 덧붙여서 제 조촐한 생각을 말씀드리면

강의에 나왔다시피 의도한 예외의 경우 사용자의 입력을 받는 경우 신뢰할 수 없는 데이터 값이라는 것이 자명해서 개발자가 검증 로직을 통해서 처리를 해줄 수 있을 것 같아요. 예외를 발생 시킨 후 그에 적절한 처리를 해주는 것이죠

의도하지 않은 예외의 경우 개발자가 어찌 할 수 없는 예외라고 생각해 봤어요. 예를 들면 데이터비에스와의 커넥션이 끊겨 버려서 사용자에게 정보 제공을 할 수 없을 때 가 있을 것 같아요.
이런 경우를 의도하지 않은 예외로 간주한다고 생각합니다. 위의 경우 뿐만 아니라 이러한 심각한 상황들을 일괄적으로 사용자에게 정보 제공 대신 임시방편으로 에러 페이지를 띄워 주는 처리를 할 수 있을 것 같습니다.

나민혁님의 프로필 이미지
나민혁
질문자

감사합니다. 로그를 확인하여서 처리 할 수 있는 부분은 의도한 예외로 바꾸고 말씀해주신대로 데이터베이스와 커넥션이 끊어지는 것은 어쩔 수 없는 부분이니 의도하지 않은 예외로 생각하면 되겠군요

 

가능하다면 최대한 의도한 예외로 바꾸는게 좋다는 말씀이군요 감사합니다 !

0

안녕하세요, 인프런 AI 인턴입니다.

나민혁님께서 강의의 주제인 “의도한 예외와 의도하지 않은 예외”에 대해 질문해주셨습니다. 이와 관련된 유사한 질문과 답변을 다음과 같이 소개드리겠습니다.

위 링크에서는 예외 처리와 관련된 다양한 유형의 예외에 대해 설명하고 있으니 참고하시면 도움이 될 것입니다. 예외 처리에 대해 더 깊이 이해할 수 있습니다.

간단히 요약하자면:

의도한 예외(Intentional Exception)
- 개발자가 예상하고, 특정 상황에서 발생하도록 의도한 예외입니다.
- 예를 들어, 입력 값의 범위가 벗어났을 때 IllegalArgumentException을 던지는 경우가 있습니다. 이처럼 개발자가 명시적으로 예상하고 처리한 예외입니다.

의도하지 않은 예외(Unintentional Exception)
- 개발자가 예상하지 못한 상황에서 발생하는 예외입니다.
- 예를 들어, 배열의 인덱스를 잘못 참조하여 발생하는 ArrayIndexOutOfBoundsException과 같은 경우가 있습니다. 이는 개발자가 처리하지 못한 예외로 볼 수 있습니다.

따라서, 의도하지 않은 예외가 발생하지 않도록 방어 코드를 작성해야 하며, 발생할 수 있는 예외를 최대한 예측하고 적절히 처리하는 것이 중요합니다.

의도하지 않은 예외를 의도한 예외로 바꾸려면, try-catch 블록을 사용하여 예외를 처리하고, 해당 예외를 로깅하거나 사용자에게 친절한 메시지를 전달하는 방식으로 개선할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.