<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ideveloper's software blog </title>
    <link>https://ideveloper2.tistory.com/</link>
    <description>-멋사 중앙대 6기 운영진
-멋사 5기
-공개 sw개발자센터 덤블도어 챗봇 프로젝트 컨트리뷰터

-React
-Node.js
-Ruby on rails</description>
    <language>ko</language>
    <pubDate>Mon, 6 Jul 2026 05:35:43 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Ideveloper2</managingEditor>
    <image>
      <title>Ideveloper's software blog </title>
      <url>https://tistory1.daumcdn.net/tistory/2856737/attach/2a03fed3260a4d7abc094d620083f33d</url>
      <link>https://ideveloper2.tistory.com</link>
    </image>
    <item>
      <title>React -  When to useMemo and useCallback (번역 글)</title>
      <link>https://ideveloper2.tistory.com/174</link>
      <description>&lt;blockquote data-ke-style=&quot;normal&quot;&gt;&lt;span&gt;본 글은 원작자&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://twitter.com/kentcdodds&quot;&gt;Kent C. Dodds&lt;/a&gt;&lt;span&gt;의 허락을 맡고 진행한 번역입니다. 원 글은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://kentcdodds.com/blog/usememo-and-usecallback&quot;&gt;https://kentcdodds.com/blog/usememo-and-usecallback&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;입니다.&lt;br /&gt;&lt;br /&gt;useMemo와 useCallback을 어떻게 사용해야하고 주의할점은 무엇인지 파악해 봅시다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;useMemoUseCallback.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca42QJ/btqv7COWfUT/rpN0DPYMCVO7eoJVN3rMQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca42QJ/btqv7COWfUT/rpN0DPYMCVO7eoJVN3rMQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca42QJ/btqv7COWfUT/rpN0DPYMCVO7eoJVN3rMQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca42QJ%2Fbtqv7COWfUT%2FrpN0DPYMCVO7eoJVN3rMQk%2Fimg.png&quot; data-filename=&quot;useMemoUseCallback.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;p&gt;&lt;a href=&quot;https://ideveloper2.dev/blog/2019-06-14--when-to-use-memo-and-use-callback/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ideveloper2.dev/blog/2019-06-14--when-to-use-memo-and-use-callback&lt;/a&gt;/&amp;nbsp; (옆의 리뉴얼된 블로그글 링크에서 확인하시기 바랍니다)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1560581221950&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://ideveloper2.dev/blog/2019-06-14--when-to-use-memo-and-use-callback/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-original-url=&quot;https://ideveloper2.dev/blog/2019-06-14--when-to-use-memo-and-use-callback/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/x2TSj/hyBBLxW1n9/LcewATs2sgDTFZlogqwEtk/img.png?width=1180&amp;amp;height=1012&amp;amp;face=156_88_196_132,https://scrap.kakaocdn.net/dn/ckYdL0/hyBAqoGBCE/JeWBNiOupDJG3fzcrfUgt1/img.png?width=900&amp;amp;height=300&amp;amp;face=0_0_900_300');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Steady Study&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Ideveloper Front end Developer who steadily study&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;ideveloper2.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Front end/React</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/174</guid>
      <comments>https://ideveloper2.tistory.com/174#entry174comment</comments>
      <pubDate>Sat, 15 Jun 2019 15:47:46 +0900</pubDate>
    </item>
    <item>
      <title>frontend - 프론트엔드 성능 최적화 기본</title>
      <link>https://ideveloper2.tistory.com/173</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;frontend-default.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yy6Vn/btqvpkbBDq9/2OpkaKpPsVQKQq7dedfeJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yy6Vn/btqvpkbBDq9/2OpkaKpPsVQKQq7dedfeJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yy6Vn/btqvpkbBDq9/2OpkaKpPsVQKQq7dedfeJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyy6Vn%2FbtqvpkbBDq9%2F2OpkaKpPsVQKQq7dedfeJ1%2Fimg.png&quot; data-filename=&quot;frontend-default.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;p&gt;프론트엔드 성능 최적화의 기본(?!)이 될만한 개념들에 대해 조사하여 개편한 블로그에 정리해 보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;포스팅 링크 :&amp;nbsp;&lt;a href=&quot;https://ideveloper2.dev/blog/2019-05-18--front-end-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94-%EA%B8%B0%EB%B3%B8/&quot;&gt;https://ideveloper2.dev/blog/2019-05-18--front-end-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94-%EA%B8%B0%EB%B3%B8/&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;- 성능 측정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - 브라우저 렌더링 과정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;- 웹페이지 로딩 최적화&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - 브라우저 기준 최적화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - 사용자 기준 최적화&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - 자바스크립트, css 최적화&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;- 웹페이지 렌더링 최적화&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - dom 조작으로 인한 렌더트리 변경&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - reflow, repaint&lt;/p&gt;
&lt;p&gt;&amp;nbsp; - layout 최적화&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front end</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/173</guid>
      <comments>https://ideveloper2.tistory.com/173#entry173comment</comments>
      <pubDate>Sun, 19 May 2019 01:25:21 +0900</pubDate>
    </item>
    <item>
      <title>React - Thinking about emotion js vs styled component</title>
      <link>https://ideveloper2.tistory.com/172</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;emotionandstyled 복사본.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPXPrA/btqu1smPuRY/zkYjj61KVhblKd7QcMZgQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPXPrA/btqu1smPuRY/zkYjj61KVhblKd7QcMZgQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPXPrA/btqu1smPuRY/zkYjj61KVhblKd7QcMZgQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPXPrA%2Fbtqu1smPuRY%2FzkYjj61KVhblKd7QcMZgQk%2Fimg.png&quot; data-filename=&quot;emotionandstyled 복사본.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;h2&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;React&amp;nbsp; (&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Thinking&amp;nbsp;about&amp;nbsp;emotion&amp;nbsp;js&amp;nbsp;vs&amp;nbsp;styled&amp;nbsp;component)&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;emotion.js와 styled component를 비교하고, 관련 예시로 면밀히 분석해보는 글을 새롭게 개편한 블로그에 포스팅 해보았습니다.&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&lt;a href=&quot;https://ideveloper2.dev/blog/2019-05-05--thinking-about-emotion-js-vs-styled-component/&quot;&gt;https://ideveloper2.dev/blog/2019-05-05--thinking-about-emotion-js-vs-styled-component/&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;font-size: 1.25em;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front end/React</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/172</guid>
      <comments>https://ideveloper2.tistory.com/172#entry172comment</comments>
      <pubDate>Mon, 6 May 2019 01:55:56 +0900</pubDate>
    </item>
    <item>
      <title>React - How Are Function Components Different from Classes? (함수형 컴포넌트와 클래스 컴포넌트는 어떻게 다른가?) 번역</title>
      <link>https://ideveloper2.tistory.com/171</link>
      <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99982D425C8E0F742A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99982D425C8E0F742A&quot; width=&quot;820&quot; height=&quot;261&quot; filename=&quot;스크린샷 2019-03-17 오후 5.44.13.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt; color: rgb(92, 209, 229);&quot;&gt;React&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt; background-color: rgb(92, 209, 229); color: rgb(255, 255, 255);&quot;&gt;:How Are Function Components Different from Classes? (함수형 컴포넌트와 클래스 컴포넌트는 어떻게 다른가?) 번역&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;새롭게 개편한 블로그에 글을 작성하였습니다. :) 의역이 들어간 부분이 있어 피드백 주시면 감사하겠습니다&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;링크:&lt;/b&gt;&amp;nbsp; &lt;a href=&quot;https://ideveloper2.dev/blog/2019-03-12--how-are-function-components-different-from-classes/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://ideveloper2.dev/blog/2019-03-12--how-are-function-components-different-from-classes/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Front end/React</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/171</guid>
      <comments>https://ideveloper2.tistory.com/171#entry171comment</comments>
      <pubDate>Sun, 17 Mar 2019 18:14:54 +0900</pubDate>
    </item>
    <item>
      <title>React - React Concurrent Mode</title>
      <link>https://ideveloper2.tistory.com/170</link>
      <description>&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot; face=&quot;-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol&quot;&gt;&lt;span style=&quot;font-size: 24pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;React&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot; face=&quot;-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol&quot;&gt;&lt;span style=&quot;font-size: 24pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(255, 255, 255); background-color: rgb(61, 183, 204);&quot;&gt;:React - React Concurrent Mode&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;|&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;React&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;Concurrent Mode&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;최근 리액트 16.8이 릴리즈 되고 React hook이 정식으로 포함 되면서 React Hook이 매우 핫한데요, 리액트팀의 React Hook&amp;nbsp;다음 로드맵&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;인 react의 concurrent mode에 대해서 미리 살펴보고자, 사내 스터디에서 관련 자료를 조사하고 정리했던 내용을 블로그에 정리해 보았습니다:)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아직 정식으로 발표 된 내용이 많이 없어 관련 자료를 조사하며, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;의역&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 들어간 부분이 있을거라 참고하고 보시고 틀린 부분은 피드백 주시면&amp;nbsp;될 것 같습니다.! 그리고, React Concurrent mode와 관련해 아직은 정식으로 확정된 내용이 많이 없어, 변경될 가능성이 충분하니 참고만 하시고 읽으시길 바랍니다 :)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;리액트 로드맵&lt;/span&gt; :&amp;nbsp;&lt;a href=&quot;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992E903E5C5EDA5B1E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992E903E5C5EDA5B1E&quot; width=&quot;820&quot; height=&quot;458&quot; filename=&quot;Image from iOS.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.2;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;Concurrent React는 많은 작업들을 한번에, 그들의 우선순위를 바꿔 가면서 동작하게 할 수 있게 한다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;yt-formatted-string force-default-style=&quot;&quot; class=&quot;style-scope ytd-video-primary-info-renderer&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;-Concurrent Rendering in React - Andrew Clark&amp;nbsp;- React Conf 2018 -&lt;/span&gt;&lt;/span&gt;&lt;/yt-formatted-string&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.2;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52355004-d6cf6600-2a74-11e9-9a95-60d0939a3a67.png&quot; alt=&quot;2019-02-07 1 07 47&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.2;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;시작하기에 앞서&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;우선 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;react concurrent mode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에 대한 언급은 2018년 4월경 아이슬란드에서 있었던 jsconf 에서의 Dan Abramov의&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;yt-formatted-string force-default-style=&quot;&quot; class=&quot;style-scope ytd-video-primary-info-renderer&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Beyond React 16 에서(&lt;/span&gt;&lt;/yt-formatted-string&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nLF0n9SACd4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://www.youtube.com/watch?v=nLF0n9SACd4&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;yt-formatted-string force-default-style=&quot;&quot; class=&quot;style-scope ytd-video-primary-info-renderer&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;) 시작되&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/yt-formatted-string&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;yt-formatted-string force-default-style=&quot;&quot; class=&quot;style-scope ytd-video-primary-info-renderer&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/yt-formatted-string&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;yt-formatted-string force-default-style=&quot;&quot; class=&quot;style-scope ytd-video-primary-info-renderer&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;또한,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/yt-formatted-string&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;2018년 10월경에 있었던 React Conf 에서&amp;nbsp;리액트 팀의 코어 개발자인&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: var(--ytd-video-primary-info-renderer-title-color, var(--yt-spec-text-primary)); font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Andrew&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; Clark가 (&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ByBPyMBTzM0&amp;amp;t=1305s&quot; rel=&quot;nofollow&quot; style=&quot;color: rgb(3, 102, 214); font-size: 16px; background-color: transparent; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://www.youtube.com/watch?v=ByBPyMBTzM0&amp;amp;t&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;관련 내용을 발표하기도 하였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;먼저&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; Concurrent&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 라는 단어는 &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;병행성&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 이라는 의미를 가지고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React의 Concurrent mode는 초기에는&lt;/span&gt;&lt;code style=&quot;color: rgb(36, 41, 46); box-sizing: border-box; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; margin: 0px; padding: 0.2em 0.4em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;async mode&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;라고&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;종종 불리곤 했었는데, 추후에 리액트팀에서는 리액트가 가지는 다른 우선순위 (priority of dom update, priorty of api) 에서의 task들에 대한 리액트의 수행능력을 강조하기 위해서, concurrent mode라고 이름을 바꾸었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt;&quot;&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&quot;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;i style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Concurrent React는 많은 작업을 한번에, 그들의 우선순위를 바꿔 가면서 동작하게 할 수 있게 한다.&quot;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;라고 위에서&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Andrew&amp;nbsp;Clark 이 말한 내용을&amp;nbsp; 곱씹어 보면 왜 Concurrent 라는 단어를 선택했는지도 엿볼수 있게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0.25em; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;핵심&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 14pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;우선 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;react&amp;nbsp;concurrent mode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;의 지향점을 먼저 살펴보면 아래와 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;code style=&quot;color: rgb(106, 115, 125); box-sizing: border-box; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; margin: 0px; padding: 0.2em 0.4em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;Concurrent React&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;는 위와 같은 특징들 덕분에 유저의 디바이스와 네트워크를 리액트 앱에 적응 시키고, 빠른 인터렉션인 상황에는 즉각적인 느낌을 주고, 느린 인터렉션은 그럴만한 이유가 있다는 느낌을 주게 합니다. (adapt to the user's device and network, allowing for fast interactions to feel instant while slower interactions feel responsive)&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52327139-5a199900-2a2e-11e9-8842-2fd5da02e919.png&quot; alt=&quot;2019-02-06 4 41 31&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;리액트 공식문서에 소개된 react concurrent mode&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Link:&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;&lt;a href=&quot;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html#react-16x-q2-2019-the-one-with-concurrent-mode&quot; rel=&quot;nofollow&quot; style=&quot;color: rgb(3, 102, 214); background-color: transparent; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html#react-16x-q2-2019-the-one-with-concurrent-mode&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;위의 링크에 들어가면 리액트 팀의 공식 사이트에 로드맵상 react concurrent mode에 대해 설명한 내용을 확인 할 수 있는데요, 그중 일부를 발췌해 아래에 적은 내용입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; margin: 0px; padding: 0.2em 0.4em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;Concurrent Mode&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;는 리액트 앱이 조금더 메인 thread에 blocking 없이 컴포넌트 tree상에서 rendering 하는데에 책임을 가집니다. cpu관점에서는 리액트를 긴 시간동안 render 할때, 높은 우선순위의 이벤트들을 dom update의 우선순위를 핸들링하는데에 끼어들수 있도록 허락해줍니다.그리고 i/o관점에서는 Concurrent mode는 또한 Suspense라는 feature를 통해 빠른 연결을 통해 불필요한 로딩을 skip하고 사용자 경험을 증대시킵니다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Concurrent 리액트는 Time Slicing, 그리고 React Suspense 같은 feature들을 포함하고 있습니다. scheduler 그리고 react-cache 같은 새로운 라이브러리 들도 소개 되고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; margin: 0px; padding: 0.2em 0.4em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;Concurrent mode&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;는 리액트의 비전 중 큰 부분을 차지합니다. CPU-영역의 작업에서는, non-blocking rendering을 허가하고, application을 복잡한 구조의 컴포넌트 트리에서 책임을 갖게 합니다. IO-영역에서는, Concurrent mode는 Suspense를 더 좋게 만듭니다. 만약 네트워크가 충분히 빠르다면, 로딩 인디케이터를 보여주는것을 피하게 합니다. 또한 Concurrent mode는 협력적인 main thread scheduler에 의존하고 있고, 리액트팀은 크롬 팀과 이러한 기능들을 브라우저에게 옮기기 위해 협업하고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(61, 183, 204);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time slicing and Suspense&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;우선 React concurrent mode는 Time slicing (CPU&amp;nbsp;bound) 그리고 Suspense (IO bound) 이 두가지의 feature로 나뉘게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow-wrap: break-word; font-weight: bolder; color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;CPU Bound&lt;/span&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;는 프로세스가 진행되는 속도가 CPU 속도에 의해 제한되는 것을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; overflow-wrap: break-word; font-weight: bolder; color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;I / O Bound&lt;/span&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;는 프로세스가 진행되는 속도가 I / O 하위 시스템의 속도에 의해 제한됨을 의미합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;CPU bound&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;와 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;IO bound&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에 대한 설명은 아래 첨부한 링크를 참고하면 더 쉽게 알수 있을것입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;font color=&quot;#24292e&quot; face=&quot;-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/868568/what-do-the-terms-cpu-bound-and-i-o-bound-mean&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://stackoverflow.com/questions/868568/what-do-the-terms-cpu-bound-and-i-o-bound-mean&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;font color=&quot;#24292e&quot; face=&quot;-apple-system, system-ui, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;img width=&quot;824&quot; alt=&quot;2019-02-05 11 27 07&quot; src=&quot;https://user-images.githubusercontent.com/26598542/52347752-117dd200-2a66-11e9-981f-f618a82eee66.png&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52348823-9b2e9f00-2a68-11e9-962f-bfdae83a3222.png&quot; alt=&quot;2019-02-06 11 39 48&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;결론적으로 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Concurrent React&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에서의 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time Slicing&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 그리고&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; Suspense&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;의 특징은 아래 첨부한 React conf 발표 중 캡쳐한 사진 에서&amp;nbsp;살펴볼수 있는데요, 뒤에 그 각각의 특징들을 더 자세히 살펴 보겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52325438-5aaf3100-2a28-11e9-8349-a40a708325f1.png&quot; alt=&quot;2019-02-06 3 59 45&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time Slicing&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time Slicing 기법은 rendering&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;프로세스가 진행되는 속도가 CPU 속도에 의해 제한되는 상황일때&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;높&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;은 우선순위의 업데이트가 낮은 우선순위의 업데이트에 의해 block 되지 않는 일반적인 기법입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time Slicing is a generic way to ensure that high-priority updates don’t get blocked by a low-priority update. Problems it solves: When rendering is CPU-bound.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;High Priority: Updates involving user input (e.g. text inputs)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;Low Priority: Updates involving data loading or expensive calculation&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;우선 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time Slicing &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기법이 적용 될수 있는건&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;react 16으로 업데이트 되면서 성능이 최적화 될수 있었던 큰 특징인 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React Fiber&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;라는 context안에서 돈다는&amp;nbsp;점 덕분인데요,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; background-color: transparent; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;요약&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;해서 말하자면 컴포넌트 업데이트가 되는 과정을&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;Render Reconciliation,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Commit&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;두가지 phase&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;로 분리하면서&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;Source Sans Pro&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Interruptible&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;한 시점이 생기고, 이&amp;nbsp;과정 속에서 우선순위를 핸들링 할수 있게 되는 것입니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React Fiber 관련 링크&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(3, 102, 214); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(61, 183, 204); font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://tech.wanted.co.kr/frontend/2018/01/07/react-fiber.html&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://tech.wanted.co.kr/frontend/2018/01/07/react-fiber.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아래는 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;react concuurent &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에 대한 내용이 잘 정리 되어 있는&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/sw-yx/fresh-concurrent-react/blob/master/apis/time-slicing.md&quot; style=&quot;color: rgb(3, 102, 214); background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://github.com/sw-yx/fresh-concurrent-react/blob/master/apis/time-slicing.md&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;에서 발췌한 time slicing 관련 내용입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote style=&quot;box-sizing: border-box; margin: 0px 0px 16px; border-left-width: 0.25em; border-left-color: rgb(223, 226, 229); color: rgb(106, 115, 125); padding: 0px 1em; font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;p style=&quot;box-sizing: border-box; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;Time slicing&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(116, 116, 116); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;을 통해, 리액트는 이제 여러개의 frame으로 퍼져나가는 렌더링 작업들, idle callback등의 작업이 이뤄지는 동안 자식 컴포넌트들의 업데이트 계산을 chunk로 나누어서 하였다. 이것은 느린 device들의 UI responsiveness 를 향상 시켰다. Time slice는 모든 어려운 cpu 스케쥴링 작업을 개발자가 신경쓸 필요없이 훌륭한 작업을 해낸다.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/8769291810ef311f7eb2a5b41cb2f71394bd60a2/68747470733a2f2f626c6f672e7075736865722e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031382f30352f74696d652d736c6963696e672d71756f74652d31303234783535352e6a706567&quot; alt=&quot;&quot; data-canonical-src=&quot;https://blog.pusher.com/wp-content/uploads/2018/05/time-slicing-quote-1024x555.jpeg&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time slicing 의 특징&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;리액트는 렌더링 되는 동안 thread를 block하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;디바이스가 빠르면 synchronous하게 작동하는것 처럼 느끼게 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;디바이스가 느리면 그럴만한 이유가 있는것 처럼 느끼게 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;오직, 마지막으로 렌더링 된 상태만 display 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time slicing 관련 Demo&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Time slicing&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;과 관련한 Demo는 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Dan abramov&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가&amp;nbsp; js conf 에서&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;발표한 Beyond React 16 영상에서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가장 잘 확인&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;할 수 있는데요,&lt;/span&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nLF0n9SACd4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;ht&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nLF0n9SACd4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;tps://www.youtube.com/watch?v=nLF0n9SACd4&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 3분 부터 시작&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;, 아래 관련 예제 코드를 첨부하긴 하지만 그렇게 긴 시간은 아니니,&amp;nbsp;영상을 보는것을 추천 드립니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 12pt; color: rgb(61, 183, 204);&quot;&gt;&lt;a href=&quot;https://codesandbox.io/s/xl3rjr9mjo&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://codesandbox.io/s/xl3rjr9mjo&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 링크를 들어가면 관련 코드와 예제를 보실 수 있고,&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;예제 자체는&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(61, 183, 204);&quot;&gt;&lt;a href=&quot;https://timeslicing-unstable-demo.surge.sh/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://timeslicing-&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://timeslicing-unstable-demo.surge.sh/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;unstable-demo.surge.sh&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://timeslicing-unstable-demo.surge.sh/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 링크로 가시면 확인 할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아래는 Dan abramov의 영상 내용을 요약한 내용입니다. (앞에서 말씀 드렸듯 영상을 보는것을 추천드립니다.)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;예제에서는 유저가 입력한 인풋값에 따라 그래프상의 노드들이 무한정 늘어나는 예제인데요, 이 때 Synchronous, Debounce, Asynchronous(concurrnet)&amp;nbsp;세가지 모드를 인풋값을 무한정 늘려나갔을때의 상황을 비교함으로써, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;synchronous mode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;일때는 인풋을 늘려나갔을때 렌더링이 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;blocking&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(화면 상 빨간색, 노란색으로 보이는 것은 rendering이 blocking 되는 상황을 보여줍니다.) 되면서 한참뒤에 인풋값이 변경된 화면과, 그래프가 업데이트된 화면이 한참 뒤에 반영되고,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 480px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993A574A5C5EE60E34&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993A574A5C5EE60E34&quot; width=&quot;480&quot; height=&quot;307&quot; filename=&quot;2월-09-2019 23-38-41.gif&quot; filemime=&quot;image/gif&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이러한 사용자가 입력한 input이 많아지고, 빠르게 input을 늘려나가고&amp;nbsp;node가 많아진 상황에 rendering blocking을 해결 하기 위해, 차선책으로&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;debouce&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;를 통해 최종적으로 업데이트 된 화면을 볼수있게 적용할 순 있지만,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Computing power가 충분하고,&amp;nbsp;불필요한 상황 (&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;debounce가 적용되어 인풋값이 적은 상황에서 값을 입력하면 debounce 때문에 한참뒤에 그래프가&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;그려지는 걸&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;기다려야 하는 상황&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;) 이 발생합니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 480px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AFE8475C5EE64B2E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AFE8475C5EE64B2E&quot; width=&quot;480&quot; height=&quot;307&quot; filename=&quot;2월-09-2019 23-38-49.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;최종적으로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Asynchronous mode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;일때는 input 값의 입력으로 인한 렌더링의 변화가&amp;nbsp;그래프가 업데이트 되는 렌더링에 큰 영향을 주지 않으면서, 렌더링이 blocking 되지않는&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;time slicing&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 기법의 우위를 확인 할수 있습니다. 심지어&lt;b&gt; computing power 가 낮은&lt;/b&gt; 상황에서도 렌더링 blocking이 최적화 된 상황이므로, 유사하게 동작하게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; text-align: center; clear: none; float: none; line-height: 1.8;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 480px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E8E8505C5EE74202&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E8E8505C5EE74202&quot; width=&quot;480&quot; height=&quot;307&quot; filename=&quot;2월-09-2019 23-43-49.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52352499-0465e080-2a70-11e9-841b-e248d27c610b.png&quot; alt=&quot;2019-02-07 12 32 57&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React Suspense&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React Suspense&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 는 렌더링이 I/O bound일때 cache 에서 데이터를 불러올 때 렌더링을 suspend 하는 방식입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;React Suspense is a generic way for components to suspend rendering while they load data from a cache. Problems it solves: When rendering is I/O-bound.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;간단히 설명하자면,&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;빠른 네트워크 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;상황에서는 굳이 fallback ui를 보여줄 필요가 없으므로 (로딩 인디케이터) ,data를 fetch 하는 동안&amp;nbsp;컴포넌트를 background에서 렌더링 하고, tree가 모두 준비되면 display하는 방식입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;그러나 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;느린 네트워크 상황&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에서는 데이터를 불러올때 보여주는 fallback UI (place holder) 를 각각 data를 불러오는 영역(컴포넌트에)에 정확히&amp;nbsp;&amp;nbsp;배치(precisely control)&amp;nbsp;함으로써 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;다른 영역에서의 data fetch&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 때문에 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;페이지 전체&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;가 로딩되는 것을 기다리는 것을 방지 하게 되는 것입니다.&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;It is a fundamentally new capability that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;lets you render a component tree “in background”&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;while components are fetching data, and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;display them only after the whole tree is ready.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-bottom: 16px; box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;For slow connections, it gives you full control over where and when to show a placeholder. It doesn’t destroy the previous view while this is happening.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(116, 116, 116);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/acf1cdd06a5d555eaa9cffc2545f3d413aea2055/68747470733a2f2f626c6f672e7075736865722e636f6d2f77702d636f6e74656e742f75706c6f6164732f323031382f30352f73757370656e73652d71756f74652e6a706567&quot; alt=&quot;&quot; data-canonical-src=&quot;https://blog.pusher.com/wp-content/uploads/2018/05/suspense-quote.jpeg&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Suspense 의 특징&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;data가 준비될때까지 state update를 멈춘다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;add async data to any component without &quot;plumbing&quot;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;빠른 네트워크에서는, 모든 tree가 준비 된 후에 render 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;느린 네트워크에서는, 정확하게 로딩 스테이트를 control한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;high-level api와 low-level api가 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;S&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;uspense 관련 demo&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이 역시, Dan Abramov의 js conf 영상을 확인하면 쉽게 관련 demo 를 살펴 볼수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=nLF0n9SACd4&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://www.youtube.com/watch?v=nLF0n9SACd4&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;13분 24초~&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;그리고&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Andrew Clark의 2018 React Conf 에서도 역시 관련 demo 영상을 살펴 볼수있습니다.&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;(&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ByBPyMBTzM0&amp;amp;t=1305s&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; color: rgb(3, 102, 214); font-size: 16px; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://www.youtube.com/watch?v=ByBPyMBTzM0&amp;amp;t=1305s&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;영상에서는&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;react -&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;cache&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;를 활용해 기존에 data를 받아온 페이지는 빠르게 그 페이지를 보여주고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Suspense&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;에&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;해당하는&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Placeholder 컴포넌트에 &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&quot;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;maxDuration&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;을 넘겨, 해당하는 duration을 넘겼을때는 느린 네트워크로 감지하여 로딩 인디케이터를 보여주고, 아닐시에는 보여주지 않는 등, 다른 네트워크 상황에 유연하게 대처하고 있는 것을 확인 할 수 있었습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;a href=&quot;https://github.com/sw-yx/fresh-concurrent-react/blob/master/apis/react-suspense.md&quot; style=&quot;color: rgb(3, 102, 214); background-color: transparent; font-size: 16px; box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://github.com/sw-yx/fresh-concurrent-react/blob/master/apis/react-suspense.md&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;에서 이와&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;관련한 feature 들을 빠르게 확인 할수 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;영상에서 확인할 수 있듯이, 네트워크가 충분히 빠른 상황이면 불필요한 로딩 인디케이터를 보여주지 않고, 바로 tree가 준비되는대로 보여주고, (+ cache) 네트워크가 느린 상황에서만 fallback ui (로딩 인디케이터)를 보여주게 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아래 gif 파일에서의&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; latency&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;는 네트워크 상황을 뜻합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 16px; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;latency 1초일때와 3초일때 비교&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 480px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F3243A5C5EEF6A1A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F3243A5C5EEF6A1A&quot; width=&quot;480&quot; height=&quot;307&quot; filename=&quot;2월-10-2019 00-18-27.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46);&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;또한, 각각의 영역에 로딩 관련 인디케이터를 배치 함으로써 하나의 data fetch때문에&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&amp;nbsp;전체 페이지가 로딩 되는 듯이 보여주는게 아닌, 먼저 fetch 된 부분은 먼저 보여주고 나중에 data가 fetch 되는 부분은 나중에 보여줌으로써 사용자에게 더 나은 경험을 제공하고 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 480px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995216405C5EEE9B08&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995216405C5EEE9B08&quot; width=&quot;480&quot; height=&quot;307&quot; filename=&quot;2월-10-2019 00-11-39.gif&quot; filemime=&quot;image/gif&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46);&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Suspense 관련 DEMO 코드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46);&quot;&gt;&lt;a href=&quot;https://codesandbox.io/s/k3m2rq627o&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; font-size: 16px; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://codesandbox.io/s/k3m2rq627o&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 24pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt; 느낀점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/26598542/52355245-5826f880-2a75-11e9-942b-2501e181aae6.png&quot; alt=&quot;2019-02-07 1 11 39&quot; style=&quot;box-sizing: content-box; border-style: none; max-width: 100%;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;아직은 많은 개발자 들이 react hook에 관심을 가지고 있고, react concurrent mode가 정식 릴리즈 되려면 많은 기간이 남아 있긴 하지만, 언젠간 거쳐 가야 할 react concurrent mode에 대해 조사하면서 리액트 팀의 방향성에 대해서 미리 파악해 볼 수 있었고, 또한 크게 느꼈던 점은,&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;React concurrent mode&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;는&amp;nbsp;사용자의&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;computing power가 어떻든 (time slicing)&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt; , &lt;/span&gt;&lt;b style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;네트워크 상황이 어떻든 (Suspense)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;이에 맞게 유연하게 대처하는 feature들을 추가 함으로써, 이러한 기술적인 발전은 결국엔&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;사용자의 ux&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;를 고려한 feature들인것 임을 보고, &lt;/span&gt;&lt;b style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;맹목적인 기술 발전&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;에만 목매는 팀이 아닌것 같다는 점이 정말 감명깊었던 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0); font-size: 13px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;References&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html#react-16x-q2-2019-the-one-with-concurrent-mode&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;https://reactjs.org/blog/2018/11/27/react-16-roadmap.html#react-16x-q2-2019-the-one-with-concurrent-mode&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://medium.com/@rossbulat/react-lazy-suspense-and-concorrent-react-breakdown-with-examples-2758de98cb1c&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;https://medium.com/@rossbulat/react-lazy-suspense-and-concorrent-react-breakdown-with-examples-2758de98cb1c&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://github.com/sw-yx/fresh-concurrent-react/blob/master/Intro.md&quot; style=&quot;background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;https://github.com/sw-yx/fresh-concurrent-react/blob/master/Intro.md&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://twitter.com/dan_abramov/status/1040056722604417025%E2%80%A8&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;https://twitter.com/dan_abramov/status/1040056722604417025 &lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style=&quot;box-sizing: border-box; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://blog.pusher.com/time-slice-suspense-api-react-17/&quot; rel=&quot;nofollow&quot; style=&quot;background-color: transparent; box-sizing: border-box; color: rgb(3, 102, 214);&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(61, 183, 204);&quot;&gt;https://blog.pusher.com/time-slice-suspense-api-react-17/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Front end/React</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/170</guid>
      <comments>https://ideveloper2.tistory.com/170#entry170comment</comments>
      <pubDate>Sat, 9 Feb 2019 22:44:20 +0900</pubDate>
    </item>
    <item>
      <title>Javascript - 객체와 객체지향 프로그래밍</title>
      <link>https://ideveloper2.tistory.com/169</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 24pt;&quot;&gt;Javascript&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(61, 183, 204); color: rgb(255, 255, 255); font-size: 24pt;&quot;&gt;:객체와 객체지향 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(116, 116, 116);&quot;&gt;이 내용은 러닝 자바스크립트 의 내용을 참고해서 정리된 포스팅 글입니다. 그리고, 본인의 의견을 담아 내용을 더 추가하여 작성했습니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996EB7455C58380518&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996EB7455C58380518&quot; width=&quot;820&quot; height=&quot;322&quot; filename=&quot;스크린샷 2019-02-04 오후 10.02.26.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;프로퍼티 나열&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;어떤 컨테이너의 콘텐츠를 리스트로 나열하면, 배열이 바로 떠오르지만 객체를 생각하는 사람은 많이 없습니다. 객체도 배열과 같은&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;컨테이너 이며, 요소들의&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 나열&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;을 지원 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;단, 프로퍼티 나열에서 중요한점은 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;순서가 보장되지 않는다는 점&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;입니다. 자바스크립트가 순서를 명시적으로 보장하는 것도 아니고, 브라우저나 노드등의 프로그램에서 속도나 효율 향상을 목적으로 언제든 바꿀 수 있다고도 합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;font color=&quot;#3db7cc&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0);&quot;&gt;for ...in&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size:14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(0, 0, 0);&quot;&gt;아래에서의 hasOwnProperty 는, 상속 된 property가 for .. in에 나타날 위험을 제거 하기 위해 사용합니다. 다른 타입의 객체, 다른 사람이 만든 객체의 프로퍼티를 나열하다 보면 예상치 못한 상황이 생길 수 있으므로 hasOwnProperty를 쓴느것은 매우 중요하다고 합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt; , &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;b&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt; , &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;c&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3&lt;/span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;prop&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;obj&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;obj&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;hasOwnProperty&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;prop&lt;/span&gt;)) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;continue&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;`${&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;prop&lt;/span&gt;&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;}`&lt;/span&gt; : &lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;`${&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;obj&lt;/span&gt;[&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;prop&lt;/span&gt;]}&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;``&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;font color=&quot;#3db7cc&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Object.keys&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Object.keys 는 객체에서 나열 가능한 문자열 프로퍼티를 배열로 반환합니다. 아래 예제의 결과 값은 for ... in 루프를 썻을때와 같은 결과이고, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;hasOwnProperty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;를 체크할 필요는 없습니다. 그리고, 객체의 프로퍼티 키를 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;배열&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;로 가져와야 할때 편리하게 쓰일수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;a&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt; , &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;b&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt; , &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;c&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3&lt;/span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Object&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;keys&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;o&lt;/span&gt;).&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;forEach&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;prop&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;`${&lt;/span&gt;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;prop&lt;/span&gt;&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;}: ${&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;obj&lt;/span&gt;[&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;prop&lt;/span&gt;]&lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;}`&lt;/span&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체지향 프로그래밍&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체지향 프로그래밍 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;(OOP)는 컴퓨터 과학에서 전통적인 패러다임 입니다. OOP의 기본 아이디어는 단순하고 직관적입니다. 객체는 데이터와 기능을 논리적으로 묶어 놓은 것입니다. OOP는 우리가 사물을 이해하는 자연스러운 방식을 반영하도록 설계되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;자동차가 객체라면 그 데이터에는 제조사, 모델, 차량번호 등이 있을 것입니다. 그리고 그 기능으로는 가속,변속, 문 열기 등등이 있을것입니다. 또한 OOP는 이러한 사물에 관해 추상적으로(어떤 자동차), 구체적으로(특정 자동차) 생각 할 수 있게 합니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;본격적으로 시작하기 전에 OOP의 기본용어에 대해 살펴봅시다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;클래스&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;는 어떤 자동차처럼, 추상적이고 범용적인 것입니다. &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;인스턴스&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;는 특정 자동차 처럼 구체적이고 한정적인 것입니다. 기능은 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;메서드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 라고 불립니다. 클래스에 속하지만 특정 인스턴스에는 묶이지 않는 기능을 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;클래스 메서드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;라고 합니다. 시동을 거는 기능은 클래스 메서드라고 할 수 있는 것입니다. 인스턴스를 처음 만들 때는 생성자가 실행되고, 생성자는 객체 인스턴스를 초기화 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;OOP는 클래스를 계층적으로 분류하는 수단도 제공합니다. 예를 들어, 자동차보다 더 범용적인 운송수단 클래스가 있다치면, 운송수단을 자동차의 슈퍼클래스라 부르고 , 자동차를 운송 수단의 서브클래스 라 부르게 됩니다. 서브클래스 역시 서브클래스를 가질 수 있습니다. 예를들어 보트 서브클래스에는 요트, 카누 등의 서브클래스가 있을 수 있습니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0);&quot;&gt;클래스와 인스턴스 생성&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;ES6 이전에 자바스크립트에서 클래스를 만드는 건 직관적이지도 않고, 무척 번거러운 일이었다고 합니다. ES6에서는 클래스를 만드는 간편한 새 문법을 도입했다고 합니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Car&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;앞의 코드는 새 클래스 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Car&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;를 만들고, 인스턴스는 아래와 같이 new 키워드를 통해 만들 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;car1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;car2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0);&quot;&gt;클래스는 함수다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;ES6에서 class 키워드를 도입하기 전까지, 클래스를 만든다는 것은 곧 클래스 생성자로 사용할 함수를 만든다는 의미였습니다. class 문법이 훨씬 더 직관적이고 단순하지만 class는 단축 문법일 뿐이며 자바스크립트의 클래스 자체가 바뀐 것은 아닙니다. 따라서 자바스크립트의 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;클래스 자체를 이해&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;하는 것이 매우 중요하다고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-error&quot; style=&quot;box-sizing: border-box; color: rgb(255, 0, 0);&quot;&gt;#ES5&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ES5Car&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;make&lt;/span&gt; , &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;model&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;make&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;make&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;model&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;_userGears&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'P'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'N'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'R'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'D'&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;_userGear&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;userGears&lt;/span&gt;[&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-error&quot; style=&quot;box-sizing: border-box; color: rgb(255, 0, 0);&quot;&gt;#ES6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ES6Car&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;make&lt;/span&gt;,&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;model&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;make&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;make&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;model&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;userGears&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'P'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'N'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'R'&lt;/span&gt;,&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'D'&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;userGear&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;userGears&lt;/span&gt;[&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;typeof ES5Car 와 typeof ES6Car 역시 결과가 &quot;function&quot;으로 같을 것입니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;프로토타입&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;자바스크립트에서의 프로토타입에 관해 이해가 필요한데요, 이에 관해서는 &lt;/span&gt;&lt;a href=&quot;http://www.nextree.co.kr/p7323&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;http://www.nextree.co.kr/p7323&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;/ 이블로그를 추천해 드립니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;클래스의 인스턴스에서 사용 할 수 있는 매서드라고 하면 그건 프로토타입 메서드를 말하는 것입니다. 예를 들어 Car의 인스턴스에서 사용할수 있는 shift라는 메서드는 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;프로토타입 메서드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;입니다. 프로토타입 메서드는 Car.prototype.shift 처럼 표기하기도 합니다. Array.forEach를 Array.prototype.forEach라고 쓰는것과 마찬가지인 개념입니다. 많은 배열들에서 forEach 메서드를 쓸수  있는것 역시 상위 Array의 forEach 메서드를 쓰는 것이죠.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;모든 함수에는 prototype이라는 특별한 프로퍼티가 있습니다. 일반적인 함수 에서는 프로토타입을 사용할 일이 없지만, 객체 생성자로 동작하는 함수에서는 프로토타입이 대단히 중요합니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;함수의 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;prototype&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;은 프로퍼티가 중요해지는 시점은 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;new 키워드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;로 새 인스턴스를 만들었을 때 입니다. new 키워드로 만든 새 객체는 생성자의 prototype 프로퍼티에 접근할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;객체 인스턴스는 생성자의 prototype 프로퍼티를 __proto__ 프로퍼티에 저장합니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체의 프로퍼티나 메서드에 접근하려 할때, 그런 프로퍼티나 메서드가 존재하지 않으면, 자바스크립트는 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체의 프로토타입&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;에서 해당 프로퍼티나 메서드를 찾습니다. 클래스의 인스턴스는 모두 같은 프로토타입을 공유하므로, 프로토타입에 프로퍼티나 메서드가 있다면, 해당 클래스의 인스턴스는 모두 그 프로퍼티나 메서드에 접근할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;정적 메서드 (static method)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;메서드에는 인스턴스 메서드 외에도, 정적메서드 ( class method , static method) 가 있습니다. 이 메서드는 특정 인스턴스에 적용되지 않습니다.정적 메서드에서 this는 인스턴스가 아니라 클래스 자체에 묶입니다. &lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;정적 메서드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;는 클래스에 관련되지만 인스턴스와는 관련이 없는 범용적인 작업에 사용됩니다. 예제로 자동차 식별 번호 (VIN)을 붙이는 메서드를 생각해 봅시다. 개별 자동차가 자신만의 VIN을 붙이는것은 불가능하니, 이러한 상황에서는 정적 메서드를 사용하는 것이라고 합니다. 그리고 이러한 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;정적 메서드&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;는 여러 인스턴스를 대상으로 하는 작업에도 종종 쓰인다고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Car&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;vin&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;getNextVin&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;getNextVin&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;nextVin&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;areSame&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;car1&lt;/span&gt;,&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;car2&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;car1&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;vin&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;car2&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;vin&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;상속&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;클래스의 인스턴스는 클래스의 기능을 모두 상속합니다. 상속은 한단계로, 끝나지 않습니다. 객체의 프로토 타입에서 메서드를 찾지 못하면, 자바스크립트는 프로토타입의 프로토타입을 검색합니다. 프로토타입 체인은 이런식으로 만들어 집니다. 그러다 조건에 맞는 프로토 타입을 찾지 못하면 에러가 납니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;클래스의 계층 구조를 만들 때 프로토타입 체인을 염두해 도면 효율적인 구조를 만들 수 있습니다. 즉, 프로토 타입 체인에서 적절한 위치에 메서드를 정의하는 것입니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vehicle&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;passengers&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vehicle created'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;addPassenger&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;p&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;passengers&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;p&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Car&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Vehicle&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;super&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'car created'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;deployAirbags&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'BWOOSH'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; color: rgb(0, 0, 0); box-sizing: border-box; display: block;&quot;&gt;위의 예제에서, extends 키워드는 Car를 Vehicle의 서브클래스로 만듭니다. super( )는 슈퍼클래스의 생성자를 호출하는 특별한 함수입니다. 서브클래스에서는 이 함수를 반드시 호출해야 합니다. 호출하지 않으면 에러가 일어납니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; color: rgb(51, 51, 51); box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 16px; white-space: pre-wrap;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;리액트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;를 사용해서, &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;프론트개발&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;을 하시는 분이면,&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; Dan Abramov&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 가 쓴 &lt;/span&gt;&lt;a href=&quot;https://overreacted.io/how-does-react-tell-a-class-from-a-function/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;https://overreacted.io/how-does-react-tell-a-class-from-a-function/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 를 한번 읽어보는 것을 추천드립니다. 리액트팀이 리액트 내에서 어떻게 function 기반 컴포넌트와 class 기반 컴포넌트를 분류하는지, 리액트내에의 new 키워드에 대한설명, 그리고 위에서 말한 상속과 관련된 extends.React.component에 대한 설명 등등 아주 흥미로운 내용들이 많이 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; color: rgb(51, 51, 51); box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&quot;font-size: 14pt; color: rgb(0, 0, 0);&quot;&gt;다형성&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;다형성&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;이라는 단어는 객체지향 언어에서 여러 슈퍼클래스의 멤버인 인스턴스를 가리키는 말입니다. 대부분의 객체지향 언어에서 다형성은 특별한 경우에 속합니다. 자바스크립트는 느슨한 타입을 사용하고 어디서든 객체를 쓸 수 있으므로, 어떤 면에서는 자바스크립트의 객체는 모두 다형성을 갖고 있다고 할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt; &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체 프로퍼티 나열 다시보기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;ES6 클래스를 설계 의도대로 사용한다면 데이터 프로퍼티는 항상 프로토타입 체인이 아니라 인스턴스에 정의해야 합니다. 하지만 프로퍼티를 프로토타입에 정의하지 못하도록 강제하는 장치는 없으므로 확인하려면 항상 hasOwnProperty를 사용하는 편이 좋습니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Super&lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Super'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;isSuper&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Super&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;prototype&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;sneaky&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'not recommended'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Sub&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Super&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;constructor&lt;/span&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;super&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Sub'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;isSub&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;name, isSuper, isSub 프로퍼티는 모두 프로토타입 체인이 아니라 인스턴스에 정의됐습니다. (슈퍼클래스 생성자에서 선언한 프로퍼티는 서브클래스 인스턴스에도 정의됩니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;Object.keys 를 사용하면, 프로토타입 체인에 정의된 프로퍼티를 나열하는 문제를 피할 수 있습니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;다중 상속, 믹스인, 인터페이스&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;일부 객체지향 언어에서는 다중 상속이란 기능을 지원합니다. 이는 클래스가 슈퍼클래스 두개를 가지는 기능입니다. 그러나 다중 상속에는 충돌의 위험이 있다고 합니다. 예를 들어 어떤 클래스에 두개의 슈퍼 클래스가 있고, 두 슈퍼클래스에 모두 greet메서드가 있을때 어떤 메서드를 상속해야 할까?와 같은 문제입니다. 다중 상속 언어가 많은 이유는 이러한 문제를 피하기 위헤서라고 합니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;다중상속을 지원하지 않는 언어 중에는 그 대신 인터페이스 개념을 도입해서 이런 상황에 대처하는 언어가 많습니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;자바스크립트는 흥미로운 방식으로 이들을 절충했다고 합니다. 자바스크립트는 프로트타입 체인에서 야러 부모를 검색하지는 않으므로 단일 상속 언어라고 해야 하지만, 어떤 면에서는 다중 상속이나 인터페이스보다 더나은 방법을 제공합니다. (더 못할때도 있습니다.)&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;자바스크립트가 다중 상속이 필요한 문제에 대한 해답으로 내놓은 개념이 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;믹스인&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;입니다. 믹스인이란 기능을 필요한 만큼 섞어 놓은 것입니다. 자바스크립트는 느슨한 타입을 사용하고 관대한 언어이므로, 그어떤 기능이라도 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;언제든, 어떤 객체에든,&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; 추가 할 수 있습니다.아래는 makeInsurable 이라는 보험가입과 관련된 믹스인 예제입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n0&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 30px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;InsurancePolicy&lt;/span&gt;{}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;makeInsurable&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;o&lt;/span&gt;){&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;o&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;addInsurancePolicy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;p&lt;/span&gt;){ &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;insurancePolicy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;p&lt;/span&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;o&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;getInsurancePolicy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;() {&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;insurancePolicy&lt;/span&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;o&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;isInsured&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;(){&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!!&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;insurancePolicy&lt;/span&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;makeInsurable&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;prototype&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;car1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Car&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;car1&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;addInsurancePolicy&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;InsurancePolicy&lt;/span&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block; color: rgb(0, 0, 0);&quot;&gt;위와 같이 해주면, addInsurancePolicy 같은 메서드들은 모두 Car 클래스에 정의된 것 처럼 동작합니다. 개발자의 관점에서는 중요한 두 클래스를 관리 쉽게 만들었습니다. 자동차 회사에서 Car 클래스의 개발과 관리를 담당하고, 보험회사에서 InsurancePolicy 클래스와 makeInsurable 믹스인을 관리하게 됩니다.&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;b style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;요약&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;md-line md-end-block md-focus&quot; cid=&quot;n3&quot; mdtype=&quot;line&quot; style=&quot;box-sizing: border-box; display: block;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;객체지향 프로그래밍은 대단히 널리 쓰이는 패러다임이며, 그럴만한 이유가 있다고 합니다. 객체지향 프로그래밍을 사용하다보면 자연스레 관리하고, 디버그하고, 수저아기 쉬운 정리되고 캡슐화된 코드를 작성하게 됩니다. &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;자바스크립트의 OOP &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;구현은 비판을 자주 받는 편이지만, 자바스크립트의 OOP는 사실 매우 유연하고 강력하다고 합니다. 이로인해, 다른 객체지향 언어에서 하기 어려운 일도 할수 있기 때문입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>Computer Engineering/Javascript</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/169</guid>
      <comments>https://ideveloper2.tistory.com/169#entry169comment</comments>
      <pubDate>Sun, 3 Feb 2019 16:07:27 +0900</pubDate>
    </item>
    <item>
      <title>css - 스켈레톤 UI css 만으로 구성하기 with react</title>
      <link>https://ideveloper2.tistory.com/168</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 24pt;&quot;&gt;css&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(61, 183, 204); color: rgb(255, 255, 255); font-size: 24pt;&quot;&gt;:스켈레톤 UI css 만으로 구성하기&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 539px; width: 539px; height: 383px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999126495C4896912B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999126495C4896912B&quot; width=&quot;539&quot; height=&quot;383&quot; filename=&quot;스크린샷 2019-01-24 오전 1.29.48.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 539px; height: 383px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;Why ?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;특정 페이지를 개발할때, &lt;b&gt;로딩 스켈레톤&lt;/b&gt;을 구현해야 하는 상황이 있었습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;이 ui를 구현하기 위해 여러 라이브러리를 사용할 순 있겠지만, 이런 라이브러리들로 인해 프로젝트의 크기가 늘어나고, 불필요한 리소스 낭비가 될 수 있다는 생각도 들었습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;따라서, css만으로도 충분히 스켈레톤 ui를 구성 할수 있다 생각되어&amp;nbsp;css로 스켈레톤 ui, 그리고 그에대한 애니메이션을 구현해 보았었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;아래는 구현한 여러 스켈레톤 ui중 특정 페이지의 모바일 리스트 뷰에 해당하는 디자인 시안에 맞춰 본인이 구성한 UI입니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;UI를 구성하는 방식은&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;background-image&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; 와&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; background-size&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; css 속성을 활용해 임의의 스켈레톤 ui를 구성하여 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;수정해 사용하면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;background-image 로&amp;nbsp;&lt;b&gt;각각 요소들의 크기&lt;/b&gt;를 정해줌&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;background size로는 그&lt;b&gt; 요소들의 위치&lt;/b&gt;를 정해줌&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;| &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;How&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;1. 아래와 같이 구성할 뼈대를 만듭니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;iframe src=&quot;https://codesandbox.io/embed/7z7m3z3n2j&quot; style=&quot;width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;&quot; sandbox=&quot;allow-modals allow-forms allow-popups allow-scripts allow-same-origin&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;2. 반복되는 부분이 있다면 반복해 줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://codesandbox.io/embed/p7ywnpjxwj&quot; style=&quot;width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;&quot; sandbox=&quot;allow-modals allow-forms allow-popups allow-scripts allow-same-origin&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;3. 뭔가 아쉬우니 효과를 넣어 봅시다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;iframe src=&quot;https://codesandbox.io/embed/1v0q7nmopj&quot; style=&quot;width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;&quot; sandbox=&quot;allow-modals allow-forms allow-popups allow-scripts allow-same-origin&quot;&gt;&lt;/iframe&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;위와 같이 &lt;b&gt;html과&amp;nbsp; css&lt;/b&gt; 만으로 스켈레톤 ui를 구현하면, 리액트 프로젝트의 &lt;b&gt;번들사이즈&lt;/b&gt; 역시 다른 라이브러리를 사용해서 스켈레톤을 구현할때와 비교해 줄어들었고, 처음에는 레이아웃을 구성하는데 학습 비용이 있긴 하겠지만 익숙해지면 어떠한 스켈레톤 ui라도 유연하게 구현할 수 있겠다는 생각이 들었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;위 예시로는 &lt;b&gt;모바일 특정 화면&lt;/b&gt;에서만 구현한 스켈레톤 ui를&amp;nbsp;예시로 보여주었는데요, 같은 화면에 대한 여러 반응형 뷰에대한 스켈레톤 UI 역시 css 단에서 미디어 쿼리로 반응형 대응만 한다면 한 화면의 해상도에 따른 여러 스켈레톤 ui도 html파일 하나와 css 파일 하나로도 충분히 대응이 가능하였었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;또한 , 다른 여러 페이지에서도 같은 방식으로&amp;nbsp;스켈레톤 ui를 쉽게 구현할 수 있었습니다. :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Front end/css</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/168</guid>
      <comments>https://ideveloper2.tistory.com/168#entry168comment</comments>
      <pubDate>Thu, 24 Jan 2019 01:31:14 +0900</pubDate>
    </item>
    <item>
      <title>Javascript - 자식 element가 여럿 있을때 event 전파 막는 효과적인 방법</title>
      <link>https://ideveloper2.tistory.com/167</link>
      <description>&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 24pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Javascript&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(61, 183, 204); color: rgb(255, 255, 255); font-size: 24pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;:자식&amp;nbsp;element가 여럿있을때 event 전파 막는 효과적인&amp;nbsp;방법&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 18pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; color: rgb(0, 0, 0);&quot;&gt;Why?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;&amp;gt;&lt;/span&gt; 상황:&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;모바일 웹에서, &lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;Modal&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;의 overlay 영역의 scroll&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;을 &lt;b&gt;방지&lt;/b&gt;하기 위해&amp;nbsp;overlay 영역을 touch 햇을때 touchEvent 리스너에&amp;nbsp;모달을 닫는 function을 넣어, 모달을 닫게 하는 기능을 구현해야 하는 상황이 생겼었습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;&amp;gt; &lt;/span&gt;어려움이 있었던점:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;모달의 overlay 영역은 부모 영역에 생기고 그 하위에 모달 컴포넌트의 자식 요소들이 있는 상황이였는데요,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;이때자식 element에는&amp;nbsp;onClick 이벤트로 새로운 모달을 띄우는 이벤트가 걸려있는 상황이였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;따라서,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;기존의 모달안의 자식 요소들에 걸려있는 &lt;b&gt;클릭&lt;/b&gt;시 새로운 모달창이 뜨는 &lt;b&gt;onClick event&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;부모 (모달 overlay 영역)에게 걸려있는 화면 &lt;b&gt;touch&lt;/b&gt;시 모달창이 꺼지는 &lt;b&gt;touch event&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;이벤트 전파로 자식 요소를 클릭했을때 위와 같은 두 이벤트가 동시에 실행되는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;상황을&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;막아서,&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;(react 모달의 overlay 영역&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;부모 엘리먼트&amp;nbsp;터치&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;시에만 &lt;/span&gt;&lt;b style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;모달 창이 닫히는&amp;nbsp;이벤트&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;를 발생시켜야 하는 상황이였습니다.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;그렇지 않으면 이벤트 전파로 인해, 유저는 자식 엘리먼트를 클릭해 새로운 창을 뜨는 상황을 기대했지만,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;자식을 클릭했더라도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;부모 이벤트에 걸려있는 touch시 모달 창이 닫히는 이벤트가&amp;nbsp;발생해서, 모달 창이 닫혀버려 원하는 상황을 구현할 수 없었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;그 이유는 모두 아시다시피, event는 dom tree 내에서 &lt;b&gt;캡쳐링- 버블링&lt;/b&gt;의 과정을 거치기 때문에, 부모 element에만 touch 와 관련한 이벤트를 걸어 놓았더라도, 이벤트 전파가 되어 자식 엘리먼트에 이벤트가 발생해도 부모의 event 역시 실행되기 때문입니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;b&gt;&lt;br class=&quot;Apple-interchange-newline&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;요약:&amp;nbsp; 부모 요소 안에 있는 여러 자식 요소들의 클릭으로 인한 이벤트 전파를 막아야 하는 상황&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994FF24D5C3DF31A2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994FF24D5C3DF31A2C&quot; width=&quot;820&quot; height=&quot;595&quot; filename=&quot;스크린샷 2019-01-15 오후 11.49.48.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;font-size: 18pt; color: rgb(0, 0, 0);&quot;&gt;HOW TO SOLVE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;&lt;b&gt;부모의 이벤트 영역 touch시에만,&lt;/b&gt;&amp;nbsp;발생시켜야해서, e.&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 14px;&quot;&gt;&lt;span style=&quot;font-size: 12pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;target이 e.cuurentTarget과 같을시에만 실행하도록&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px; background-color: rgba(27, 31, 35, 0.05);&quot;&gt;&lt;b&gt;if (e.target !== e.currentTarget) return;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(36, 41, 46);&quot;&gt;과 같이 부모 node touch시에만&amp;nbsp;touch 이벤트가 실행되도록 하여, 자식 node 클릭 시 이벤트 전파로 인해 모달이 꺼지는 경우를 방지 하는 방식으로 코드를 작성하여 문제를 해결했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(36, 41, 46);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(36, 41, 46);&quot;&gt;물론,&amp;nbsp;많이들 사용하는&lt;b&gt; e.stopPropagtion&lt;/b&gt; 을 활용하여, 자식 엘리먼트에서 전파를 막아도 되지만, 부모 엘리먼트 단에서&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;if (e.target !== e.currentTarget) return; &lt;/b&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;과 같은 코드로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;막을 수 있으면, 각각의 자식요소들에서&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;e.stopPropagtion &lt;/b&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 12pt;&quot;&gt;처리를 해줄 필요가 없어, 자식요소들에서 중복된 여러 코드들을 사용하지 않아도 됩니다.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;e.stopPropagtion 의 예제&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;
&lt;iframe src=&quot;https://codesandbox.io/embed/9ymv1vwk44&quot; style=&quot;width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;&quot; sandbox=&quot;allow-modals allow-forms allow-popups allow-scripts allow-same-origin&quot;&gt;&lt;/iframe&gt;

&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;위 예는 stopPropogation 메소드로 이벤트 전파를 막는 간단한 예제였고,&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.5;&quot;&gt;&lt;font color=&quot;#24292e&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;아래는 문제 해결 상황에서&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;b style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;if (e.target !== e.currentTarget) return;&lt;/b&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;를 활용해 부모쪽에만 코드를 추가하여, 자식 엘리먼트들의&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-size: 16px;&quot;&gt;이벤트 전파를 막은&lt;/span&gt;&lt;span style=&quot;font-size: 16px; color: rgb(36, 41, 46);&quot;&gt;&amp;nbsp;코드입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;md-fences md-end-block&quot; lang=&quot;Javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n48&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Courier, monospace; font-size: 0.9em; break-inside: avoid; background-image: ; background-position-x: ; background-position-y: ; background-size: ; background-repeat-x: ; background-repeat-y: ; background-attachment: ; background-origin: ; background-clip: ; background-color: rgb(248, 248, 248); border: 1px solid rgb(221, 221, 221); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleTouch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 부모 touch 시에만 동작하도록 하기 위한 부분입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;e&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;e&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;currentTarget&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;closeSearchForm&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleTouchEnd&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 부모 touch 시에만 동작하도록 하기 위한 부분입니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;e&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;e&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;currentTarget&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;e&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;preventDefault&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;closeSearchForm&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleOverlayTouch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; () &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;el&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;document&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;querySelector&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'.ReactModal__Overlay'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;el&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;addEventListener&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'touchstart'&lt;/span&gt;, &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleTouch&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;el&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;addEventListener&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'touchend'&lt;/span&gt;, &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleTouchEnd&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-error&quot; style=&quot;box-sizing: border-box; color: rgb(255, 0, 0);&quot;&gt;# 모달 컴포넌트&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;Modal&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;onAfterOpen&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;{&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;handleOverlayTouch&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;isOpen&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;{&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;isSearchFormOpen&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;onClose&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;{&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;closeSearchForm&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;position&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;{&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;modalPositionEnum&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: black;&quot;&gt;top&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;unholdable&quot; style=&quot;box-sizing: border-box; margin-block-start: 1rem; margin-block-end: 1rem; margin: 0.8em 0px; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;/p&gt;</description>
      <category>Computer Engineering/Javascript</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/167</guid>
      <comments>https://ideveloper2.tistory.com/167#entry167comment</comments>
      <pubDate>Wed, 16 Jan 2019 00:24:56 +0900</pubDate>
    </item>
    <item>
      <title>ETC - transpile (트랜스파일) 과 compile (컴파일) 의 비교</title>
      <link>https://ideveloper2.tistory.com/166</link>
      <description>&lt;p&gt;&lt;span style=&quot;font-size: 24pt; color: rgb(61, 183, 204);&quot;&gt;ETC&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24pt; background-color: rgb(61, 183, 204); color: rgb(255, 255, 255);&quot;&gt;:transpile 과 compile의 비교&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;잘못된 내용이나, 오타 피드백 환영합니다!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C76B4D5C31B92021&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C76B4D5C31B92021&quot; width=&quot;820&quot; height=&quot;351&quot; filename=&quot;스크린샷 2019-01-06 오후 5.14.20.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;시작하기에 앞서&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;transpile&lt;/b&gt;과&lt;b&gt;&amp;nbsp;compile&lt;/b&gt; 이라는&amp;nbsp;두 용어를 헷갈린 적이 한두번이 아니고 잘못 사용하고 있는 케이스들을 봐서, 내용을 다시 한번 되짚어 보려합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;프론트엔드 개발&lt;/b&gt;을 하다보면 자주&amp;nbsp;babel이나 typescript를 자주 언급하게 됩니다. 또한, 이들을 설명할때는 compile 혹은 transplie이라는 용어를 종종 사용 하게 됩니다. &amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;우선, babel은&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;javascript &lt;b&gt;transpiler&lt;/b&gt; 입니다.&amp;nbsp;또한 그다음으로, 타입스크립트 역시도&amp;nbsp;많이 접하실 텐데요, 타입스크립트가 자바스크립트로 컴파일 되는것인가, 트랜스파일 되는것인가는 아래에서 다시 언급하겠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 24px;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;| &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;transpile vs compile&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;트랜스 파일&lt;/b&gt;과 &lt;b&gt;컴파일&lt;/b&gt;을 같은 개념으로 사용하기도 하는데, 약간의 차이가 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;compile&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;컴파일&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;의 경우는,&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;한 언어로 작성된 소스 코드를 다른 언어로 변환하는 것을&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;의미 합니다.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;예를 들어, 컴파일 하는 경우는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;Java &lt;/span&gt;-&amp;gt;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt; bytecode&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;font color=&quot;#3db7cc&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: rgb(246, 246, 246);&quot;&gt;c &lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;gt;&lt;/span&gt; assembly&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;transpile&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;트랜스파일&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;의 경우는&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;한언어로 작성된 소스 코드를 비슷한 수준의 추상화를 가진 다른 언어로 변환&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;하는 것을 말합니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;예를 들어, 트랜스파일하는 경우는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;es6&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 12pt;&quot;&gt;코드&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;es5&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 12pt;&quot;&gt;코드로&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 12pt;&quot;&gt;변환하는&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: 12pt;&quot;&gt;경우&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;c++&amp;nbsp;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;&amp;nbsp;c&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: left;&quot;&gt;&lt;font color=&quot;#3db7cc&quot;&gt;&lt;span style=&quot;font-size: 16px; background-color: rgb(246, 246, 246);&quot;&gt;coffescript&amp;nbsp;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;span style=&quot;background-color: rgb(246, 246, 246); color: rgb(61, 183, 204);&quot;&gt;javascript&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;Q) 그럼 transpile 하는 상황에서 compile 한다고 설명하는 것은 옳지 않은 설명인가?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;저는 정답은 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;NO&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; 라고 말하고 싶습니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Source-to-source_compiler&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://en.wikipedia.org/wiki/Source-to-source_compiler&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; 옆의 링크를 참조해보면, transpiler는 다른 말로 source to source compiler 라고도 설명하기도 하며, 컴파일러의 일종으로 트랜스파일러를 설명하고 있습니다. 따라서 compile이라는 용어가 더 큰 범주에 속하게 되고, 그 안에 transpile이라는 개념이 있게 되는것이죠.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;| &lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;더 생각해보기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 18pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 14pt;&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;typescript (transpiler or compiler?)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;그리고 많이 언급되는 typescript 의 경우는 javascript로 변환되는데, 뭉뚱 그려 많은 사이트에서는 컴파일링 된다고는 하지만, 거의 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;같은 수준의 추상화&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;가 되는것이라 더 정확히 말하면 트랜스파일링 된다고 말할 수 있습니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;font color=&quot;#3db7cc&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/font&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;sass 에 쓰인 transpile (or compile )개념&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;sass&lt;/b&gt;는 웹에서 직접 동작할 수 없습니다. 따라서 전처리기로 작성 후 css로 compile (or transpile )하는 과정을 거쳐야 사용할수 있게 되는 것입니다. 다양한 방법으로 컴파일이 가능하지만 자바스크립트 개발환경에서는 &lt;b&gt;node-sass&lt;/b&gt;를 활용하여 주로 컴파일을 하게 됩니다. 따라서 scss 코드를 작성할때 &lt;b&gt;node-sass&lt;/b&gt; npm을 설치했던 것입니다.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;| &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;결론&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;위 글을 읽어보면 알 수 있듯 서로 개념 상 차이가 있긴 하지만, 혼용하여 사용할수도 있는 케이스 들이 존재하여, 사실 컴파일이냐 트랜스파일이냐를 구분 짓는것은&amp;nbsp;크게 중요하지는 않은 것 같습니다. 하지만, &lt;b&gt;컴파일&lt;/b&gt;과&lt;b&gt; 트랜스파일&lt;/b&gt;을 많이 혼용하여 사용하는 만큼, 적절한 상황에 맞춰 용어를 사용하는 것이 좋을 것 같습니다 :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Programming Skills/ETC</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/166</guid>
      <comments>https://ideveloper2.tistory.com/166#entry166comment</comments>
      <pubDate>Sun, 6 Jan 2019 17:03:00 +0900</pubDate>
    </item>
    <item>
      <title>일상 - 1년차 병아리 개발자 2018년 회고</title>
      <link>https://ideveloper2.tistory.com/165</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 24pt;&quot;&gt;일상 :&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(61, 183, 204); color: rgb(255, 255, 255); font-size: 24pt;&quot;&gt;1년차 병아리 개발자 2018년 회고&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 520px; width: 520px; height: 399px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99888F415C27A69F1B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99888F415C27A69F1B&quot; width=&quot;520&quot; height=&quot;399&quot; filename=&quot;baby-chicks-3625186_1920.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 520px; height: 399px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 18.6667px;&quot;&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;|&lt;/span&gt; 회고에 앞서..&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;올해 2018년은 병역특례를 시작하면서,&amp;nbsp;처음 개발자로 발을 내딛은 해였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;또 &lt;b&gt;학교에서 듣는 수업을 듣고&amp;nbsp;과제를 하는게&amp;nbsp;아니라,&lt;/b&gt; 사회에 나와서 개발자로 일하는 만큼 많은 점들이 낯설었고, 또한 여러 결정들을 하고 책임들을 가져야 하는 부분들을 겪으며 힘들었던 적도 많았고, 또 그러한 만큼 뿌듯했던 적도 많았습니다. 그만큼 제게 많은 일들이 올해&amp;nbsp;일어났던 것 같습니다. 그리고 처음 개발자로 발을 내딛는 해였던 만큼, 더 알차게 보내고 싶었고, &lt;i&gt;&lt;b&gt;어떻게 하면 좋은 개발자로써 성장할 수 있을까, 이시점에서 어떠한 공부를 해야 훗날 내게 도움이 될까&lt;/b&gt;&lt;/i&gt; 등등&amp;nbsp;유난히 많은 생각을 했던&amp;nbsp;올 한해였고 이러한 올 한해를 헛되이 보내지 않기 위해 치열하게 노력했던 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;아래는 올해 저&amp;nbsp;혼자 생각했던 저만의 좌우명이었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;많은 경험을 통해 여러 사람들을 만나&lt;b&gt;&amp;nbsp;동기부여&lt;/b&gt;를 받고, 나도 이러한 &lt;b&gt;동기부여&lt;/b&gt;를 주는 사람이 되자.&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 24pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;|&lt;/span&gt; 회고 시작!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;블로그&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;가장 많이 기억에 남고, 가장 뿌듯한 부분입니다. 약&lt;b&gt;&amp;nbsp;150여개&lt;/b&gt;의 글을 올해 썼는데, 최근에는&amp;nbsp;많이는&amp;nbsp;작성 못하고, 매주 하나씩은 주말에 작성중입니다.&amp;nbsp;많이 작성할때는 한달에 10개씩 작성하던 때도 있었습니다. 하지만 이제는 많은글을 쓰기보다는,&amp;nbsp;&lt;b&gt;좋은 글&lt;/b&gt;을 쓰기 위해 노력하려 합니다. 또, 좋은 정보를 전달하기 위해 항상 노력중입니다. 현재는 블로그 방문자 통계나, 여러 플러그인들을 티스토리에서 지원해주고있어서 쓰고 있긴하지만, 많은 분들이 블로그를 개발해 사용하고 계신것처럼, 내년에는 개인 블로그를 직접 만들어서 쓸 예정입니다.&amp;nbsp;&lt;b&gt;100일 일일커밋, 6개월 일일커밋&lt;/b&gt;등의 값진경험을&amp;nbsp;통해, 이 경험을 포스팅을 해보기도 하고, 프론트엔드 개발자로 첫발을 내딛은 주니어개발자로써&lt;b&gt;&amp;nbsp;FECONF 2018&lt;/b&gt;을&amp;nbsp;다녀와&amp;nbsp;후기를 작성해 보는등, 이외에도 많은 제 경험과 학습내용들을 블로그에 기록함으로써, 제가 한해동안 겪었던 경험들을 블로그안에 녹여 나갈 수 있었고, 또 이러한 발자취들을 뒤돌아보며 뿌듯함을 느낄 수 있었던 것 같습니다. 내년에는 더욱더 열심히 블로깅을 할 예정입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;그 중 가장 기억에 남는 블로그 포스팅 글들&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- 100일 일일 커밋&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/129&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991C21455B4FFC3634&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- 6개월 일일커밋&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/153&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990ECE4C5BA6F6EC22&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- FECONF 2018 후기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/157&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;위에서 작성한 후기로, 프론트엔드개발그룹에서 상품을 보내주기도 하였습니다..ㅎㅎㅎ&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;커뮤니티 활동&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;멋쟁이 사자처럼 6기 운영진 활동&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(166, 166, 166);&quot;&gt;멋쟁이 사자처럼은 전국 100여개 대학에서 진행중인, 비전공자를 위한 프로그래밍 교육단체입니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(166, 166, 166);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3월~6월 동안 매주 주말이나 평일에 퇴근하여 세미나 발표 자료를 만들고, 매주 수요일 퇴근하여&amp;nbsp;학교를 찾아가 학습을 진행하고, 격주로 발표를 진행 했습니다. 개발자로 첫발을 내딛기 전&amp;nbsp;많은 선배 개발자 분들에게 도움을 받았던 만큼, 저 역시도 그런것들을 돌려주기 위해, 6기 운영진으로 활동하며 루비온 레일스나 웹 전반적인 것에 대해 학습을 선행하고 이 내용들을 발표를 진행&amp;nbsp;했었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 520px; width: 520px; height: 390px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998AC04D5C28992019&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998AC04D5C28992019&quot; width=&quot;520&quot; height=&quot;390&quot; filename=&quot;29595083_2022155544465272_5710448354541221180_n.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 520px; height: 390px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;또한 중간에,&amp;nbsp;전체 세미나에서&amp;nbsp;(깃헙 A TO Z ) 레일즈 이외에 다른 개발 정보공유를 위해 힘쓰기도 했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 520px; width: 520px; height: 390px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F1C7385C2788D304&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F1C7385C2788D304&quot; width=&quot;520&quot; height=&quot;390&quot; filename=&quot;33137368_2085012068179619_1999567053089931264_o.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 520px; height: 390px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;- 매주 화요일 전체 세미나&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;- 매주 수요일 팀 세미나(발표 격주)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;- 멋사 중앙대&amp;nbsp;미니 해커톤 멘토로 참가&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;발표&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://festa.io/events/92&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 520px; width: 520px; height: 285px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9972AB415C27925703&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9972AB415C27925703&quot; width=&quot;520&quot; height=&quot;285&quot; filename=&quot;스크린샷 2018-12-30 오전 12.26.57.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 520px; height: 285px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;- GDG 라이트닝 토크 : 떡잎부터 다른 인싸 개발자 되기&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;떡잎부터 다른 인싸 개발자 되기&lt;/b&gt;(제가 그렇다는건 아닙니다ㅎ)&lt;/span&gt;&lt;span style=&quot;text-align: center; font-size: 12pt;&quot;&gt;라는 주제로, 본인이 어떻게 개발을 해나갔는지, 1년차 개발자로써 어떻게 성장해 나가고 있는지, 올해 10월 경에 많지는 않은 사람들 앞에서 GDG 라이트닝 토크에서 발표를 진행 했었습니다. &lt;b&gt;기록, 성취, 사람, 도전 &lt;/b&gt;이라는 네가지 키워드로 발표를 했습니다. 원래 계획보다는 훨씬 빠르게 GDG에서 어쩌다보니 발표를 하게 되었는데, 좋은 경험을 미리 해보았다 생각하고, 제가 했던 노력들을 남들에게 보여줌으로써 그러한 노력들이 더 값지게 느껴졌고 보상받은 기분이었습니다. 앞으로는 좀 더 기술적 역량을 쌓는데 집중하고,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;다음에는 더 기술적인 내용이나 제가 쌓은 내공들을 보여줄수 있는 발표 기회가 먼 훗날 생기면&amp;nbsp;발표해보고싶습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 620px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D542475C2787A125&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D542475C2787A125&quot; width=&quot;620&quot; height=&quot;350&quot; filename=&quot;스크린샷 2018-12-29 오후 11.41.13.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;lideshare 링크:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://www.slideshare.net/ssuser77af35/ss-119214431&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.slideshare.net/ssuser77af35/ss-119214431&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;컨퍼런스, 밋업&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;많은 컨퍼런스를 참가했지만 좋은 기억이 있는 컨퍼런스를 나열하면 아래와 같습니다. 작년 GDG DEVFEST를 갔을때는 멍만 때리다 왔는데, 올해에는 나름 고개를 끄덕이며 발표를 이해하며 들었던 세션들이 많았고 공감하며 들을 수 있다는 사실이 제 자신이 성장했다는 사실을 몸소 깨달을 수 있었고, 많은 발표자 분들을 보며 동기부여도 되는 계기가 되었던 것 같습니다. 하지만 이러한 컨퍼런스에가서&amp;nbsp;알지도 못하는 기술정보들을&amp;nbsp;무조건적으로 들으러 다니지 않고, 관심있는 주제가 있을 때만 신청했으며, 여기서 들은 정보들을 제 지식인 마냥 떠들지 않고,&amp;nbsp;이러한 기술들에 휩쓸리지 않기 위해&amp;nbsp;본인의 학습을 게을리 하지 않도록 항상 경계했습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- GDG 2월 MEETUP&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;올해 처음 갔던 밋업입니다. 대단한 분들이 많은 것을 알게 되었고, 처음 이런 밋업의 네트워킹 자리를 참여했는데 많은 얘기들을 들을 수 있었고, 여러 이야기들을 공유하면서 좋은 경험을 갖고, 후에 많은 밋업들을 가게 되는 계기가 되기도 한 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/22 (밋업을 가고 처음 써본 블로그 글인데, 블로깅을 시작한지 얼마 안되서인지 내용이 정리가 잘 안된것 같은 느낌이 듭니다..ㅎㅎ)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- FECONF 2018&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;좋은 세션들을 많이 듣고, 오래 기억하고 싶어,&amp;nbsp;후기를 써서 프론트엔드개발그룹에 공유를 한 컨퍼런스&amp;nbsp;이기도 합니다.&amp;nbsp;내년에도 꼭 참여할 예정입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/157&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- GDG DEVFEST&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;작년에도 참여했었던 컨퍼런스인데, 작년과는 다르게 많은 세션들을 이해할 수 있었고, 또 이 때문에 주의 깊게 들을 수 있었고, 먼 훗날 저런 자리에서 발표를 해보고 싶다는 생각도 들었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- GOOGLE IO EXTENDED SEOUL&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/98&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;- NAVER DEVIEW&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;올 해 가본 개발자 행사중 가장 큰 행사였던것 같은데, 좋은 동기부여를 많이 받았습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/154&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;회사&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;font color=&quot;#a6a6a6&quot;&gt;&lt;i&gt;리액트로 시작해서 리액트로 끝..&lt;/i&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;첫번째 회사&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;한달만에 React, Redux, Redux saga를 학습하여 리액트로 처음 웹 구조를 설계 해보고 개발해 내기도 하였습니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;프론트 개발 뿐 아니라, 다른 회사의 개발팀과의 커뮤니케이션을 통해 외부 API 연동으로 node.js로 api를 개발해보기도하며, 외주사와 커뮤니케이션을 통해서 업무의 시급도를 판단하여 업무를 할당하기도 하며, 사용하지 않는 서버를 정리하여&amp;nbsp;기술부채를 해결해보기도 하는 많은 경험을 할 수 있었던 것 같습니다.&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;스타트업 신입 3개월차 회고&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/70&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;스타트업 신입 2018년 상반기 및 5개월 회고&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/96?category=646723&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;두번째 회사 (현재 회사)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;기존 레거시 코드들을 걷어내고, 상품상세 페이지 뷰를 루비온레일즈에서 리액트로 마이그레이션하는 작업을 진행했습니다.&amp;nbsp;현재도 많은 페이지에서 리액트 리뉴얼 작업을 진행중인데, 상품 상세 페이지가 처음으로 &lt;b&gt;한페이지&lt;/b&gt;가 모두 리액트로 리뉴얼 되는 첫 페이지 였고, 또한 많은 레거시들이 있고 중요한 페이지 였는데, 들어가자마자 큰 프로젝트를 맡아 우여곡절이 많긴 했지만 이러한 작업을 진행해 봄으로써 제 역량을 증명해 내기도 했던 것 같고, 크게 성장했던 것 같습니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;위의 큰 프로젝트 말고도, 사내의 기존 서스테이닝&amp;nbsp; 이슈들을 중간중간 해결하였습니다. 이전회사에서 혼자 디버깅을 하여 레거시 코드들과 분투했던 경험이 크게 도움이 되어&amp;nbsp;문제해결능력을 길렀는지, 회사에 들어간지 얼마 되진 않았지만 서스테이닝 이슈들을 해결해 나갈수있었습니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;그리고 회사내에서 값진 경험들을 많이 할 수 있었는데, 경력이 많으신 PM분들, QA분이나 디자인팀&amp;nbsp;분들과 커뮤니케이션하며 프로젝트를 진행해보면서, 회사 PRODUCT 팀 내의&amp;nbsp;work-flow안에서&amp;nbsp;한 구성원으로써 어떻게 개발을 진행하는지에 대해 몸소 체득하면서, 정말 크게 발전할 수 있었던것 같습니다.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;대회&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;회사일에도 집중하면서, 제&amp;nbsp;자기계발을 멈추지 않고, 많은 사람들과 만나 동기부여를 얻기 위해, 대회 참여에도 소홀히 하지 않았던 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;삼성서울병원 해커톤 디지털 헬스 해커톤&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992DC54F5BDB0A8126&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9986E2505BDB0CCF1C&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;토-일 주말동안 무박2일로 진행되었어서, 회사가 끝나고 평일에 이어 주말까지 쉬지 못해, 그 다음주에는 매우 힘들긴 했었지만 큰 뿌듯함이 남는 대회이기도 합니다. 하루만에, 결과물로 낼수 있는 서비스하나 정도는&amp;nbsp;프로토타이핑 하여 만들 수 있다는 자신감이 생겼습니다. 발표하는 기회도 있었기 때문에 그러한 점도 큰 도움이 되었습니다. 제가 만든 서비스를 직접 개발하고, 왜 이러한 서비스를 만들게 되었는지 소개하는등의 일련의 과정을 거치며 작게나마&amp;nbsp;창업을 해본것과 같은 경험이었습니다. 또한 다른 팀들의 아이디어를 보며 동기부여도 되고 여러 인사이트들을 얻는 큰 경험이 되었습니다. 또한 팀장으로써 팀을 꾸리고 팀을 리딩하고 대회전 오프라인 미팅을 가지며 플래닝을 하면서 개발 외적으로도 리더쉽이나, 프로젝트를 리딩할 수 있는 점들을 배울 수 있었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;후기: &lt;/span&gt;&lt;a href=&quot;https://ideveloper2.tistory.com/156&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/156&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;깃헙:&amp;nbsp;https://github.com/N-M-C&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;컨트리뷰톤 -크로미움&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;글로벌 오픈소스인 크로미움에 컨트리뷰트 해보는 대회였습니다. 오프라인 미팅에 참여하거나, 멘토님이 발표하시는 세미나에 찾아가기도 하며 노력은 했지만, 이번에는 열심히 참여하지 못해 정말 아쉽고 팀원들에게 미안한 대회인것 같습니다. 같은 팀원들이 정말 열심히 해주신 덕에 대회에서 큰상을 받을 수 있었고, 이러한 훌륭한 팀원들 덕에 같은 팀원들에게 큰 동기부여를 받을 수 있었습니다. 작년에는 다른 주제로&amp;nbsp;참여 했었지만 ,이러한 대회 참여는 언제나 큰 동기부여를 불러 오는것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;font-size: 16px;&quot;&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;토이 프로젝트, 학습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-size: 16px; font-family: Gulim, 굴림;&quot;&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;대부분 주니어 개발자들은 이미 다 완성되어있는 설계나 구조안에서 작업을 거의 하&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;기 때문에,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-size: 16px; font-family: Gulim, 굴림;&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;서비스를 직접 처음부터 끝까지 구축해보는 경험&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;을 갖기가 어렵습니다. 따라서 이러한 경험을 갖기&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;위해 React+ Firebase 조합으로, 시작했던 펜션 사이트 제작 프로젝트입니&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;다. &lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;확실히, 개발자들은 사이드 프로젝트를 하는것이나, 학습하여 얻은 인사이트나 지식들이&amp;nbsp;사내에서 개발을 진행할때도 큰 도움이 되는것이 확실하기에, 1차적으로 개발을 한 이후에도 계속 이 사이트를 유지보수 해나가고, 기능을 추가해 나갔었습니다. 리액트를 시작한지 얼마 안되서 개발해 본 프로젝트이기도 하고&amp;nbsp;디자인에 큰 신경을 쓰지못하여,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: Gulim, 굴림; font-size: 16px;&quot;&gt;&amp;nbsp;내년에는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: Gulim, 굴림; font-size: 16px;&quot;&gt;디자인을 수정해나가고&lt;/span&gt;&lt;span style=&quot;color: rgb(102, 102, 102); font-family: Gulim, 굴림; font-size: 16px;&quot;&gt;&amp;nbsp;불필요한 코드들을 제거하고, 리팩토링을 중점적으로 하여 개발할 예정입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a class=&quot;vglnk&quot; href=&quot;https://github.com/zx6658/react-pension-template&quot; rel=&quot;nofollow&quot; style=&quot;color: rgb(61, 179, 158); font-family: Gulim, 굴림; font-size: 16px;&quot;&gt;https://github.com/zx6658/react-pension-template&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Gulim, 굴림; font-size: 16px; color: rgb(102, 102, 102);&quot;&gt;항상 영화를 예매하려고 할때 대부분 근처에있는 가장 시간대가 가까운 영화를 예매하기 마련이라 이를 위치기반의 웹사이트로 구축하여, 가장가까운 영화관의, 가장 지금 시간대와 가까운 영화들을 한 사이트에서 볼수 있도록&amp;nbsp;한 프로젝트입니다. next.js나, mobx 같은 스펙도 사용해보고싶고,&lt;/span&gt;&lt;span style=&quot;font-family: Gulim, 굴림; font-size: 16px; color: rgb(102, 102, 102);&quot;&gt;&amp;nbsp;그리고 위치기반 웹앱을 제작해보고 싶었기 때문에 시작한 프로젝트이기도 합니다.ㅎㅎ&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a class=&quot;vglnk&quot; href=&quot;https://github.com/zx6658/easyMovieSearch&quot; rel=&quot;nofollow&quot; style=&quot;color: rgb(61, 179, 158); font-family: Gulim, 굴림; font-size: 16px;&quot;&gt;https://github.com/zx6658/easyMovieSearch&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;저만의 리액트 보일러 플레이트를 제작해 보았었습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://github.com/zx6658/react-project-kit&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/zx6658/react-project-kit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;js알고리즘을 틈나는대로 programmers 사이트에서 풀고 깃헙에 기록중입니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/zx6658/JS-Algorithm_TIL&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 12pt;&quot;&gt;https://github.com/zx6658/JS-Algorithm_TIL&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;스터디&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;구글 머신러닝 단기집중과정 스터디&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;https://developers.google.com/machine-learning/crash-course/?hl=ko&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;- 머신러닝이란 놈이 도대체 어떤놈인지&amp;nbsp;배워보고자 신청한 스터디입니다. 매주 월요일 퇴근후에 진행했던 스터디이고, 7~8월 경에 진행했던 스터디입니다. 더해보고 싶었지만 다른 프로젝트 준비로 인해 심화과정은 듣지않아 아쉬움이 많이 남은 스터디입니다. 그러나 머신러닝의 기본 개념과 이러한 개념들이&amp;nbsp;실제로 어떻게 적용되는지 알게 되고, 머신러닝이라는 것에 첫발을 내딛을 수 있었던 좋은 기회였습니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;프론트엔드 스터디&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;- 전 회사 사수분을 멘토로 해서&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;여름부터&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;시작한 스터디입니다, 웹팩, 바벨부터,&amp;nbsp;함수형프로그래밍 등등 프론트엔드 개발자로써 발전해 나가기 위해 도움이 될만한 것들을 공유하고 학습하고자 시작한 스터디입니다. 현재도 매주 수요일 퇴근후에 진행중입니다.&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;프론트엔드 전반적인 내용 스터디(웹팩, 바벨)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://github.com/zx6658/jsWebStudy&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;함수형 프로그래밍 스터디&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://github.com/ToBeFrontEndMaster/seungkyu&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;책&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;생각보다 책은 그렇게 많이 읽은 것 같지는 않습니다. 주로 리액트나 자바스크립트를 주제로만 한 책을 읽었던것 같습니다. js나 리액트 말고도 보다 다양한 스펙트럼의 책을 읽어볼걸 하는 생각도 듭니다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;React&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;리액트 교과서&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;리액트를 다루는 기술&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/145 (책 리뷰)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Javascript&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;속깊은 javascript&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;학습 관련 포스팅글&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/76&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/77&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/78&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://ideveloper2.tistory.com/84&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;함수형 자바스크립트 프로그래밍&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;학습 관련 포스팅글&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;https://github.com/ToBeFrontEndMaster/seungkyu&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;자바스크립트 핵심 가이드&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 14pt;&quot;&gt;오픈소스&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;주니어 개발자의 Open Source 컨트리뷰트 내역 정리 포스팅 글 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;a href=&quot;https://ideveloper2.tistory.com/137&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;https://ideveloper2.tistory.com/137&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;오픈소스 컨트리뷰트 내역은 아래와 같습니다. 올해 상반기에 대부분 진행했던 컨트리뷰트이고 하반기에는 진행하지 못한점이 크게 아쉽고 반성을 하게 되었습니다.&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;React&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;a href=&quot;https://github.com/facebook/react/pull/13169&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204);&quot;&gt;https://github.com/facebook/react/pull/13169&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;create-react-app&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://github.com/facebook/create-react-app/pull/4703&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;color: rgb(61, 179, 158); font-size: 24px;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(61, 183, 204);&quot;&gt;https://github.com/facebook/create-react-app/pull/4703&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;React.org&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;color: rgb(61, 179, 158); font-family: &amp;quot;Noto Sans&amp;quot;, sans-serif; font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://github.com/reactjs/reactjs.org/pull/1002&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;color: rgb(61, 179, 158); font-family: &amp;quot;Noto Sans&amp;quot;, sans-serif; font-size: 24px;&quot;&gt;&lt;span style=&quot;color: rgb(61, 183, 204); font-size: 12pt;&quot;&gt;https://github.com/reactjs/reactjs.org/pull/1002&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;a href=&quot;https://github.com/reactjs/reactjs.org/pull/1023&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot; style=&quot;color: rgb(61, 179, 158); font-family: &amp;quot;Noto Sans&amp;quot;, sans-serif; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-size: 12pt; color: rgb(61, 183, 204);&quot;&gt;https://github.com/reactjs/reactjs.org/pull/1023&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;b&gt;Chromium&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;몇몇 컨트리뷰트를 하긴 했지만&amp;nbsp;&lt;b&gt;한장&lt;/b&gt;으로 요약합니다 ㅎ (후...뿌듯)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C0D43F5B64924C02&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;올해 아쉬웠던 점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;올해 초반에는 많은 의욕을 가지고 &lt;b&gt;개발이나&amp;nbsp;학습을 회사일과 병행 &lt;/b&gt;했던 것 같습니다. 하지만, 올해 후반기에는 이직준비 이후에 너무 지쳤던 탓인지, 올해 초반보다는 치열하게 하지 못했던 것 같습니다. 하지만 페이스는 잃지 않기 위해, 꾸준히는 하도록 노력했던 것 같습니다. 그리고, 내년에는 리프레쉬 해서 올해보다 더욱 열심히 하여&amp;nbsp;남들에게 동기부여가 되는 사람이 되기 위해 노력할 것입니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;남들이 쓸수 없는&lt;b&gt; 나만의 글을&lt;/b&gt;&amp;nbsp;쓰지 못했던 적이&amp;nbsp;많았던 것 같습니다. 블로깅을 많이&amp;nbsp;하는것도 좋지만, 좋은&amp;nbsp;글을 쓸수 있도록 노력할 것입니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;올 한해 여러가지 개발을 해보는 경험은 했지만, &lt;b&gt;기능을 구현하는데에만 급급&lt;/b&gt;하고 그러한 개발에 쓰이는 기술들이 어떠한 원리로 작동하는지, 또 그런 기술들의 Docs들을 제대로 읽지 않았던 것 같습니다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;계획했던것 보다,&amp;nbsp;많은 &lt;b&gt;토이프로젝트&lt;/b&gt;들을 진행하지 못했고 끝마무리를 하지 못했던 것 같습니다.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;더많은&lt;b&gt; 해커톤&lt;/b&gt;을 나가지 못한점이 아쉽습니다.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;내년 목표&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;hr&gt;&lt;ul style=&quot;list-style-type: disc;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;무조건적으로 많은 글을 쓰기 보다는, 정확한 정보를 전달하고, 많은 사람들에게 도움이 될 수 있는&lt;b&gt;&amp;nbsp;양질의 블로그 글&lt;/b&gt; 쓰기&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;더많은 &lt;b&gt;해커톤&lt;/b&gt; 참여하기&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;개발에 쓰이는 기술을 사용하기 이전에&amp;nbsp;먼저 사용하는 기술들을 이해하고,&amp;nbsp; 그러한 기능들이 어떻게 동작 하는지 동작 원리에 대한 이해를 선행시 하기&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;개발을 할때도 생각나는대로 코드를 짜는게 아니라, 다시한번 그러한 생각들을 곱씹어보고,&lt;b&gt; 많은 생각&lt;/b&gt;을 가지고 개발하도록 노력해보기&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;올해보다 훨씬 성장하여 남들에게 더 &lt;b&gt;동기부여&lt;/b&gt;를&amp;nbsp;주는 사람이 되어있기&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;오픈소스 컨트리뷰트 중요한 부분(기능)에 해보기 (문서 수정 x, 오타 수정&amp;nbsp;x)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: 18.6667px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>일상</category>
      <author>Ideveloper2</author>
      <guid isPermaLink="true">https://ideveloper2.tistory.com/165</guid>
      <comments>https://ideveloper2.tistory.com/165#entry165comment</comments>
      <pubDate>Sat, 29 Dec 2018 23:29:33 +0900</pubDate>
    </item>
  </channel>
</rss>