C++ try { } catch {} 로 예외처리는 어떤 경우에 하는 건가요?

trymp의 이미지


C++ 에서 try ~ catch 문으로 함수에서 발생하는 exception 을 처리하잖아요.

근데 대부분의 C++ 함수가 한두개라도 exception 을 발생시키는 것 같은데,

거의 대부분의 코드를 try ~ catch 로 묶어야 하나요?

아니면 발생가능성을 두고서 가능성이 큰 코드만 묶게 되나요?

아직 어떤 경우에 try ~ catch 를 써야 하는지 감이 안혀서 이렇게 질문드립니다.

고수님들의 조언 부탁드립니다.

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

jick의 이미지

대부분의 라이브러리 함수가 exception을 발생시키는 경우는 뭔가 잘못되었을 때입니다. (이를 테면 존재하지 않는 키값을 이용해 at를 부른다든지...) try/catch를 남발하는 코드는 설계에 문제가 있을 확률이 높습니다.

함수를 부르기 전에 먼저 로직을 함수가 의도하는 용도에 맞게 짜서, 버그가 없다면 exception이 웬만하면 일어나지 않도록 짜는 게 좋습니다.

그런 다음에 exception이 일어나면 그건 버그거나 비상상황이 생긴 것이니 그때 알아서 처리하면 됩니다. 프로그래머 취향 차이겠지만 저같은 경우 "로직 상 그런 상황이 생기지 말아야 하는 경우"라면 그냥 catch 안하고 냅둡니다. 그러면 그 상황이 발생했을 때 깔끔하게 에러를 내고 죽기 때문에 쉽게(?) 버그를 잡을 수 있습니다.

가장 최악의 케이스는 exception을 잡는다고 일단 catch를 한 다음에 상황을 해결하기 위한 일을 아무 것도 안 하고 그냥 씹어버리는 겁니다. 주위에 이런 식의 코드를 짜는 사람이 있다면 크게 터지기 전에 빨리 다른 직장을 알아보는 게 좋습니다.

* 그리고 C++에서 적극 권장하는 RAII idiom을 잘 사용하면 exception이 발생했을 때 특별히 catch를 하지 않아도 exception handler가 알아서 필요한 자원 해제하고 등등을 다 해줍니다. (익숙해지기가 쉽지는 않습니다만 쓰다보면 편합니다. 꼭 exception이 아니라도 함수 중간에 return한다든지 하는 경우에 신경쓸 필요 없이 자원이 다 해제되도록 할 수 있지요.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.