{"data":{"site":{"siteMetadata":{"title":"lastrites2018","author":"lastrites2018","siteUrl":"https://lastrites2018.netlify.com","comment":{"disqusShortName":"","utterances":"lastrites2018/gatsby-first-blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"5bb213e5-b6f0-5b26-925b-0927ed01ee72","excerpt":"Instantiation Patterns ES6 전의 Class 선언 방식 Functional Functional Shared Prototypal Pseudoclassical Class는 하나의 정형화 된 모델(틀)을 만들어 두고, 그 모델을 기반으로 한 인스턴스(복제품)를 만들기 위해 사용 Functional 인스턴스를 생성할 때 마다 모든 메소드를 someInstance에게 할당하므로, 각각의 인스턴스들이 메소드의 수만큼의 메모리를 더 차지함. Functional Shared…","html":"<h2 id=\"instantiation-patterns\"><a href=\"#instantiation-patterns\" aria-label=\"instantiation patterns permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Instantiation Patterns</h2>\n<p>ES6 전의 Class 선언 방식</p>\n<ol>\n<li>Functional</li>\n<li>Functional Shared</li>\n<li>Prototypal</li>\n<li>Pseudoclassical</li>\n</ol>\n<p>Class는 하나의 정형화 된 모델(틀)을 만들어 두고, 그 모델을 기반으로 한 인스턴스(복제품)를 만들기 위해 사용</p>\n<ol>\n<li>Functional</li>\n</ol>\n<p>인스턴스를 생성할 때 마다 모든 메소드를 someInstance에게 할당하므로, 각각의 인스턴스들이 메소드의 수만큼의 메모리를 더 차지함.</p>\n<ol start=\"2\">\n<li>Functional Shared</li>\n</ol>\n<p>프로퍼티(someInstance) 객체와 메소드(someMethods) 객체를 분리. 그 둘을 합치는 extend 함수를 만들어서 내부에서 합쳐줌. someMethods라는 객체에 있는 메소들의 메모리 주소만을 참조하여, Functional에 비해 메모리 효율이 상승</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> <span class=\"token function-variable function\">extend</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>to<span class=\"token punctuation\">,</span> <span class=\"token keyword\">from</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">var</span> key <span class=\"token keyword\">in</span> <span class=\"token keyword\">from</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    to<span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">from</span><span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<ol start=\"3\">\n<li>\n<p>Prototypal</p>\n<p>Functional Shared에서 <code class=\"language-text\">var someInstance = {}</code> 부분을</p>\n</li>\n</ol>\n<p><code class=\"language-text\">var someInstacne = Object.create(someMethods);</code> 로 변경해준 걸로 끝.</p>\n<p>Object.create란 특정 객체를 프로토타입으로 하는 객체를 생성해주는 함수</p>\n<ol start=\"4\">\n<li>Pesudoclasscial (가장 많이 쓰는 방식)</li>\n</ol>\n<p>메소드를 프로토타입으로 바꿔주고, 프로퍼티 객체에선 this를 사용해서 지칭해줌.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">var</span> <span class=\"token function-variable function\">Robot</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span>position<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>position <span class=\"token operator\">=</span> position\n<span class=\"token punctuation\">}</span>\n\nRobot<span class=\"token punctuation\">.</span>prototype<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">clean</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>position <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">var</span> robot1 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Robot</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">var</span> robot2 <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Robot</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// 찍어낼 때에 new operator 를 붙여줘야 함.</span></code></pre></div>\n<p>키/값 저장소로는 객체, 숫자 인덱스를 가진 저장소로는 배열을 쓰는 게 좋다.</p>","frontmatter":{"title":"Instantiation Patterns","date":"September 25, 2018"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/til/20180925 Instantiation Patterns/","previous":{"fields":{"slug":"/til/20180922 IM08D06 DATA Structure Day 4/"},"frontmatter":{"title":"Immersive Sprint - DATA Structure Day 4","category":"TIL"}},"next":{"fields":{"slug":"/til/20180927 IM08D07, 20180928 IM08D08 SubClass Dance Party/"},"frontmatter":{"title":"Immersive Sprint - SubClass Dance Party","category":"TIL"}}}}