{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2020-10-04--003--05","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":"d302186b-4cb1-5cd6-9529-4f32efc57074","html":"<h2>아이템5) 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라</h2>\n<ul>\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 keyword\">class</span> <span class=\"token class-name\">SpellChecker</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">Lexicon</span> dictionary<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">public</span> <span class=\"token class-name\">SpellChecker</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Lexicon</span> dictionary<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>dictionary <span class=\"token operator\">=</span> <span class=\"token class-name\">Objects</span><span class=\"token punctuation\">.</span><span class=\"token function\">requiredNonNull</span><span class=\"token punctuation\">(</span>dictionary<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">isValid</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> word<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token class-name\">List</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">></span></span> <span class=\"token function\">suggestions</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> typo<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3>생성자에 자원 팩터리를 넘겨주는 방식 (Factory Method Pattern)</h3>\n<ul>\n<li>클라이언트가 제공한 팩터리가 생성한 타일들로 구성된 모자이크를 만드는 메서드</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">Mosaic</span> <span class=\"token function\">create</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Supplier</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token operator\">?</span> extens <span class=\"token class-name\">Tile</span><span class=\"token punctuation\">></span></span> tileFactory<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span> <span class=\"token punctuation\">}</span></code></pre></div>\n<h5>참고</h5>\n<ul>\n<li><a href=\"https://shlee0882.tistory.com/195\">Supplier 예제</a></li>\n</ul>","fields":{"tagSlugs":["/tags/책리뷰/","/tags/이펙티브자바/"],"slug":"/history/posts/2020-10-04--003--05"},"frontmatter":{"title":"[책리뷰/Effective Java] 객체 생성과 파괴","tags":["책리뷰","이펙티브자바"],"date":"2020-10-04","description":"아이템5) 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라"}}},"pageContext":{"slug":"/history/posts/2020-10-04--003--05"}},"staticQueryHashes":[]}