요즘 이런저런 이유로 간혹 물어보는 질문입니다.
요구사항은 간단한 상품 주문 서비스를 만드는 것이고, 질문의 내용은 해당 서비스에서 상품이 매진이 되었을 경우에 대한 처리를 위해서 만드는 '예외'입니다. 그런 이유로 코드에서 SoldoutException을 꼭 만들어야(?) 하는 듯 한데, 그 소스를 보면 대부분
pub... SoldoutException extends Exception { .. }
요로코롬 되어있습니다. 사실 Unchecked나 Checked Exception에 대해서는 온라인에 널리고 널려있어서, 컴파일시네 뭐네.. 원론적인부분이나.. 깊이 이런걸 물어본것도 아닌(알면 같이 배울 수 있어서 좋고~)..
그냥 자신의 소신것 왜 사용을 했는지에 대한 얘기만 해주시면 될 듯 한데.. 대게의 분들이 '그냥...'이군요.
예로, '난 이 오류를 해당 메소드를 실행하는 곳에서 필히 체크해서 처리하도록 하고싶다.(뭘?)' 뭐 이정도의 말한마디여도 '넵!' 인데..
여튼 예외 처리는 험난하고 고단하다...로 기승전고단!
왜? Checked Exception을 상속해서 예외를 만드셨나요?
2개의 의견 from SLiPP
Unchecked나 Checked 중 어느 것을 사용해야 하느냐는 지침 중 가장 단순한 지침은 예외를 받아서 극복하거나 모종의 조치를 취해야 한다면 Checked를, 그렇지 않다면 Unchecked(Runtime)을 쓰라는 겁니다. 위 예의 경우, 논리 상, 매진이 되었을 때에는 그에 따른 조치를 취해야 할 것 같으니 Checked가 합당한 것 같습니다.
저는 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에 대한 가치는 떨어지고 있지만 필요한 상황으로 많다고 봅니다.
위 항목 이외에도 다양한 요소가 있을 듯 합니다. 그 때 그 때의 상황(Context)에 따라 각기 다른 Exception 정책을 만들어야 하지 않을까 생각합니다. Context에 따라 적합한 Exception 정책을 고민하고 수립하는 개발자가 있어야 하리라 생각합니다.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.