<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>front-end developer</title>
    <link>https://okchangwon.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Jul 2026 23:07:28 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>I'm Okay</managingEditor>
    <item>
      <title>@babel/preset-env와 @babel/plugin-transform-runtime의 corejs 3 폴리필  비교</title>
      <link>https://okchangwon.tistory.com/4</link>
      <description>&lt;p&gt;지난 포스팅(&lt;a href=&quot;https://okchangwon.tistory.com/3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Babel&amp;nbsp;Polyfill을&amp;nbsp;적용하는&amp;nbsp;방법들&lt;/a&gt;)에서&lt;/p&gt;
&lt;p&gt;&lt;b&gt;@babel/plugin-transform-runtime&amp;nbsp;&lt;/b&gt;플러그인에 &lt;b&gt;corejs&lt;/b&gt; 옵션을 줘서 폴리필하는 방법을 소개했었는데&lt;/p&gt;
&lt;p&gt;최근에 &lt;b&gt;@babel/preset-env&lt;/b&gt;의 &lt;b&gt;useBuiltIns&lt;/b&gt;, &lt;b&gt;corejs&lt;/b&gt; 옵션으로도 폴리필을 적용할 수 있다는걸 알게 되어서&lt;/p&gt;
&lt;p&gt;각 방법에 어떠한 차이가 있는지 간단히 조사해 보았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 Promise 를 사용하는 코드를 작성했다.&lt;/p&gt;
&lt;pre id=&quot;code_1566369486787&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Controller {
  constructor() {
    new Promise(resolve =&amp;gt; {
      setTimeout(resolve, 1000);
    })
    .then(() =&amp;gt; {
      console.log(&quot;Complete!!&quot;, Promise);
    });
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고&amp;nbsp;각각의&amp;nbsp;방법을&amp;nbsp;적용한&amp;nbsp;결과를&amp;nbsp;확인해&amp;nbsp;보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;@babel/preset-env 적용하여 변환된 코드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1566370468165&quot; class=&quot;javascript&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Controller = function Controller() {
  new Promise(function (resolve) {
    setTimeout(resolve, 1000);
  }).then(function () {
    console.log(&quot;Complete!!&quot;, Promise);
  });
};&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Promise를&amp;nbsp;사용하는&amp;nbsp;코드가&amp;nbsp;그대로&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;@babel/plugin-transform-runtime&amp;nbsp;적용하여&amp;nbsp;변환된&amp;nbsp;코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1566369630853&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var Controller = function Controller() {
  new _promise[&quot;default&quot;](function (resolve) {
    (0, _setTimeout2[&quot;default&quot;])(resolve, 1000);
  }).then(function () {
    console.log(&quot;Complete!!&quot;, _promise[&quot;default&quot;]);
  });
};&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Promise를&amp;nbsp;사용하는&amp;nbsp;코드가&amp;nbsp;_promise로&amp;nbsp;변경되었다.&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #333333;&quot;&gt;간단 정리&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;@babel/preset-env&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{ useBuiltIns: &amp;ldquo;&lt;span style=&quot;color: #f41a18;&quot;&gt;entry&lt;/span&gt;&amp;rdquo;, corejs: 3 }&lt;/p&gt;
&lt;p&gt;- 폴리필 메서드들을&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;전역 스코프에 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;- deprecated 된 @babel/polyfill을 대체한다.&lt;/p&gt;
&lt;p&gt;- 전역 오염 O&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;@babel/preset-env&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{ useBuiltIns: &amp;ldquo;&lt;span style=&quot;color: #f41a18;&quot;&gt;usage&lt;/span&gt;&amp;rdquo;, corejs: 3 }&lt;/p&gt;
&lt;p&gt;- 사용된 폴리필 메서드만 전역 스코프에 추가한다.&lt;/p&gt;
&lt;p&gt;- 전역 오염 O&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;@babel/plugin-transform-runtime&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{ corejs: 3 }&lt;/p&gt;
&lt;p&gt;- 사용된 폴리필 메서드만 포함시키고, 해당 폴리필 메서드를 사용하도록 원본 코드를 변경한다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 전역 오염 X&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;참고 문서&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#babelpreset-env&quot;&gt;https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#babelpreset-env&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1566370702777&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/zloirock/core-js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#babelpreset-env&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cPbwyT/hyCw96hfyd/SEsAY3qnIkuF8w4dKSTy70/img.jpg?width=400&amp;amp;height=400&amp;amp;face=118_64_197_150');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;zloirock/core-js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Standard Library. Contribute to zloirock/core-js development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>dev</category>
      <category>@babel/plugin-transform-runtime</category>
      <category>@babel/preset-env</category>
      <category>babel</category>
      <category>babel polyfill</category>
      <category>corejs</category>
      <category>fe</category>
      <category>frontend</category>
      <category>JavaScript</category>
      <category>polyfill</category>
      <author>I'm Okay</author>
      <guid isPermaLink="true">https://okchangwon.tistory.com/4</guid>
      <comments>https://okchangwon.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 21 Aug 2019 15:59:54 +0900</pubDate>
    </item>
    <item>
      <title>Babel Polyfill 적용하는 방법들</title>
      <link>https://okchangwon.tistory.com/3</link>
      <description>&lt;p&gt;babel은 기본적으로 es6(ecma2015) 문법으로 작성한 코드를 es5 환경에서 동작할 수 있도록 문법적인 변환을 해주지만&lt;/p&gt;
&lt;p&gt;es5에 존재하지 않는 es6의 메서드나 생성자들까지 지원해주지는 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그래서 es5로 동작하는 하위 브라우저를 지원하는 서비스를 개발할 때에는 폴리필을 추가하여 개발 편의성을 향상시킬&amp;nbsp;수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;폴리필을 추가하는 방법은 다양한데 대표적인 몇가지 방법을 소개한다.&lt;/p&gt;
&lt;h3&gt;전역에 폴리필 추가하기 (전역 오염 O)&lt;/h3&gt;
&lt;p&gt;babel 7.4.0 이후부터 &lt;a href=&quot;https://babeljs.io/docs/en/babel-polyfill&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;@babel/polyfill&lt;/a&gt;이 &lt;span style=&quot;color: #f41a18;&quot;&gt;deprecated&lt;/span&gt; 되고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/zloirock/core-js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;core-js&lt;/a&gt;와 &lt;a href=&quot;https://github.com/facebook/regenerator/tree/master/packages/regenerator-runtime&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;regenerator-runtime&lt;/a&gt;을 직접 사용하는 방식을 제안하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfZKAl/btqxjAbJ3S1/tBkm7QLxD8n4iFenheY75k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfZKAl/btqxjAbJ3S1/tBkm7QLxD8n4iFenheY75k/img.png&quot; data-alt=&quot;@babel/polyfill Deprecated 안내(https://www.npmjs.com/package/@babel/polyfill)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfZKAl/btqxjAbJ3S1/tBkm7QLxD8n4iFenheY75k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfZKAl%2FbtqxjAbJ3S1%2FtBkm7QLxD8n4iFenheY75k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;@babel/polyfill Deprecated 안내(https://www.npmjs.com/package/@babel/polyfill)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아래처럼 2개의 스크립트를 불러오면 전역 스코프에 폴리필이 추가되어&lt;/p&gt;
&lt;p&gt;IE 하위 브라우저에서도 Promise, Map, Set, Object.assign, Array.find 등의 메서드를 자연스럽게 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1565234943017&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://unpkg.com/core-js-bundle@3.1.4/index.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://unpkg.com/regenerator-runtime@0.13.3/runtime.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Webpack 번들에 포함하고 전역에 폴리필 추가하기&lt;span&gt;&amp;nbsp;&lt;/span&gt;(전역 오염 O)&lt;/h3&gt;
&lt;p&gt;entry 파일에서 아래와 같이 import만 해주면&lt;/p&gt;
&lt;p&gt;전역 스코프에 폴리필을 추가하는 코드가 함께 번들링 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1565239653024&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save core-js regenerator-runtime&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1565235422110&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import &quot;core-js/stable&quot;;
import &quot;regenerator-runtime/runtime&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;span&gt;Webpack 번들에 포함하고 번들 내부에 가두기 (전역 오염 X)&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;https://babeljs.io/docs/en/babel-plugin-transform-runtime&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;@babel/plugin-transform-runtime&lt;/a&gt;을 사용하면 &lt;/span&gt;&lt;span&gt;실제로 코드에서 사용한 폴리필 메서드만 번들에 포함된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;현재 시점에서 전역을 오염시키지 않는&amp;nbsp;&lt;u&gt;가장 바람직한 방법&lt;/u&gt;이라고 생각된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1565237983961&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime @babel/runtime-corejs3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;의존 모듈 설치 후 Webpack Config에 아래와 같이 Plugins 설정을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1565238021301&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;plugins&quot;: [
    [
      &quot;@babel/plugin-transform-runtime&quot;,
      {
        &quot;absoluteRuntime&quot;: false,
        &quot;corejs&quot;: 3,
        &quot;helpers&quot;: true,
        &quot;regenerator&quot;: true,
        &quot;useESModules&quot;: false
      }
    ]
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 내용은 corejs 3 사용을 기준으로 작성한 예제이며&lt;/p&gt;
&lt;p&gt;옵션에 대한 자세한 설명은&amp;nbsp;&lt;a href=&quot;https://babeljs.io/docs/en/babel-plugin-transform-runtime&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://babeljs.io/docs/en/babel-plugin-transform-runtime&lt;/a&gt;에서 확인할 수 있다.&lt;/p&gt;</description>
      <category>dev</category>
      <category>@babel/polyfill</category>
      <category>babel</category>
      <category>babel-polyfill</category>
      <category>babel/plugin-transform-runtime</category>
      <category>frontend</category>
      <category>JavaScript</category>
      <category>polyfill</category>
      <category>webpack</category>
      <author>I'm Okay</author>
      <guid isPermaLink="true">https://okchangwon.tistory.com/3</guid>
      <comments>https://okchangwon.tistory.com/3#entry3comment</comments>
      <pubDate>Thu, 8 Aug 2019 13:27:27 +0900</pubDate>
    </item>
    <item>
      <title>번들 시각화 도구 - Webpack Bundle Analyzer</title>
      <link>https://okchangwon.tistory.com/2</link>
      <description>&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Webpack을 사용하여 번들링되는 모듈을 분석해서 시각적으로 표현해주는 모듈이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모듈이 차지하는 용량에 따라 눈에 보이는 영역도 커지기 때문에&lt;/p&gt;
&lt;p&gt;어떤 모듈이 얼만큼의 용량을 차지하는지 쉽게 파악알 수 있다.&lt;/p&gt;
&lt;h3&gt;설치&lt;/h3&gt;
&lt;pre id=&quot;code_1565228949773&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save-dev webpack-bundle-analyzer&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;사용 방법&lt;/h3&gt;
&lt;pre id=&quot;code_1565228963735&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
  plugins: [
    new BundleAnalyzerPlugin()
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;레포트 화면&lt;/h3&gt;
&lt;p&gt;Webpack 빌드를 실행하면 아래와 같은 화면이 새창으로 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8EiuC/btqxjBn46Ex/qxphMxIgkbdj6a5KMYkEFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8EiuC/btqxjBn46Ex/qxphMxIgkbdj6a5KMYkEFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8EiuC/btqxjBn46Ex/qxphMxIgkbdj6a5KMYkEFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8EiuC%2FbtqxjBn46Ex%2FqxphMxIgkbdj6a5KMYkEFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;부가 기능&lt;/h3&gt;
&lt;h4&gt;레포트 화면을 static 파일로 생성하기&lt;/h4&gt;
&lt;pre id=&quot;code_1565231984445&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new BundleAnalyzerPlugin({
  analyzerMode: &quot;static&quot;, // 기본값 &quot;server&quot;
  reportFilename: &quot;파일명&quot; // 기본값 &quot;report.html&quot;
})&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;번들할 때 새창 열리지 않게 하기&lt;/h4&gt;
&lt;pre id=&quot;code_1565232153849&quot; class=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new BundleAnalyzerPlugin({
  openAnalyzer: false // 기본값 true
})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webpack-contrib/webpack-bundle-analyzer&quot;&gt;https://github.com/webpack-contrib/webpack-bundle-analyzer&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1565233053645&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://github.com/webpack-contrib/webpack-bundle-analyzer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://github.com/webpack-contrib/webpack-bundle-analyzer&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HlcAq/hyCjTwznoo/oXKNGhQMUzsnWxbEejpJQ0/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;webpack-contrib/webpack-bundle-analyzer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Webpack plugin and CLI utility that represents bundle content as convenient interactive zoomable treemap - webpack-contrib/webpack-bundle-analyzer&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>dev</category>
      <category>Analyzer</category>
      <category>bundle analyzer</category>
      <category>frontend</category>
      <category>JavaScript</category>
      <category>webpack</category>
      <category>webpack bundle analyzer</category>
      <category>webpack-bundle-analyzer</category>
      <author>I'm Okay</author>
      <guid isPermaLink="true">https://okchangwon.tistory.com/2</guid>
      <comments>https://okchangwon.tistory.com/2#entry2comment</comments>
      <pubDate>Thu, 8 Aug 2019 11:44:19 +0900</pubDate>
    </item>
    <item>
      <title>객체 지향 설계 포인트</title>
      <link>https://okchangwon.tistory.com/1</link>
      <description>&lt;h2&gt;단일 책임&amp;nbsp;원칙&lt;/h2&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;책임에 따라 객체를 분리 한다.&lt;/li&gt;&lt;li&gt;예를 들면&amp;nbsp;아이템&amp;nbsp;목록을 관리하는 객체, 유저의 정보를 관리하는 객체 등&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;정보 은닉&lt;/h2&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;객체는 상태와 행위를 가진다.&lt;/li&gt;&lt;li&gt;외부에서 객체의&amp;nbsp;상태에 직접 접근하지&amp;nbsp;않고, 객체의 API를 통해야 한다.&lt;/li&gt;&lt;li&gt;예를 들어 외부에서&amp;nbsp;목록객체가&amp;nbsp;가득 찼는지를 판단하고 싶을때&lt;br /&gt;목록 객체의 아이템 갯수와 최대값을 직접 비교하는 것이 아니라&lt;br /&gt;목록 객체에 물어보면 된다. &lt;br /&gt;ex) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objList.length &amp;gt;= objList.max &amp;nbsp;&lt;b&gt;(X)&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objLIst.isFull() &amp;nbsp;&lt;b&gt;(O)&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;복합 객체의 API는 구성 요소의 API보다 단순해야 한다.&lt;/h2&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;큰 객체를 협력 객체의 그룹으로 나누기&lt;/li&gt;&lt;li&gt;작은 객체들을 큰 그룹으로 묶어서 감추기&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>dev</category>
      <category>OOP</category>
      <category>개발</category>
      <category>객체지향</category>
      <category>구조설계</category>
      <category>프로그래밍</category>
      <author>I'm Okay</author>
      <guid isPermaLink="true">https://okchangwon.tistory.com/1</guid>
      <comments>https://okchangwon.tistory.com/1#entry1comment</comments>
      <pubDate>Mon, 6 Jun 2016 15:47:32 +0900</pubDate>
    </item>
  </channel>
</rss>