왜?  Checked Exception을 상속해서 예외를 만드셨나요?

2014-02-07 11:30

요즘 이런저런 이유로 간혹 물어보는 질문입니다.

요구사항은 간단한 상품 주문 서비스를 만드는 것이고, 질문의 내용은 해당 서비스에서 상품이 매진이 되었을 경우에 대한 처리를 위해서 만드는 '예외'입니다. 그런 이유로 코드에서 SoldoutException을 꼭 만들어야(?) 하는 듯 한데, 그 소스를 보면 대부분

pub... SoldoutException extends Exception { .. }

요로코롬 되어있습니다. 사실 Unchecked나 Checked Exception에 대해서는 온라인에 널리고 널려있어서, 컴파일시네 뭐네.. 원론적인부분이나.. 깊이 이런걸 물어본것도 아닌(알면 같이 배울 수 있어서 좋고~)..

그냥 자신의 소신것 왜 사용을 했는지에 대한 얘기만 해주시면 될 듯 한데.. 대게의 분들이 '그냥...'이군요.

예로, '난 이 오류를 해당 메소드를 실행하는 곳에서 필히 체크해서 처리하도록 하고싶다.(뭘?)' 뭐 이정도의 말한마디여도 '넵!' 인데..

여튼 예외 처리는 험난하고 고단하다...로 기승전고단!

왜? Checked Exception을 상속해서 예외를 만드셨나요?

2개의 의견 from SLiPP

2014-02-07 23:59

Unchecked나 Checked 중 어느 것을 사용해야 하느냐는 지침 중 가장 단순한 지침은 예외를 받아서 극복하거나 모종의 조치를 취해야 한다면 Checked를, 그렇지 않다면 Unchecked(Runtime)을 쓰라는 겁니다. 위 예의 경우, 논리 상, 매진이 되었을 때에는 그에 따른 조치를 취해야 할 것 같으니 Checked가 합당한 것 같습니다.

2014-02-08 11:27

저는 Checked Exception과 Unchecked Exception 사용하는 판단 기준을 다음과 같이 구분하려고 합니다. 앞의 @fupfin 님과 비슷합니다.

비지니스 로직 상에서 발생하는 예외로 사용자에게 인지시킬 필요가 는 경우 Checked Exception을 사용하고, 이 이외에는 가능한 Unchecked Exception을 사용하려고 합니다. 최초 자바 언어에 Checked Exception이 등장했을 때는 상당히 유용하다는 판단이 우세했으나 점차 그 효과에 의문을 제기하는 경우가 많습니다.

http://www.slipp.net/questions/81 글도 한번 읽어 보시고요. http://www.slipp.net/wiki/pages/viewpage.action?pageId=8880291 에도 참고할만한 내용이 약간은 있습니다. 온라인에서 Exception과 관련해 논의되고 있는 문서들 보시면 대략적인 감은 잡으실 수 있을 겁니다.

시간이 지날 수록 Checked Exception에 대한 가치는 떨어지고 있지만 필요한 상황으로 많다고 봅니다.

  • 소프트웨어 개발을 API를 개발하는 측과 사용하는 측이 분리되어 있는지 여부. 즉, Feature 하나를 여러 명의 개발자가 분리해서 개발하는 경우
  • 프로젝트 내의 소스 코드 공유가 활발한 경우와 그렇지 않은 경우
  • 문서화의 정도 유무
  • 조직 내 소통 정도
  • 개발자 수
  • 프로젝트 규모

위 항목 이외에도 다양한 요소가 있을 듯 합니다. 그 때 그 때의 상황(Context)에 따라 각기 다른 Exception 정책을 만들어야 하지 않을까 생각합니다. Context에 따라 적합한 Exception 정책을 고민하고 수립하는 개발자가 있어야 하리라 생각합니다.

의견 추가하기

연관태그

← 목록으로