{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2020-10-12--001--08","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":"0bf9fa39-c969-5db4-9279-55af4566b9cd","html":"<h2>아이템76) 가능한 한 실패 원자적으로 만들라</h2>\n<p>일반화 해서 말하자면 호출된 메서드가 실패 하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다.\n이러한 특성을 실패 원자적(failure atomic)이라고 한다.</p>\n<h4>메서드를 원자적으로 만드는 방법</h4>\n<ul>\n<li>불변객체로 설계</li>\n<li>작업 수행중에 매개변수의 유효성을 검사</li>\n<li>객체의 임시 복사본에서 작업을한 후에 성공시 원래 객체와 교환</li>\n<li>작업도중 실패를 가로채는 복구코드를 작성하여 작업전으로 돌리는것</li>\n</ul>\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 class-name\">String</span> <span class=\"token function\">substring</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> beginIndex<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>beginIndex <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><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\">StringIndexOutOfBoundsException</span><span class=\"token punctuation\">(</span>beginIndex<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">int</span> subLen <span class=\"token operator\">=</span> <span class=\"token function\">length</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> beginIndex<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>subLen <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span><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\">StringIndexOutOfBoundsException</span><span class=\"token punctuation\">(</span>subLen<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>beginIndex <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">return</span> <span class=\"token function\">isLatin1</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">?</span> <span class=\"token class-name\">StringLatin1</span><span class=\"token punctuation\">.</span><span class=\"token function\">newString</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">,</span> beginIndex<span class=\"token punctuation\">,</span> subLen<span class=\"token punctuation\">)</span>\n                      <span class=\"token operator\">:</span> <span class=\"token class-name\">StringUTF16</span><span class=\"token punctuation\">.</span><span class=\"token function\">newString</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">,</span> beginIndex<span class=\"token punctuation\">,</span> subLen<span class=\"token punctuation\">)</span><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--08"},"frontmatter":{"title":"[책리뷰/Effective Java] 예외","tags":["책리뷰","이펙티브자바"],"date":"2020-10-12","description":"아이템76) 가능한 한 실패 원자적으로 만들라"}}},"pageContext":{"slug":"/history/posts/2020-10-12--001--08"}},"staticQueryHashes":[]}