<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>잡초의 일지</title>
    <link>https://alicecodealice.tistory.com/</link>
    <description>공부 기록</description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 05:49:05 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>JabCho</managingEditor>
    <image>
      <title>잡초의 일지</title>
      <url>https://tistory1.daumcdn.net/tistory/3658360/attach/bb01312f4d724e5f97b07d53387ec02e</url>
      <link>https://alicecodealice.tistory.com</link>
    </image>
    <item>
      <title>React.js 입문 3일차</title>
      <link>https://alicecodealice.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;섹션 4, 5&lt;/p&gt;
&lt;h1&gt;State&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;title을 변수로 놓아도 변경사항이 DOM에 적용되지 않는다. &amp;rarr; DOM을 초기에 한번만 랜더링 하기 때문에.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (10).png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9WCu5/btstrPCnMA8/YxuweBw5DhwDzkMGdkvPQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9WCu5/btstrPCnMA8/YxuweBw5DhwDzkMGdkvPQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9WCu5/btstrPCnMA8/YxuweBw5DhwDzkMGdkvPQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9WCu5%2FbtstrPCnMA8%2FYxuweBw5DhwDzkMGdkvPQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;284&quot; height=&quot;144&quot; data-filename=&quot;Untitled (10).png&quot; data-origin-width=&quot;284&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (11).png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;34&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pwZga/btstmEV6q5c/iGh2wZO3wdk6KZVR7oNxH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pwZga/btstmEV6q5c/iGh2wZO3wdk6KZVR7oNxH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pwZga/btstmEV6q5c/iGh2wZO3wdk6KZVR7oNxH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpwZga%2FbtstmEV6q5c%2FiGh2wZO3wdk6KZVR7oNxH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;34&quot; data-filename=&quot;Untitled (11).png&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;34&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UI에 변경사항을 적용하려면 useState라는 리액트훅을 사용한다. &amp;rarr; 컴포넌트 안에 넣어야 한다. &amp;rarr; 배열을 리턴한다. 첫번째 요소 : 값. 현재 상태 두번째 요소 : 함수. 업데이트 된 상태 &amp;rarr; state가 등록된 컴포넌트를 다시 읽고 UI를 업데이트 한다. &amp;rarr; 컴포넌트 인스턴스 단위이기 때문에 업데이트 하면서 다른 요소들에게 영향을 미치지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 컴포넌트 안에 여러개의 state 슬라이스&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;그냥 여러번 호출하면 됌&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drF235/btsts7bGJwl/WMfQxtNQP08h43ZkSmfTHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drF235/btsts7bGJwl/WMfQxtNQP08h43ZkSmfTHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drF235/btsts7bGJwl/WMfQxtNQP08h43ZkSmfTHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrF235%2Fbtsts7bGJwl%2FWMfQxtNQP08h43ZkSmfTHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;599&quot; height=&quot;390&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 객체로 받기 &lt;br /&gt;&amp;rarr; 객체의 모든 요소를 업데이트 해 주어야 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dl9oSG/btstkxi7Pa8/U8rB2VO4gHf5Krn73jXdE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dl9oSG/btstkxi7Pa8/U8rB2VO4gHf5Krn73jXdE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dl9oSG/btstkxi7Pa8/U8rB2VO4gHf5Krn73jXdE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdl9oSG%2Fbtstkxi7Pa8%2FU8rB2VO4gHf5Krn73jXdE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;474&quot; height=&quot;696&quot; data-filename=&quot;Untitled (4).png&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;696&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전값에 의존하여 변경하기 &lt;br /&gt;&amp;rarr; 그냥 오버라이드 하지 않고 이전 상태에 의존하여&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYbmU3/btsts73P5WR/x03SnfkRc0u9a5UgrPj4f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYbmU3/btsts73P5WR/x03SnfkRc0u9a5UgrPj4f1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYbmU3/btsts73P5WR/x03SnfkRc0u9a5UgrPj4f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYbmU3%2Fbtsts73P5WR%2Fx03SnfkRc0u9a5UgrPj4f1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;78&quot; data-filename=&quot;Untitled (5).png&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공용 핸들러 사용하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;219&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxFBb3/btstkVD77MU/Ti8QcVh4VjWW1mkRsPd3F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxFBb3/btstkVD77MU/Ti8QcVh4VjWW1mkRsPd3F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxFBb3/btstkVD77MU/Ti8QcVh4VjWW1mkRsPd3F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxFBb3%2FbtstkVD77MU%2FTi8QcVh4VjWW1mkRsPd3F0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;517&quot; height=&quot;219&quot; data-filename=&quot;Untitled (6).png&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;219&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (7).png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/calYfa/btstpC4PaXQ/xeYs40ZNfisj4L4C3BLPi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/calYfa/btstpC4PaXQ/xeYs40ZNfisj4L4C3BLPi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/calYfa/btstpC4PaXQ/xeYs40ZNfisj4L4C3BLPi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcalYfa%2FbtstpC4PaXQ%2FxeYs40ZNfisj4L4C3BLPi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;70&quot; data-filename=&quot;Untitled (7).png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;상향식 데이터 전송&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하향식 (부모 &amp;rarr; 자식)은 props를 사용했다.&lt;/li&gt;
&lt;li&gt;props를 이용하여 함수 정의는 부모에서, 함수 호출은 자식에서&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (8).png&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzqld/btsts1JjSCn/3dcO2vI3kc7qrYJVWIHqAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzqld/btsts1JjSCn/3dcO2vI3kc7qrYJVWIHqAK/img.png&quot; data-alt=&quot;App.js&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzqld/btsts1JjSCn/3dcO2vI3kc7qrYJVWIHqAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkzqld%2Fbtsts1JjSCn%2F3dcO2vI3kc7qrYJVWIHqAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;555&quot; height=&quot;294&quot; data-filename=&quot;Untitled (8).png&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;App.js&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (9).png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/naW1V/btstmEIFnF0/DI7AIN3O7iCMOupUkLekwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/naW1V/btstmEIFnF0/DI7AIN3O7iCMOupUkLekwK/img.png&quot; data-alt=&quot;NewExpense.js&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/naW1V/btstmEIFnF0/DI7AIN3O7iCMOupUkLekwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnaW1V%2FbtstmEIFnF0%2FDI7AIN3O7iCMOupUkLekwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;638&quot; height=&quot;372&quot; data-filename=&quot;Untitled (9).png&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NewExpense.js&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Lifting State Up&lt;br /&gt;형제 관계에서는 공유하지 못함. 부모를 통해야 함.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>[코딩] 배우는것/React.js</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/175</guid>
      <comments>https://alicecodealice.tistory.com/175#entry175comment</comments>
      <pubDate>Fri, 8 Sep 2023 13:03:29 +0900</pubDate>
    </item>
    <item>
      <title>React.js 입문 2일차</title>
      <link>https://alicecodealice.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;섹션 2, 3&lt;/p&gt;
&lt;h1&gt;자바스크립트 복습&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;&lt;/b&gt; 태그 안에 js를 넣는다&lt;/li&gt;
&lt;li&gt;js 코드를 태그 안에 넣지 않고 &lt;b&gt;&amp;lt;script&amp;gt; src=&amp;rdquo;js파일경로&amp;rdquo; &amp;lt;/scipt&amp;gt;&lt;/b&gt; 로 js파일을 넣을 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;script&amp;gt; src=&amp;rdquo;js파일경로&amp;rdquo; defer &amp;lt;/scipt&amp;gt;&lt;/b&gt; defer를 사용하면 해당 페이지가 모두 로딩 된 후 외부 스크립트가 실행된다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;script&amp;gt; src=&amp;rdquo;js파일경로&amp;rdquo; type=&amp;rdquo;module&amp;rdquo;&amp;lt;/scipt&amp;gt;&lt;/b&gt; type=&amp;rdquo;module&amp;rdquo;은 js파일을 모듈처럼 취급한다 &lt;br /&gt;&amp;rarr; &lt;b&gt;import&lt;/b&gt; 사용 가능&lt;/li&gt;
&lt;li&gt;빌드를 할 때, React의 빌드 프로세스가 자동으로 script를 넣어주고 사용자가 다운받에 최적화된 형태로 js를 바꿔준다&lt;/li&gt;
&lt;li&gt;let과 const &lt;br /&gt;&amp;rarr; const가 변경 불가한게 아니라 덮어쓸 수 없다는것!&lt;/li&gt;
&lt;li&gt;Arrow funtions &lt;br /&gt;function의 여러가지 표현 방식 &lt;br /&gt;객체를 리턴할 때는 꼭 () &amp;rArr; ({}) 로 중괄호를 묶어서 중괄호가 함수를 정의하는것이 아니라 객체임을 나타내게 해야 한다&lt;/li&gt;
&lt;li&gt;Exports &amp;amp; Imports&lt;/li&gt;
&lt;li&gt;Classes&lt;/li&gt;
&lt;li&gt;Spread operator ex. 두 배열을 이어붙일 때&lt;/li&gt;
&lt;li&gt;Array 주요 메서드 &lt;br /&gt;map() &lt;br /&gt;find() &lt;br /&gt;findIndex() &lt;br /&gt;filter() &lt;br /&gt;reduce() &lt;br /&gt;concat() &lt;br /&gt;slice() &lt;br /&gt;splice()&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;컴포넌트&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React는 컴포넌트로 이루어졌다&lt;/li&gt;
&lt;li&gt;컴포넌트는 재사용 가능한 코드이다 &amp;rarr; reusability&lt;/li&gt;
&lt;li&gt;선언형으로 작성한다&lt;/li&gt;
&lt;li&gt;컴포넌트별로 js 파일을 만들어서 관리한다&lt;/li&gt;
&lt;li&gt;props 를 이용해 다른 컴포넌트에 저장된 데이터를 이용할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv6shG/btssQbG0j4Y/1qacf6pQHqNDNLELFsW6p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv6shG/btssQbG0j4Y/1qacf6pQHqNDNLELFsW6p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv6shG/btssQbG0j4Y/1qacf6pQHqNDNLELFsW6p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv6shG%2FbtssQbG0j4Y%2F1qacf6pQHqNDNLELFsW6p1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1284&quot; height=&quot;800&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴포넌트 래퍼를 만들 수 있다 &lt;br /&gt;이때, props.children으로 여는 태그와 닫는 태그 사이에 넣을 수 있도록 하여야 한다 그렇지 않으면 단순히 대체될 뿐이다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckGwpE/btssSAT2TRX/1wkOPTlUqshPKmk22vckIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckGwpE/btssSAT2TRX/1wkOPTlUqshPKmk22vckIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckGwpE/btssSAT2TRX/1wkOPTlUqshPKmk22vckIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckGwpE%2FbtssSAT2TRX%2F1wkOPTlUqshPKmk22vckIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;33&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[코딩] 배우는것/React.js</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/174</guid>
      <comments>https://alicecodealice.tistory.com/174#entry174comment</comments>
      <pubDate>Fri, 1 Sep 2023 21:44:49 +0900</pubDate>
    </item>
    <item>
      <title>React.js 입문 1일차</title>
      <link>https://alicecodealice.tistory.com/173</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;섹션1&lt;/p&gt;
&lt;h1&gt;React?&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UI를 만들기 위한 자바스크립트 라이브러리&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;왜 React?&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부드럽고 즉각적인 반응
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 경험⬆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;새 페이지가 로딩되는 듯한 효과가 없음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 페이지를 받을때까지 기다리지 않아도 됌&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;자바스크립트로 쓰여진 라이브러리이기 때문에 백그라운드 에서 페이지를 받아놓을 수 있기 때문에&lt;/li&gt;
&lt;li&gt;그냥 자바스크립트만 쓰면 손이 많이 가고 오류가 발생하기 쉽다&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;React 특징&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선언형&lt;/li&gt;
&lt;li&gt;js 안에서 html 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;브라우저 기반 편집기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://react.new&quot;&gt;react.new&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>[코딩] 배우는것/React.js</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/173</guid>
      <comments>https://alicecodealice.tistory.com/173#entry173comment</comments>
      <pubDate>Mon, 28 Aug 2023 20:04:20 +0900</pubDate>
    </item>
    <item>
      <title>2022년 하반기 ICT 학점연계 인턴쉽 후기</title>
      <link>https://alicecodealice.tistory.com/172</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;인턴쉽을 하게 된 계기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 말하자면 졸업요건 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학부연구생이라는 선택지도 있었지만, 실무 경험을 쌓을 수 있겠다는 생각에 인턴쉽을 하기로 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 배운 것들이 회사에서 실제로 어떻게 쓰일 수 있는지 궁금했고, 이것은 좋은 기회라고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인턴쉽 준비 과정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인턴쉽을 구하는 방법은 대략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;1. ICT 학점연계 인턴쉽 사이트에서 구하는 방법 &lt;a style=&quot;color: #666666;&quot; href=&quot;https://www.ictintern.or.kr/main.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.ictintern.or.kr/main.do&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;2. 학교 홈페이지에 올라오는 모집 공고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;3. 개인적으로 구하는 방법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등이 있었는데, 기간적으로나 방법적으로나 1,2번이 가장 적합했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모집 시기가 되면, 공고가 올라오고 기간 안에 신청하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 가장 중요한것은 지원하고싶은 회사를 고르는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모집 공고는 수십 수백개가 올라온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각기 다른 파트, 스킬을 요구하고 회사가 하는 일이나 회사가 위치한 지역도 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중에서 내가 하고 싶은것, 내가 가능한 것 등을 추려서 지원하고자하는 회사를 고르는 일이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나같은 경우는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;1. 내가 원하는 파트(기획/앱/프론트)인가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;2. 프로젝트 주제가 흥미로운가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;3. 회사의 평점은 어떠한가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;4. 회사까지의 거리는 괜찮은가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;5. 코딩테스트 유무&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등을 기준으로 하여 최종적으로 5개의 회사를 추려내었고, 고민을 통해 최종적으로 3개의 회사에 지원하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로는 지원한 3개의 회사 중 하나의 회사에 최종합격을 하여 인턴쉽을 진행하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인턴쉽을 하며 느낀것&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하자면 나는 회사가 잘 맞았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 의견을 피력하면 그것이 실제 반영이 되고, 프로젝트 진행에 영향을 미치는것이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나에게 활력이 되어서 일을 더 열심히 할 수 있는 동기부여로 다가왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학교 팀플이나 그동안의 프로젝트에서는 주로 구현/코딩 하는 일을 하였는데,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;캡스톤을 경험하면서 기획과 설계 단계에서 하는 일에 대해 더욱 궁금해졌다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(때문에, 기획 파트를 우선으로 생각하며 지원하였다.)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 맡은 일은 기획/개발 파트였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 프로젝트의 기획서 작성과 화면설계를 하였다. (개발까지 이어지긴 하였지만, 시간상 인턴쉽 기간 내에 끝내지 못해서 개인적으로 구현해보고자 한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트가 시작되는것부터,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 프로젝트가 왜 필요한지, 어떤 영향과 이득을 볼 수 있는지, 프로젝트의 진행 계획은 어떠한지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등의 프로젝트 계획은 나와 잘 맞았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소 프로젝트를 진행 할 때에, 진행상황에 대한 계획 세우는 일과 스프린트 목표를 정하는것을 맡아왔었던 나에게 계획하고 프로젝트 전반에 대해 관리하는 일은 너무 재미있는 일로 다가왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무리 인턴쉽이지만 첫 회사생활이다보니 걱정스러운 마음과 긴장되는 마음이 있었지만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 감사하게도 회사의 분위기 또한 젊고 활기찼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상하관계가 없으며, 모두의 의견이 존중되고(심지어는 인턴의 의견도!), 복장이나 근무 환경 등이 자유로운 회사였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인턴쉽을 마치고&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진로에 대해 고민하고 있던 시기였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 직무로 취업 준비를 해야 할 지, 전공을 살리는 일을 하는것이 정말 맞는것일지까지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미래와 취업, 진로에 대해 고민하고 방황하던 시기였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인턴쉽을 하게 된 계기에 고민만 하지 않고 일단 부딪혀보자 하는것도 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 인턴쉽은 좋은 경험이 되었고, 기획직무를 진로로 하겠다는 생각을 확실히 굳히게 된 계기가 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 개발과 더불어 기획직무 또한 준비하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 취뽀 후기로 찾아올 수 있으면 좋겠다.&lt;/p&gt;</description>
      <category>아무말</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/172</guid>
      <comments>https://alicecodealice.tistory.com/172#entry172comment</comments>
      <pubDate>Sun, 7 May 2023 23:01:15 +0900</pubDate>
    </item>
    <item>
      <title>[Python3] 프로그래머스 | 코딩테스트 연습 -&amp;gt; 연습문제 -&amp;gt; 124 나라의 숫자</title>
      <link>https://alicecodealice.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코딩테스트를 준비하며 문제를 풀다, 오랜시간 고민한 문제라서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 오랜만에 포스팅 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 처음에는 3진법으로 접근하고자 하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10진법 -&amp;gt; 2진법을 구하는것처럼,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n진법일 경우, n으로 나눈 몫과 나머지를 활용하는 방안을 생각하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우, 3진법은 (0, 1, 2)를 사용하기 때문에 3(10진수) = 10(3진수)가 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생기는 10(3진수)를 4로 바꾸면 되겠다는 생각을 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 1로 자리가 올라가는 숫자를 생각하지 못하고 0만 4로 바꿔서 많이 해맸다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10(3진수)를 4로 바꾸기 위해선,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3으로 나눈 나머지가 0일때, 올라가는 수인 1을 빼주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 3으로 나눈 몫에서 1을 빼주는것과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 0을 4로 바꾸어 문자열에 넣어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;아주 어릴때 배웠던 빼기 계산에서 빼고자 하는 자릿수의 수가 작아서 못빼면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt; 윗자리 숫자를 빌려오는 개념과 비슷하다..!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;몫에서 1을 빼주는 대신, 나머지에 3을(124나라니까 4를) 넣어주는 것이라고 보면 된다. (나머지가 3이라는것은 나누어떨어진다는것이니까 나머지가 0이 나온다. 즉, 나머지가 0이면 4로 바꾸고, 다음 몫에서 1을 빼주면서 계산을 하면 된다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;283&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eAxuI1/btrj3Mbj3HF/Uxm7jPMtM5g3C2RnxMDDJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eAxuI1/btrj3Mbj3HF/Uxm7jPMtM5g3C2RnxMDDJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eAxuI1/btrj3Mbj3HF/Uxm7jPMtM5g3C2RnxMDDJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeAxuI1%2Fbtrj3Mbj3HF%2FUxm7jPMtM5g3C2RnxMDDJ0%2Fimg.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;283&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;문제를 다 푼 뒤에도, 정확도는 모두 통과했지만, 효율성에서 하나의 케이스를 통과하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 것들을 모두 제거하고 간결하게 표현하니, 통과하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 내가 쓴 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1636183134671&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(n):
    answer = ''
    
    while True:
        # print('-&amp;gt;', n)
        if n==0:
            break
        
        if n%3==0:
            answer += '4'
            n = n//3 - 1
        else:
            answer += str(n%3)
            n = n//3
    
    answer = ''.join(reversed(answer))
    # print(answer)
    
    return answer&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[코딩] 문제풀기/Python</category>
      <category>124 나라의 숫자</category>
      <category>124나라</category>
      <category>Python</category>
      <category>python3</category>
      <category>파이썬</category>
      <category>프로그래머스</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/168</guid>
      <comments>https://alicecodealice.tistory.com/168#entry168comment</comments>
      <pubDate>Sat, 6 Nov 2021 16:19:01 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터 구조 및 설계 정리 Ch.2</title>
      <link>https://alicecodealice.tistory.com/167</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;본 게시물은 &quot;Computer Organization and Design : The Hardware/ Sofrware Interface (ELSEVIER) 5th Edition&quot;의 한국어판을 읽으며 정리한 글입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/16426341&quot;&gt;http://www.yes24.com/Product/Goods/16426341&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626756978332&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;컴퓨터 구조 및 설계 - YES24&quot; data-og-description=&quot;최근의 단일 프로세서에서 멀티코어 마이크로프로세서로의 변천은 초판 이래 갖고 있던 이러한 관점이 옳았다는 것을 확인시켜 주었다. 한때는 프로그래머들이 이러한 충고를 무시하고 그들의&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot; data-og-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/t9G6W/hyKWI0U9zn/u5UjuSkYuYmoCfAe05An6k/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200,https://scrap.kakaocdn.net/dn/3lG1N/hyKWK5vAvZ/VRtcGKDVyeWKJJrGAK2oI0/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/16426341&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/t9G6W/hyKWI0U9zn/u5UjuSkYuYmoCfAe05An6k/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200,https://scrap.kakaocdn.net/dn/3lG1N/hyKWK5vAvZ/VRtcGKDVyeWKJJrGAK2oI0/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터 구조 및 설계 - YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;최근의 단일 프로세서에서 멀티코어 마이크로프로세서로의 변천은 초판 이래 갖고 있던 이러한 관점이 옳았다는 것을 확인시켜 주었다. 한때는 프로그래머들이 이러한 충고를 무시하고 그들의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;https://alicecodealice.tistory.com/165&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Ch.1&lt;/a&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2. 하드웨어 연산&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MIPS 명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;피연산자 : 더해질 숫자 두개와 합을 기억할 장소 하나&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1626815789161&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// C언어로
a = b + c;

// MIPS 어셈블리 언어 명령어로
add a, b, c
// 임시 레지스터는 $t0, $t1 등을 사용한다&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;설계 원칙 1 : 간단하게 하기 위해서는 규칙적인 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3. 피연산자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;워드(word) : MIPS 구조에서 레지스터 크기에 해당한다. 보통 32비트이다.&lt;/li&gt;
&lt;li&gt;설계 원칙 2 : 작은 것이 더 빠르다.&lt;/li&gt;
&lt;li&gt;적재(load) : 메모리에서 레지스터로 데이터를 복사해 오는 데이터 전송 명령&lt;br /&gt;
&lt;pre id=&quot;code_1626816251019&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// C언어로
g = h + A[8];

// MIPS 어셈블리 언어 명령어로
lw $t0, 8($s3)	# $t0에 임시로 A[8]을 저장한다.
add $s1, $s2, $t0​&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;메모리 주소&lt;br /&gt;프로그램에서 8비트로 구성된 바이트를 많이 사용하므로 대부분의 컴퓨터는 바이트 단위로 주소를 지정한다. 워드 주소는 워드를 구성하는 4바이트 주소 중 하나를 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;1040&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.33.35.png&quot; width=&quot;226&quot; height=&quot;483&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YDciW/btq91nmaDcM/mcvsRdB0VOVKkM9hl1EfXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YDciW/btq91nmaDcM/mcvsRdB0VOVKkM9hl1EfXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YDciW/btq91nmaDcM/mcvsRdB0VOVKkM9hl1EfXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYDciW%2Fbtq91nmaDcM%2FmcvsRdB0VOVKkM9hl1EfXk%2Fimg.png&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;1040&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.33.35.png&quot; width=&quot;226&quot; height=&quot;483&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저장(store) : 적재와 반대. 레지스터에서 메모리로 데이터를 보내는 명령&lt;br /&gt;
&lt;pre id=&quot;code_1626817020661&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// C언어로
A[12] = h + A[8]

// MIPS 어셈블리 언어 명령어로
lw $t0, 32($s3)
add $t0, $s2, $t0
sw $t0, 48($s3)​&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;상수 피연산자 / 수치(immediate) 피연산자&lt;/li&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1626817183218&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;addi $s3, $s3, 4	# $s3 = $s3 + 4&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 사용되는 상수를 매번 메모리에서 가져오는것보다 빠르다. -&amp;gt; 자주 생기는 일을 빠르게한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4. 부호있는 수와 부호없는 수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LSB(Least Significant Bit) : MIPS 워드에서 가장 오른쪽 비트&lt;/li&gt;
&lt;li&gt;MSB(Most Significant Bit) : MIPS 워드에서 가장 왼쪽 비트&lt;/li&gt;
&lt;li&gt;오버플로 : 연산 결과가 하드웨어에 구현된 비트들만으로는 표현이 불가할 때&lt;/li&gt;
&lt;li&gt;오버플로 방지하기 위하여
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부호와 크기(sign and magnitude)&lt;/li&gt;
&lt;li&gt;2의 보수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.5. 명령어의 컴퓨터 내부 표현&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MIPS 명령어의 필드&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;op (6 bits)&lt;/td&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;rs (5 bits)&lt;/td&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;rt (5 bits)&lt;/td&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;rd (5 bits)&lt;/td&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;shamt (5 bits)&lt;/td&gt;
&lt;td style=&quot;width: 16.666666666666668%;&quot;&gt;funct (6 bits)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
op : 명령어가 실행할 연산의 종류로서 연산자(opcode) 라고 부른다&lt;br /&gt;rs : 첫 번째 근원지(source) 피연산자 레지스터&lt;br /&gt;rt : 두 번째 근원지 피연산자 레지스터&lt;br /&gt;rd : 목적지(destination) 레지스터, 연산 결과가 기억된다&lt;br /&gt;shamt : 자리이동(shift)량&lt;br /&gt;funct : 기능(function), 기능코드(function code)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1882&quot; data-origin-height=&quot;716&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWTvR/btraaxNWy61/lNlMfQIxTLP1bives05vbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWTvR/btraaxNWy61/lNlMfQIxTLP1bives05vbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWTvR/btraaxNWy61/lNlMfQIxTLP1bives05vbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWTvR%2FbtraaxNWy61%2FlNlMfQIxTLP1bives05vbK%2Fimg.png&quot; data-origin-width=&quot;1882&quot; data-origin-height=&quot;716&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;256&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.31.png&quot; width=&quot;437&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byIGhW/btq98t6mETS/PYdnyDgVavyYIvFbKKAnCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byIGhW/btq98t6mETS/PYdnyDgVavyYIvFbKKAnCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byIGhW/btq98t6mETS/PYdnyDgVavyYIvFbKKAnCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyIGhW%2Fbtq98t6mETS%2FPYdnyDgVavyYIvFbKKAnCK%2Fimg.png&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;256&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.31.png&quot; width=&quot;437&quot; data-ke-mobilestyle=&quot;widthOrigin&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;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;378&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.40.png&quot; width=&quot;510&quot; height=&quot;115&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b57ku9/btq94qCO1fw/kDmRum1Ju2RAAD4eg4lJZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b57ku9/btq94qCO1fw/kDmRum1Ju2RAAD4eg4lJZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b57ku9/btq94qCO1fw/kDmRum1Ju2RAAD4eg4lJZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb57ku9%2Fbtq94qCO1fw%2FkDmRum1Ju2RAAD4eg4lJZk%2Fimg.png&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;378&quot; data-filename=&quot;스크린샷 2021-07-21 오전 6.58.40.png&quot; width=&quot;510&quot; height=&quot;115&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;---- 이후는 다음 방학에... ----&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.6. 논리연산 명령어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부한것 정리/컴퓨터 구조</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/167</guid>
      <comments>https://alicecodealice.tistory.com/167#entry167comment</comments>
      <pubDate>Tue, 20 Jul 2021 13:55:52 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] [SwiftUI] Todo - List 만들기</title>
      <link>https://alicecodealice.tistory.com/166</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;온전한 내 힘으로 MVVM 패턴을 적용한 무언가를 만들고 싶다는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;가장 쉬운 todolist를 만들어보기로 했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;완성본&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/0zDHYsUIRpg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/0zDHYsUIRpg&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=0zDHYsUIRpg&amp;amp;feature=youtu.be&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/mtTfI/hyKSLJec8F/a4wVQ9erFexn1wV5jY0x60/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/0zDHYsUIRpg&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 영상을 올리려고 처음으로 유튜브에 동영상을 올려봤다..ㅎㅎ&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디자인 &amp;amp;&amp;nbsp;기능&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디어의 러프 스케치는 아래와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled-4.jpg&quot; data-origin-width=&quot;2183&quot; data-origin-height=&quot;3086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GvbBj/btq9zEHgzCB/mEsAzYl9mS40KIM0AC339k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GvbBj/btq9zEHgzCB/mEsAzYl9mS40KIM0AC339k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GvbBj/btq9zEHgzCB/mEsAzYl9mS40KIM0AC339k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGvbBj%2Fbtq9zEHgzCB%2FmEsAzYl9mS40KIM0AC339k%2Fimg.jpg&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; loading=&quot;lazy&quot; width=&quot;2183&quot; height=&quot;3086&quot; data-filename=&quot;Untitled-4.jpg&quot; data-origin-width=&quot;2183&quot; data-origin-height=&quot;3086&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알람이나 날짜 기록 등의 기능은 제외하고, 주요 기능만 추려 단순하게 만들었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;코드 내용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MVVM 패턴으로 구현하려고 노력하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;완료한 일을 체크하는 코드를 짤 때, 이미 Todo객체로 만들어진 것을 어떻게 수정해야 할 지 고민이었다. 각 todo를 하나의 view로 표현하여 여러 셀들로 표현해야 하나 생각했다. 하지만, 이것은 기존의 코드를 많이 수정해야 했다. 따라서, modifyTodoDone이라는 함수를 추가하였다. 기존 TodoList에서 unique한 id값을 매개변수로 하여 인덱스를 찾고, 해당 todo에 대해서 replaceSubrange를 사용하여 변경된 값을 가진 새로운 Todo객체로 변경하였다. &amp;nbsp;배열로 표현된 TodoList의 크기가 크지 않을것이라고 판단하여,(투두리스트에 적는 일이 아주 많지 않을것이다..) for문을 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭 시 버튼의 label이나 글자색이 변하는 등의 변화를 표현하기 위해, 삼항연산자를 사용하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Setting 뷰에 대한 것은 아직 구상중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) TodoList에 'delete all' 같은 버튼을 만들어주면, 일일이 지우지 않아도 되기 때문에 더 편할것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;View&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1626203738477&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI

struct ContentView: View {
    var body: some View {
        TabView {
                   TodoView()
                     .tabItem {
                        Image(systemName: &quot;checkmark.circle.fill&quot;)
                        Text(&quot;Todo&quot;)
                      }

                   SettingView()
                     .tabItem {
                        Image(systemName: &quot;gear&quot;)
                        Text(&quot;Setting&quot;)
                      }
                }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1626203764123&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI
import Combine

struct TodoView: View {
    @ObservedObject var todoStore = TodoStore()
    @State var newTodo: String = &quot;&quot;
    @State var isImportant: Bool = false
    
    struct ImportantTodo: ViewModifier {
        var importantTodoColor = Color.pink
        
        func body(content: Content) -&amp;gt; some View {
            return content
                .padding(.vertical, 5)
                .foregroundColor(importantTodoColor)
        }
    }
    
    var addTodoBar: some View{
        HStack{
            Button(action: {
                isImportant.toggle()
            }, label: {
                Image(systemName: &quot;exclamationmark.triangle.fill&quot;)
                    .foregroundColor(Color.orange)
            })
  
            TextField(&quot;Enter new tasks&quot;, text: self.$newTodo)
                .padding(5)
                .background(RoundedRectangle(cornerRadius: 5).fill(isImportant ?  Color.orange : Color(red: 0.0, green: 0.0, blue: 0.0, opacity: 0.2)))
            
            Button(action: {
                    todoStore.addNew(newTodo, isImportant)
                    newTodo = &quot;&quot;
                    isImportant = false
                }, label: {
                    Image(systemName: &quot;plus.circle.fill&quot;)
                        .foregroundColor(Color.red)
                })
        }
    }
    
    var body: some View {
        NavigationView {
            VStack{
                addTodoBar
                    .padding()
                
                List{
                    ForEach(self.todoStore.todos) { todo in
                        HStack{
                            Button(action: {
                                todoStore.modifyTodoDone(todo.id)
                            }, label: {
                                Image(systemName: todo.done ? &quot;largecircle.fill.circle&quot; : &quot;circle&quot;)
                                    .foregroundColor(Color.gray)
                            })
                            
                            Text(todo.todoItem)
                                .modifier(todo.done ? ImportantTodo(importantTodoColor: Color.gray) : (todo.important ? ImportantTodo() : ImportantTodo(importantTodoColor: Color.primary)))
                        }
                    }
                    .onMove(perform: self.todoStore.move)
                    .onDelete(perform: self.todoStore.delete)
                }
            }
            .navigationBarTitle(&quot;Todo List&quot;)
            .navigationBarItems(trailing: EditButton())
        }
        .onAppear(perform: todoStore.loadTodos)
    }
}

struct TodoView_Previews: PreviewProvider {
    static var previews: some View {
        TodoView()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1626203790191&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI

struct SettingView: View {
    var body: some View {
        VStack(alignment: .leading){
                Text(&quot;Setting&quot;)
                    .font(.title)
                    .fontWeight(.bold)
                    .multilineTextAlignment(.leading)
                    .padding(5)
        }
        
    }
}

struct SettingView_Previews: PreviewProvider {
    static var previews: some View {
        SettingView()
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;ViewModel&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1626203664601&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI
import Combine

class TodoStore: ObservableObject{
    @Published var todos = [Todo]()
    private let todosKey = &quot;TodoListKey&quot;

    func addNew(_ newTodo:String, _ important:Bool){
        guard !newTodo.isEmpty else { return }
        if important{
            self.todos.insert(Todo(todoItem: newTodo, important: important), at: 0)
        }else{
            self.todos.append(Todo(todoItem: newTodo, important: important))
        }
        saveTodos()
    }
    
    func modifyTodoDone(_ id:UUID){
        for i in todos.indices {
            if (todos[i].id==id){
                let newDone:Bool = todos[i].done ? false : true
                let modifiedTodo = Todo(id: todos[i].id, todoItem: todos[i].todoItem, important: todos[i].important, done: newDone)
                todos.replaceSubrange(i...i, with: repeatElement(modifiedTodo, count: 1))
                break
            }
        }
        saveTodos()
    }
    
    func move(from source: IndexSet, to destination: Int){
        self.todos.move(fromOffsets: source, toOffset: destination)
    }

    func delete(at offests: IndexSet){
        self.todos.remove(atOffsets: offests)
        saveTodos()
    }
    
    // MARK:- Store TodoList data using UserDefaults
    func saveTodos() {
      UserDefaults.standard.set(try? PropertyListEncoder().encode(self.todos), forKey: todosKey)
    }
     
    func loadTodos() {
      if let todoData = UserDefaults.standard.value(forKey: todosKey) as? Data {
        if let todoList = try? PropertyListDecoder().decode(Array&amp;lt;Todo&amp;gt;.self, from: todoData) {
          self.todos = todoList
        }
      }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;Model&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1626203718190&quot; class=&quot;swift&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background-color: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import SwiftUI

struct Todo: Identifiable, Codable{
    var id = UUID()
    let todoItem: String
    let important: Bool
    var done: Bool = false
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고&lt;/h2&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pavlovskyive/Todo-List&quot;&gt;https://github.com/pavlovskyive/Todo-List&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626065495567&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;pavlovskyive/Todo-List&quot; data-og-description=&quot;Task Manager App made for iOS 13. Contribute to pavlovskyive/Todo-List development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pavlovskyive/Todo-List&quot; data-og-url=&quot;https://github.com/pavlovskyive/Todo-List&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CPLM6/hyKRIMGowi/ToEe12uEBB8ebQ5HsU6uI0/img.png?width=1200&amp;amp;height=600&amp;amp;face=1018_150_1081_219,https://scrap.kakaocdn.net/dn/bvgukS/hyKRNNY2Zm/Il6JxMCGftyDYMOYmCqxOK/img.png?width=828&amp;amp;height=1792&amp;amp;face=0_0_828_1792,https://scrap.kakaocdn.net/dn/bIMft8/hyKRTtSP8k/1q3jqyd54XkgVMqmBicZ51/img.png?width=828&amp;amp;height=1792&amp;amp;face=0_0_828_1792&quot;&gt;&lt;a href=&quot;https://github.com/pavlovskyive/Todo-List&quot; data-source-url=&quot;https://github.com/pavlovskyive/Todo-List&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CPLM6/hyKRIMGowi/ToEe12uEBB8ebQ5HsU6uI0/img.png?width=1200&amp;amp;height=600&amp;amp;face=1018_150_1081_219,https://scrap.kakaocdn.net/dn/bvgukS/hyKRNNY2Zm/Il6JxMCGftyDYMOYmCqxOK/img.png?width=828&amp;amp;height=1792&amp;amp;face=0_0_828_1792,https://scrap.kakaocdn.net/dn/bIMft8/hyKRTtSP8k/1q3jqyd54XkgVMqmBicZ51/img.png?width=828&amp;amp;height=1792&amp;amp;face=0_0_828_1792');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;pavlovskyive/Todo-List&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Task Manager App made for iOS 13. Contribute to pavlovskyive/Todo-List development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/devxoul/SwiftUITodo&quot;&gt;https://github.com/devxoul/SwiftUITodo&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626065495568&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;devxoul/SwiftUITodo&quot; data-og-description=&quot;An example to-do list app using SwiftUI which is introduced in WWDC19 - devxoul/SwiftUITodo&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/devxoul/SwiftUITodo&quot; data-og-url=&quot;https://github.com/devxoul/SwiftUITodo&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFzcte/hyKRH1iAP6/KoKdOOFq9SFvJZmY7uC2m0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dsmq5N/hyKRKKtFw7/VTjjbtkwQpdlxx1SCZYdKk/img.png?width=4600&amp;amp;height=2060&amp;amp;face=0_0_4600_2060&quot;&gt;&lt;a href=&quot;https://github.com/devxoul/SwiftUITodo&quot; data-source-url=&quot;https://github.com/devxoul/SwiftUITodo&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFzcte/hyKRH1iAP6/KoKdOOFq9SFvJZmY7uC2m0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dsmq5N/hyKRKKtFw7/VTjjbtkwQpdlxx1SCZYdKk/img.png?width=4600&amp;amp;height=2060&amp;amp;face=0_0_4600_2060');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;devxoul/SwiftUITodo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An example to-do list app using SwiftUI which is introduced in WWDC19 - devxoul/SwiftUITodo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&quot;&gt;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626065495568&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;shankarmadeshvaran/SwiftUI_Tasks&quot; data-og-description=&quot;A Simple ToDo app developed using SwiftUI, Combine and Coredata - shankarmadeshvaran/SwiftUI_Tasks&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&quot; data-og-url=&quot;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctJJT4/hyKRGBjFFD/IUTNQEGct7eINa5EY51G20/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&quot; data-source-url=&quot;https://github.com/shankarmadeshvaran/SwiftUI_Tasks&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctJJT4/hyKRGBjFFD/IUTNQEGct7eINa5EY51G20/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;shankarmadeshvaran/SwiftUI_Tasks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Simple ToDo app developed using SwiftUI, Combine and Coredata - shankarmadeshvaran/SwiftUI_Tasks&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/UWAppDev/SwiftUI-TodoList&quot;&gt;https://github.com/UWAppDev/SwiftUI-TodoList&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626065495569&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;UWAppDev/SwiftUI-TodoList&quot; data-og-description=&quot;A simple todo list app written in Swift and SwiftUI using UserDefaults as backing storage for Local Hack Day: Build (2019) at the University of Washington - UWAppDev/SwiftUI-TodoList&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/UWAppDev/SwiftUI-TodoList&quot; data-og-url=&quot;https://github.com/UWAppDev/SwiftUI-TodoList&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eIPy3/hyKRL3GOup/Zw4sPMoIeWbro06g6zwVBk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/UWAppDev/SwiftUI-TodoList&quot; data-source-url=&quot;https://github.com/UWAppDev/SwiftUI-TodoList&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eIPy3/hyKRL3GOup/Zw4sPMoIeWbro06g6zwVBk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;UWAppDev/SwiftUI-TodoList&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A simple todo list app written in Swift and SwiftUI using UserDefaults as backing storage for Local Hack Day: Build (2019) at the University of Washington - UWAppDev/SwiftUI-TodoList&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/Archetapp/ToDoAppExample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/Archetapp/ToDoAppExample&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1626101655424&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Archetapp/ToDoAppExample&quot; data-og-description=&quot;Based on my youtube video. Contribute to Archetapp/ToDoAppExample development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Archetapp/ToDoAppExample&quot; data-og-url=&quot;https://github.com/Archetapp/ToDoAppExample&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Vqms1/hyKRMa8W3d/Ny3OjvbkDeg2hHJy59eo1K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Archetapp/ToDoAppExample&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Archetapp/ToDoAppExample&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Vqms1/hyKRMa8W3d/Ny3OjvbkDeg2hHJy59eo1K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Archetapp/ToDoAppExample&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Based on my youtube video. Contribute to Archetapp/ToDoAppExample development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EoDDY30Hx5o&quot;&gt;https://www.youtube.com/watch?v=EoDDY30Hx5o&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=EoDDY30Hx5o&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/DePqA/hyKSXbxHkO/8HvSMD4esXp1pjm1GBTKyK/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/EoDDY30Hx5o&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Just for fun/iOS</category>
      <category>swift</category>
      <category>SwiftUI</category>
      <category>Todo list</category>
      <category>todolist</category>
      <category>만들기</category>
      <category>스위프트</category>
      <category>토이프로젝트</category>
      <category>투두 리스트</category>
      <category>투두리스트</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/166</guid>
      <comments>https://alicecodealice.tistory.com/166#entry166comment</comments>
      <pubDate>Mon, 12 Jul 2021 13:52:58 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터 구조 및 설계 정리 Ch.1</title>
      <link>https://alicecodealice.tistory.com/165</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 게시물은 &quot;Computer Organization and Design : The Hardware/ Sofrware Interface (ELSEVIER) 5th Edition&quot;의 한국어판을 읽으며 정리한 글입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/16426341&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.yes24.com/Product/Goods/16426341&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625471304504&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;컴퓨터 구조 및 설계 - YES24&quot; data-og-description=&quot;최근의 단일 프로세서에서 멀티코어 마이크로프로세서로의 변천은 초판 이래 갖고 있던 이러한 관점이 옳았다는 것을 확인시켜 주었다. 한때는 프로그래머들이 이러한 충고를 무시하고 그들의&quot; data-og-host=&quot;www.yes24.com&quot; data-og-source-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot; data-og-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FzDGe/hyKMFQQSM4/KAvMBJDd0Wyn21UFtHbXqk/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200,https://scrap.kakaocdn.net/dn/dfyp8v/hyKMRX2DB1/KwGb9svAgek6TwwrkF9LN0/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200&quot;&gt;&lt;a href=&quot;http://www.yes24.com/Product/Goods/16426341&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.yes24.com/Product/Goods/16426341&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FzDGe/hyKMFQQSM4/KAvMBJDd0Wyn21UFtHbXqk/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200,https://scrap.kakaocdn.net/dn/dfyp8v/hyKMRX2DB1/KwGb9svAgek6TwwrkF9LN0/img.jpg?width=945&amp;amp;height=1200&amp;amp;face=0_0_945_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;컴퓨터 구조 및 설계 - YES24&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;최근의 단일 프로세서에서 멀티코어 마이크로프로세서로의 변천은 초판 이래 갖고 있던 이러한 관점이 옳았다는 것을 확인시켜 주었다. 한때는 프로그래머들이 이러한 충고를 무시하고 그들의&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yes24.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.1. 서론&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하드웨어와 소프트웨어가 어떻게 성능에게 영향을 미치는가 (p.10)&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 64.18604651162791%; height: 186px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;하드웨어 또는 소프트웨어 구성 요소&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;성능에 미치는 영향&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;알고리즘&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;소스 프로그램 문장 수와 입출력 작업 수를 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;프로그래밍 언어, 컴파일러, 컴퓨터 구조&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;각 소스 프로그램 문장에 해당하는 기계어 명령어 수 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;프로세서와 메모리 시스템&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;명령어의 실행 속도 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;입출력 시스템&lt;br /&gt;(하드웨어 및 운영체제)&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;입출력 작업의 실행 속도 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.2. 컴퓨터 구조 분야의 8가지 위대한 아이디어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터 구조 분야의 8가지 위대한 아이디어 (p.11~p.13)
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Moore의 법칙&lt;/li&gt;
&lt;li&gt;설계를 단순화하는 추상화&lt;/li&gt;
&lt;li&gt;자주 생기는 일을 빠르게&lt;/li&gt;
&lt;li&gt;병렬성을 통한 성능 개선&lt;/li&gt;
&lt;li&gt;파이프라이닝을 통한 성능 개선&lt;/li&gt;
&lt;li&gt;예측을 통한 성능 개선&lt;/li&gt;
&lt;li&gt;메모리 계층구조&lt;/li&gt;
&lt;li&gt;여유분을 이용한 신용도 개선&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.3. &amp;nbsp;프로그램 밑의 세계&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하드웨어와 소프트웨어를 계층으로 단순화한 그림 (p.14)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;890&quot; data-filename=&quot;스크린샷 2021-07-05 오후 4.58.44.png&quot; width=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PB0Vk/btq8TrILQki/1MSvqKIxpl6LmsmqSFh9qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PB0Vk/btq8TrILQki/1MSvqKIxpl6LmsmqSFh9qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PB0Vk/btq8TrILQki/1MSvqKIxpl6LmsmqSFh9qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPB0Vk%2Fbtq8TrILQki%2F1MSvqKIxpl6LmsmqSFh9qK%2Fimg.png&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;890&quot; data-filename=&quot;스크린샷 2021-07-05 오후 4.58.44.png&quot; width=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템 소프트웨어 : 공통적으로 필요한 서비스를 제공하는 소프트웨어. 운영체제, 컴파일러, 로더, 어셈블러가 이에 속한다.&lt;/li&gt;
&lt;li&gt;운영체제 : 실행 프로그램을 위해서 컴퓨터 내의 자원을 관리하는 감독 프로그램&lt;/li&gt;
&lt;li&gt;컴파일러 : 상위수준 언어 문장을 어셈블리 언어 문장으로 번역하는 프로그램&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.4. &amp;nbsp;케이스를 열고&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터 5대 구성요소 (p.18)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; width=&quot;464&quot; data-pagespeed-url-hash=&quot;4253475948&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF6O4a/btq8UeCb4LM/etPyvCmf9JYVGyPyuqQock/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF6O4a/btq8UeCb4LM/etPyvCmf9JYVGyPyuqQock/img.jpg&quot; data-alt=&quot;프로세서는 메모리에서 명령어와 데이터를 읽는다. 입력장치는 메모리에 데이터를 쓰고, 출력장치는 메모리에서 데이터를 읽는다. 제어 유닛은 데이터페이스, 메모리, 입력장치, 출력장치의 동작을 결정하는 신호를 내보낸다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF6O4a/btq8UeCb4LM/etPyvCmf9JYVGyPyuqQock/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF6O4a%2Fbtq8UeCb4LM%2FetPyvCmf9JYVGyPyuqQock%2Fimg.jpg&quot; width=&quot;464&quot; data-pagespeed-url-hash=&quot;4253475948&quot; data-origin-width=&quot;464&quot; data-origin-height=&quot;398&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로세서는 메모리에서 명령어와 데이터를 읽는다. 입력장치는 메모리에 데이터를 쓰고, 출력장치는 메모리에서 데이터를 읽는다. 제어 유닛은 데이터페이스, 메모리, 입력장치, 출력장치의 동작을 결정하는 신호를 내보낸다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.6. 성능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성능 기준 (p.31)
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;응답시간 (response time)&lt;/li&gt;
&lt;li&gt;실행시간 (execution time)&lt;/li&gt;
&lt;li&gt;처리량 (throughput)&lt;/li&gt;
&lt;li&gt;대역폭 (bandwidth)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두개의 컴퓨터에서 같은 프로그램을 실행시키고 먼저 끝나는 쪽이 더 빠른 컴퓨터라고 할 수 있다. 하지만, 여러대의 서버를 가지고 여러 사용자의 작업을 처리할 경우 하루동안 더 많은 작업을 처리하는 컴퓨터가 더 빠른 컴퓨터일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터의 성능을 측정하는 기준은 상황에 따라 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터X의 성능과 실행시간의 관계 (p.32)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;222&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.24.26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFlSh3/btq8RS74dRJ/0BFlKt8YTMKAi55qeUNKw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFlSh3/btq8RS74dRJ/0BFlKt8YTMKAi55qeUNKw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFlSh3/btq8RS74dRJ/0BFlKt8YTMKAi55qeUNKw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFlSh3%2Fbtq8RS74dRJ%2F0BFlKt8YTMKAi55qeUNKw1%2Fimg.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;222&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.24.26.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;X 가 Y 보다 n배 빠르다&quot; (p.32)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;230&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.25.53.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEiOXH/btq8KWQQWnx/tnAul2eCt0KLlBeyLX7eo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEiOXH/btq8KWQQWnx/tnAul2eCt0KLlBeyLX7eo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEiOXH/btq8KWQQWnx/tnAul2eCt0KLlBeyLX7eo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEiOXH%2Fbtq8KWQQWnx%2FtnAul2eCt0KLlBeyLX7eo0%2Fimg.png&quot; data-origin-width=&quot;1258&quot; data-origin-height=&quot;230&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.25.53.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클럭 사이클, 클럭 주기 (p.35)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-noaft=&quot;1&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;143&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zaKSe/btq8OizX3BW/T29O4n1WWlJk6EQdBEcdM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zaKSe/btq8OizX3BW/T29O4n1WWlJk6EQdBEcdM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zaKSe/btq8OizX3BW/T29O4n1WWlJk6EQdBEcdM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzaKSe%2Fbtq8OizX3BW%2FT29O4n1WWlJk6EQdBEcdM1%2Fimg.png&quot; data-noaft=&quot;1&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;143&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CPU 성능과 성능 인자 (p.35)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;198&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.38.20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUV97D/btq8R0dGT1r/Coj3vqrlrj3muW225YquJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUV97D/btq8R0dGT1r/Coj3vqrlrj3muW225YquJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUV97D/btq8R0dGT1r/Coj3vqrlrj3muW225YquJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUV97D%2Fbtq8R0dGT1r%2FCoj3vqrlrj3muW225YquJk%2Fimg.png&quot; data-origin-width=&quot;1346&quot; data-origin-height=&quot;198&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.38.20.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어 성능 (p.37)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;62&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.49.28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4SyTr/btq8JtIdRRP/ufuIaInGhB6MqtxA6uarF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4SyTr/btq8JtIdRRP/ufuIaInGhB6MqtxA6uarF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4SyTr/btq8JtIdRRP/ufuIaInGhB6MqtxA6uarF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4SyTr%2Fbtq8JtIdRRP%2FufuIaInGhB6MqtxA6uarF1%2Fimg.png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;62&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.49.28.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고전적인 CPU 성능식 (p.38)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;74&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.51.40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19hny/btq8Rt1OH9A/IxVRozaGppIlRiqzB9Rym1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19hny/btq8Rt1OH9A/IxVRozaGppIlRiqzB9Rym1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19hny/btq8Rt1OH9A/IxVRozaGppIlRiqzB9Rym1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19hny%2Fbtq8Rt1OH9A%2FIxVRozaGppIlRiqzB9Rym1%2Fimg.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;74&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.51.40.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;212&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.52.33.png&quot; width=&quot;511&quot; height=&quot;98&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF3dLl/btq8Ois9c13/YEvKh10K4fnJsoMrgjKDuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF3dLl/btq8Ois9c13/YEvKh10K4fnJsoMrgjKDuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF3dLl/btq8Ois9c13/YEvKh10K4fnJsoMrgjKDuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF3dLl%2Fbtq8Ois9c13%2FYEvKh10K4fnJsoMrgjKDuK%2Fimg.png&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;212&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.52.33.png&quot; width=&quot;511&quot; height=&quot;98&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.10. 오류 및 함정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Amdahl's law (p.52)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;132&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.58.16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p8XtG/btq8KYnIQ2o/9ObqX7eReHxkxDNK2tFYA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p8XtG/btq8KYnIQ2o/9ObqX7eReHxkxDNK2tFYA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p8XtG/btq8KYnIQ2o/9ObqX7eReHxkxDNK2tFYA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp8XtG%2Fbtq8KYnIQ2o%2F9ObqX7eReHxkxDNK2tFYA1%2Fimg.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;132&quot; data-filename=&quot;스크린샷 2021-07-05 오후 5.58.16.png&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;어떤 개선책으로부터 얻을 수 있는 성능의 증가는 개선된 부분이 얼마나 많이 사용되느냐에 따라 제한된다는 법칙.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MIPS(million instructions per second) (p.53)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;234&quot; data-filename=&quot;스크린샷 2021-07-05 오후 6.03.33.png&quot; width=&quot;428&quot; height=&quot;88&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qiLKE/btq8QyCi7lS/RL7NdmiPUfj40bpGRQx2ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qiLKE/btq8QyCi7lS/RL7NdmiPUfj40bpGRQx2ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qiLKE/btq8QyCi7lS/RL7NdmiPUfj40bpGRQx2ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqiLKE%2Fbtq8QyCi7lS%2FRL7NdmiPUfj40bpGRQx2ok%2Fimg.png&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;234&quot; data-filename=&quot;스크린샷 2021-07-05 오후 6.03.33.png&quot; width=&quot;428&quot; height=&quot;88&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;실행시간 대신 쓸 수 있는 척도 중 하나.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MIPS와 클럭속도, CPI 간의 관계 (p.54)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;136&quot; data-filename=&quot;스크린샷 2021-07-05 오후 6.06.49.png&quot; width=&quot;894&quot; height=&quot;105&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QoI7k/btq8UPbiabJ/shZoc4kBGJd5CMrcJ5oS0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QoI7k/btq8UPbiabJ/shZoc4kBGJd5CMrcJ5oS0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QoI7k/btq8UPbiabJ/shZoc4kBGJd5CMrcJ5oS0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQoI7k%2Fbtq8UPbiabJ%2FshZoc4kBGJd5CMrcJ5oS0k%2Fimg.png&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;136&quot; data-filename=&quot;스크린샷 2021-07-05 오후 6.06.49.png&quot; width=&quot;894&quot; height=&quot;105&quot; data-ke-mobilestyle=&quot;widthOrigin&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;</description>
      <category>공부한것 정리/컴퓨터 구조</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/165</guid>
      <comments>https://alicecodealice.tistory.com/165#entry165comment</comments>
      <pubDate>Mon, 5 Jul 2021 18:07:37 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] 프로그래머스 | 코딩테스트 연습 -&amp;gt; 연습문제 -&amp;gt; 소수 찾기</title>
      <link>https://alicecodealice.tistory.com/164</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 지금껏 풀어왔던 것과 같이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문을 반복하며 0으로 나누어 떨어지면 소수로 판별하는 방식으로 풀었다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1621301670920&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func solution(_ n:Int) -&amp;gt; Int {
    var count = 1

    if n &amp;gt;= 3{
        
        for i in 3...n{
            // i가 소수인가 판별 후 count ++
            var isPrime = true
            for j in 2...i-1{
                if (i%j == 0){
                    isPrime = false
                    break
                }
            }
            if (isPrime){
                count += 1
            }
        }
    }
    return count
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 아무리 코드를 줄여봐도 시간초과가 났고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근방식이 잘못되었다고 생각해 찾아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소수를 구할 때에 가장 콤펙트한 방법은 &lt;b&gt;에라토스테네스의 채&lt;/b&gt;를 활용하는것이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;(아래의 링크에 설명과 예시 코드가 있다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1621301547548&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;위키백과, 우리 모두의 백과사전. 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/D1QtM/hyKfchgyBq/Or3DoyFybjn7eigetWnqQk/img.gif?width=445&amp;amp;height=369&amp;amp;face=0_0_445_369&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98_%EC%B2%B4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/D1QtM/hyKfchgyBq/Or3DoyFybjn7eigetWnqQk/img.gif?width=445&amp;amp;height=369&amp;amp;face=0_0_445_369');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;위키백과, 우리 모두의 백과사전. 수학에서 에라토스테네스의 체는 소수를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 풀어왔던 방법처럼 for문을 반복하며 소수를 구하는 방법과 에라토스테네스의 채와 의 다른점은,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에라토스테네스의 채에서는&lt;b&gt; 소수의 배수를 지워&lt;/b&gt;, 불필요한 연산을 줄인다는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 2가 소수이면, 2의 배수는 소수가 되지 못하기 때문에 모두 지운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문으로 반복하며 구하는 방법에서는 2의 배수들도 계산하기 때문에 불필요한 계산을 또 하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;369&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FSL3e/btq5bOABoo4/Zhy7aJfDveuk1tC3cQaqk0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FSL3e/btq5bOABoo4/Zhy7aJfDveuk1tC3cQaqk0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FSL3e/btq5bOABoo4/Zhy7aJfDveuk1tC3cQaqk0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/FSL3e/btq5bOABoo4/Zhy7aJfDveuk1tC3cQaqk0/img.gif&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;369&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에라토스테네스의 채를 이용하여 바꾸어 문제를 풀었더니, 시간초과와 효율성 모두 좋은 점수였다.&lt;/p&gt;
&lt;pre id=&quot;code_1621301392001&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func solution(_ n:Int) -&amp;gt; Int {
    /*	2부터 n까지 n-1개를 저장할 수 있는 배열 할당
		배열 참조 번호와 소수와 일치하도록 배열의 크기는
		n+1 길이만큼 할당(인덱스 번호 0과 1은 사용하지 않음)	*/
	/*  배열초기화: 처음엔 모두 소수로 보고 true값을 줌	*/
    var PrimeArray = Array(repeating: true, count: n+1)

	/*	에라토스테네스의 체에 맞게 소수를 구함
		만일, PrimeArray[i]가 true이면 i 이후의 i 배수는 약수로 i를
		가지고 있는 것이 되므로 i 이후의 i 배수에 대해 false값을 준다.
		PrimeArray[i]가 false이면 i는 이미 소수가 아니므로 i의 배수 역시
		소수가 아니게 된다. 그러므로 검사할 필요도 없다.
    또한 i*k (k &amp;lt; i) 까지는 이미 검사되었으므로 j시작 값은 i*2 에서 i*i로 개선할 수 있다. */
    var i = 2
    while i*i &amp;lt;= n {
        if (PrimeArray[i]){
            var j = i*i
            while j &amp;lt;= n {
                PrimeArray[j] = false
                j += i
            }
        }

        i += 1
    }
    let res = PrimeArray.filter { $0 == true }
    /* return할때 PrimeArray에서 사용하지 않았던 0번과1번 인덱스를 빼준다. */
    return (res.count - 2)
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>[코딩] 문제풀기/Swift</category>
      <category>swift</category>
      <category>소수</category>
      <category>소수 찾기</category>
      <category>스위프트</category>
      <category>에라토스테네스의 채</category>
      <category>프로그래머스</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/164</guid>
      <comments>https://alicecodealice.tistory.com/164#entry164comment</comments>
      <pubDate>Tue, 18 May 2021 10:41:06 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] 프로그래머스 | 코딩테스트 연습 -&amp;gt; 연습문제 -&amp;gt; x만큼 간격이 있는 n개의 숫자</title>
      <link>https://alicecodealice.tistory.com/161</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Level1 문제는 대부분 쉽게 풀 수 있어 포스팅을 잘 하지 않는데,&amp;nbsp;이것을 포스팅 하는 이유는 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 처음에 이 문제에 대한 답으로&lt;/p&gt;
&lt;pre id=&quot;code_1621243704318&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func solution(_ x:Int, _ n:Int) -&amp;gt; [Int64] {
    var res:[Int64] = []
    var value = x

    for _ in 0..&amp;lt;n{
        res.append(Int64(value))
        value += x
    }

    return res
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성하였었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, case9에서 시간초과가 났고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 변수를 줄이고 최대한 for문을 활용하여&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1621243748374&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func solution(_ x:Int, _ n:Int) -&amp;gt; [Int64] {
    var res:[Int64] = []

    for i in 1...n{
        res.append(Int64(i*x))
    }

    return res
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 바꾸었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사소한 변수선언이었고, 그로인한 복잡하지 않은 연산이 있었지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 작은것 하나도 신경써야 한다는 생각이 들게 했다.&lt;/p&gt;</description>
      <category>[코딩] 문제풀기/Swift</category>
      <category>level1</category>
      <category>swift</category>
      <category>문제</category>
      <category>스위프트</category>
      <category>프로그래머스</category>
      <author>JabCho</author>
      <guid isPermaLink="true">https://alicecodealice.tistory.com/161</guid>
      <comments>https://alicecodealice.tistory.com/161#entry161comment</comments>
      <pubDate>Mon, 17 May 2021 18:30:30 +0900</pubDate>
    </item>
  </channel>
</rss>