{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2020-10-12--001--10","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"d9bc3171-34cf-5f06-80a3-71cdc0d04cae","html":"<h2>예외 처리에 대한 내 결론이올시다</h2>\n<h3>Parameter Validation in Controller</h3>\n<ul>\n<li>parameter validation 은 controller 내에서 진행</li>\n</ul>\n<h3>Service (Business)</h3>\n<ul>\n<li>service 로직에서 발생한 예외에 대해서는 cause, stacktrace 가 필요함.</li>\n<li>표준 예외를 적극적으로 사용 (정의된 메시지 사용)</li>\n<li>특정 로직에 대한 예외처리가 필요한 경우 custom exception 사용</li>\n<li>custom exception handling 은 controller 에서 정의</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">NoSuchMethodException</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n   <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MyServiceException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Some information: \"</span> <span class=\"token operator\">+</span> e<span class=\"token punctuation\">.</span><span class=\"token function\">getMessage</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">//Incorrect way</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">NoSuchMethodException</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n   <span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MyServiceException</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Some information: \"</span> <span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">//Correct way</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3>Method (API)</h3>\n<ul>\n<li>checked exception 에 대해 throws 선언</li>\n<li>빈 catch 블록을 생성하거나 예외를 무시하지 말 것 </li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">NoSuchMethodException</span> e<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">//Incorrect way</span>\n   <span class=\"token keyword\">return</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> <span class=\"token class-name\">Exception</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">//Incorrect way</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">throws</span> <span class=\"token class-name\">SpecificException1</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">SpecificException2</span> <span class=\"token punctuation\">{</span> <span class=\"token comment\">//Correct way</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>ref)<br>\n<a href=\"https://woowacourse.github.io/javable/2020-08-17/custom-exception\">standard exception vs custom exception</a><br>\n<a href=\"https://howtodoinjava.com/best-practices/java-exception-handling-best-practices/#exception-types\">exception handling best practice</a><br>\n<a href=\"https://howtodoinjava.com/java/exception-handling/best-practices-for-for-exception-handling/\">custom exception handling best practice</a>  </p>\n<h4>Ref [standard exception vs custom exception] 에 대한 소견</h4>\n<p>표준 예외를 적극적으로 사용하자!</p>\n<ul>\n<li>예외 메시지로도 충분히 의미를 전달할 수 있다.</li>\n<li>표준 예외를 사용하면 가독성이 높아진다.</li>\n<li>일일히 예외 클래스를 만들다보면 지나치게 커스텀 예외가 많아질 수 있다.</li>\n</ul>\n<p>사용자 정의 예외가 필요하다?</p>\n<ul>\n<li>이름으로도 정보 전달이 가능하다.\n— 반론) message에서도 충분히 가능하다</li>\n<li>상세한 예외 정보를 제공할 수 있다.\n— 반론) back 에서는 message로 충분히 커버가 가능하며, front에서 예외에 대한 상세 내용이 필요하다면\nErrorResponse에 대한 클래스가 정의를 한다</li>\n<li>예외에 대한 응집도가 향상된다.\n— 전달하는 정보의 양이 많아질수록? 이건 오케이\n— 책임소재? stacktrace 활용하면 되지 않나?\n— 같은 예외가 여러 곳에서 사용? standard exception 으로 충분히 커버 가능하지 않나?</li>\n<li>예외 발생 후처리가 용이하다.\n— 발생위치 파악이 힘듬? stacktrace</li>\n<li>예외 생성 비용을 절감\n— stacktrace는 필요하다고 본다.</li>\n</ul>","fields":{"tagSlugs":["/tags/책리뷰/","/tags/이펙티브자바/"],"slug":"/history/posts/2020-10-12--001--10"},"frontmatter":{"title":"[책리뷰/Effective Java] 예외","tags":["책리뷰","이펙티브자바"],"date":"2020-10-12","description":"나의결론"}}},"pageContext":{"slug":"/history/posts/2020-10-12--001--10"}},"staticQueryHashes":[]}