C++ try { } catch {} 로 예외처리는 어떤 경우에 하는 건가요?
글쓴이: trymp / 작성시간: 목, 2015/11/19 - 9:49오전
C++ 에서 try ~ catch 문으로 함수에서 발생하는 exception 을 처리하잖아요.
근데 대부분의 C++ 함수가 한두개라도 exception 을 발생시키는 것 같은데,
거의 대부분의 코드를 try ~ catch 로 묶어야 하나요?
아니면 발생가능성을 두고서 가능성이 큰 코드만 묶게 되나요?
아직 어떤 경우에 try ~ catch 를 써야 하는지 감이 안혀서 이렇게 질문드립니다.
고수님들의 조언 부탁드립니다.
Forums:
참고해보세요.
책 보시면. 해당 분야마다. 예외처리를 제공해줍니다.
C++ try { } catch {}
http://www.google.co.kr/search?hl=ko&source=hp&biw=&bih=&q=C%2B%2B+try+%7B+%7D+catch+%7B%7D&gbv=2&oq=C%2B%2B+try+%7B+%7D+catch+%7B%7D&gs_l=heirloom-hp.12..0l10.1053.1053.0.2506.1.1.0.0.0.0.156.156.0j1.1.0....0...1ac..34.heirloom-hp..0.1.155.qw_AOz0Rj7Q
C++ Standard Exceptions:
C++ Exception Handling
http://www.tutorialspoint.com/cplusplus/cpp_exceptions_handling.htm
Exceptions
http://www.cplusplus.com/doc/tutorial/exceptions/
c++ try, catch문 사용 가이드
http://spaurh.egloos.com/4266095
C++ catching all exceptions (... 점점점)
http://stackoverflow.com/questions/315948/c-catching-all-exceptions
http://www.codeproject.com/Articles/207464/Exception-Handling-in-Visual-Cplusplus
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
...
대부분의 라이브러리 함수가 exception을 발생시키는 경우는 뭔가 잘못되었을 때입니다. (이를 테면 존재하지 않는 키값을 이용해 at를 부른다든지...) try/catch를 남발하는 코드는 설계에 문제가 있을 확률이 높습니다.
함수를 부르기 전에 먼저 로직을 함수가 의도하는 용도에 맞게 짜서, 버그가 없다면 exception이 웬만하면 일어나지 않도록 짜는 게 좋습니다.
그런 다음에 exception이 일어나면 그건 버그거나 비상상황이 생긴 것이니 그때 알아서 처리하면 됩니다. 프로그래머 취향 차이겠지만 저같은 경우 "로직 상 그런 상황이 생기지 말아야 하는 경우"라면 그냥 catch 안하고 냅둡니다. 그러면 그 상황이 발생했을 때 깔끔하게 에러를 내고 죽기 때문에 쉽게(?) 버그를 잡을 수 있습니다.
가장 최악의 케이스는 exception을 잡는다고 일단 catch를 한 다음에 상황을 해결하기 위한 일을 아무 것도 안 하고 그냥 씹어버리는 겁니다. 주위에 이런 식의 코드를 짜는 사람이 있다면 크게 터지기 전에 빨리 다른 직장을 알아보는 게 좋습니다.
* 그리고 C++에서 적극 권장하는 RAII idiom을 잘 사용하면 exception이 발생했을 때 특별히 catch를 하지 않아도 exception handler가 알아서 필요한 자원 해제하고 등등을 다 해줍니다. (익숙해지기가 쉽지는 않습니다만 쓰다보면 편합니다. 꼭 exception이 아니라도 함수 중간에 return한다든지 하는 경우에 신경쓸 필요 없이 자원이 다 해제되도록 할 수 있지요.)
댓글 달기