{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2020-10-12--001--07","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":"bb0c7b7d-a205-508e-9a50-b67e6df05a09","html":"<h2>아이템75) 예외의 상세 메시지에 실패 관련 정보를 담으라</h2>\n<h3>스택추적</h3>\n<ul>\n<li>실패 원인을 분석할 때 얻을 수 있는 정보는 스택 정보인 경우가 많다.</li>\n<li>예외의 toString 메서드에 실패 원인에 관한 정보를 가능한 많이 담아 반환하는 일은 아주 중요하다. </li>\n</ul>\n<h3>실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다.</h3>\n<ul>\n<li>관련 데이터를 모두 담아야 하지만 장황할 필요는 없다.</li>\n<li>예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동해서는 안된다.</li>\n<li>예외는 실패와 관련된 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하는 것이 좋다.</li>\n</ul>\n<p>java9에서 제공하는 IndexOutOfBoundsException </p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">IndexOutOfBoundsException</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">RuntimeException</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">long</span> serialVersionUID <span class=\"token operator\">=</span> <span class=\"token number\">234122996006267687L</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">IndexOutOfBoundsException</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">IndexOutOfBoundsException</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> s<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">IndexOutOfBoundsException</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> index<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Index out of range: \"</span> <span class=\"token operator\">+</span> index<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>저자가 권하는 방법</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">/**\n * IndexOutOfBoundsException을 생성한다\n * @param lowerBound 인덱스의 최솟값\n * @param upperBound 인덱스의 최댓값 + 1\n * @param index 인덱스의 실젯값\n */</span>\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">IndexOutOfBoundsException</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> lowerBound<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> upperBound<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> index<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 실패를 포착하는 상세 메시지를 생성한다.</span>\n   <span class=\"token keyword\">super</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">.</span><span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"최솟값: %d , 최댓값: %d, 인덱스: %d\"</span><span class=\"token punctuation\">,</span> lowerBound<span class=\"token punctuation\">,</span> upperBound<span class=\"token punctuation\">,</span> index<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n   \n   <span class=\"token comment\">// 프로그램에서 이용할 수 있도록 실패 정보를 저장해둔다.</span>\n   <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>lowerBound <span class=\"token operator\">=</span> lowerBound<span class=\"token punctuation\">;</span>\n   <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>upperBound <span class=\"token operator\">=</span> upperBound<span class=\"token punctuation\">;</span>\n   <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>index <span class=\"token operator\">=</span> index<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","fields":{"tagSlugs":["/tags/책리뷰/","/tags/이펙티브자바/"],"slug":"/history/posts/2020-10-12--001--07"},"frontmatter":{"title":"[책리뷰/Effective Java] 예외","tags":["책리뷰","이펙티브자바"],"date":"2020-10-12","description":"아이템75) 예외의 상세 메시지에 실패 관련 정보를 담으라"}}},"pageContext":{"slug":"/history/posts/2020-10-12--001--07"}},"staticQueryHashes":[]}