<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자를 희망하는 초보의 자기개발 이야기</title>
    <link>https://comp-jae.tistory.com/</link>
    <description>배우고 경험한 것을 기록하고자 합니다. 잘못된 정보나 부족한 정보가 있다면 말씀해주세요. </description>
    <language>ko</language>
    <pubDate>Mon, 24 Aug 2026 13:44:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>클라우드아실</managingEditor>
    <image>
      <title>개발자를 희망하는 초보의 자기개발 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/4002948/attach/e0030ea4ffe54a93a94a5651c6cbf3a6</url>
      <link>https://comp-jae.tistory.com</link>
    </image>
    <item>
      <title>윈도우에서 이모지 사용하기</title>
      <link>https://comp-jae.tistory.com/985</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5FOU/dJMcafFgRZA/3K2Ru0hxVTu5T9EgPs7as1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5FOU/dJMcafFgRZA/3K2Ru0hxVTu5T9EgPs7as1/img.png&quot; data-alt=&quot;윈도우 이모지 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5FOU/dJMcafFgRZA/3K2Ru0hxVTu5T9EgPs7as1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5FOU%2FdJMcafFgRZA%2F3K2Ru0hxVTu5T9EgPs7as1%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;353&quot; height=&quot;394&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;윈도우 이모지 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 슬랙이나 디스코드, 노션에서 이모지를 많이 사용하는데 일반적인 블로그에서도 많이 사용하길래 찾아봤다.&lt;br /&gt;맥에서만 이모지 창을 열어서 사용할 수 있는 줄 알았는데 윈도우에서도 오래전부터 되고 있었다.(?!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법 1. 마우스 우클릭&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFFUlg/dJMcacoeKhM/WkIX4EhKbXrdAE8aZ6clYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFFUlg/dJMcacoeKhM/WkIX4EhKbXrdAE8aZ6clYK/img.png&quot; data-alt=&quot;마우스 우클릭시 나타나는 이모지 버튼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFFUlg/dJMcacoeKhM/WkIX4EhKbXrdAE8aZ6clYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFFUlg%2FdJMcacoeKhM%2FWkIX4EhKbXrdAE8aZ6clYK%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; alt=&quot;마우스 우클릭시 나타나는 이모지 버튼&quot; loading=&quot;lazy&quot; width=&quot;267&quot; height=&quot;374&quot; data-origin-width=&quot;267&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;마우스 우클릭시 나타나는 이모지 버튼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알아낸 첫번째 방법은 마우스 우클릭. &lt;br /&gt;하.. 이런 바보같은.. 그동안 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;노션에서 복사해서 사용하고 있었는데..(??!!)&lt;/span&gt;&lt;br /&gt;Windows 10 이상은 텍스트 입력창에서 마우스 오른쪽 버튼을 눌러서 '이모지 &amp;amp; 기호'을 선택할 수 있다.&lt;br /&gt;단, 우클릭시 자체적인 팝업 메뉴를 사용하는 사이트 등에서는 사용할 수 없다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;방법 2. 단축키&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우 키 + ;(세미콜론) 또는 .(점)&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;웬만하면 잊지 않겠지만 혹시 모르니까..&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;그 외 특이사항&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 영어 이모지&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAEgEy/dJMcaiorG39/wI2ByFX2Qwat6pYxuf2twk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAEgEy/dJMcaiorG39/wI2ByFX2Qwat6pYxuf2twk/img.png&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;392&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.675%; margin-right: 10px;&quot; data-widthpercent=&quot;33.45&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAEgEy/dJMcaiorG39/wI2ByFX2Qwat6pYxuf2twk/img.png&quot; alt=&quot;같은 의미를 영어와 한국어로 검색했을 때 차이&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAEgEy%2FdJMcaiorG39%2FwI2ByFX2Qwat6pYxuf2twk%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;352&quot; height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RTS0j/dJMcaiaVrh1/33ZomKAmgo9ZfAt8ABLGlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RTS0j/dJMcaiaVrh1/33ZomKAmgo9ZfAt8ABLGlk/img.png&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;394&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.3244%; margin-right: 10px;&quot; data-widthpercent=&quot;33.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RTS0j/dJMcaiaVrh1/33ZomKAmgo9ZfAt8ABLGlk/img.png&quot; alt=&quot;같은 의미를 영어와 한국어로 검색했을 때 차이&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRTS0j%2FdJMcaiaVrh1%2F33ZomKAmgo9ZfAt8ABLGlk%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;350&quot; height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rDhfc/dJMcahiMqJE/Yn9vKD4k5L7GDEHgqpjc8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rDhfc/dJMcahiMqJE/Yn9vKD4k5L7GDEHgqpjc8K/img.png&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;392&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.675%;&quot; data-widthpercent=&quot;33.46&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rDhfc/dJMcahiMqJE/Yn9vKD4k5L7GDEHgqpjc8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrDhfc%2FdJMcahiMqJE%2FYn9vKD4k5L7GDEHgqpjc8K%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;352&quot; height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;같은 의미를 영어와 한국어로 검색했을 때 차이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;영어로 검색하면 이모지를 못 찾아낸다. &lt;br /&gt;다른 언어의 윈도우를 안써서 모르겠으나 아마 설치된 윈도우의 언어에 영향을 받는 것 같다.&lt;br /&gt;단, GIF는 영어로 검색했을 때 해당 단어가 들어간 자료가 더 잘 나온다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2. 한영 전환&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ol848/dJMcafrJF3L/wGM2OgFrIGLJaqY5uRowVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ol848/dJMcafrJF3L/wGM2OgFrIGLJaqY5uRowVK/img.png&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;386&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4566%; margin-right: 10px;&quot; data-widthpercent=&quot;50.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ol848/dJMcafrJF3L/wGM2OgFrIGLJaqY5uRowVK/img.png&quot; alt=&quot;한영 전환시 발생하는 오류&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fol848%2FdJMcafrJF3L%2FwGM2OgFrIGLJaqY5uRowVK%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;351&quot; height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVjJPV/dJMcaa41wmA/laBkF2PBDvIJyBMkBomtS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVjJPV/dJMcaa41wmA/laBkF2PBDvIJyBMkBomtS0/img.png&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;391&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3806%;&quot; data-widthpercent=&quot;49.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVjJPV/dJMcaa41wmA/laBkF2PBDvIJyBMkBomtS0/img.png&quot; alt=&quot;한영 전환시 발생하는 오류&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVjJPV%2FdJMcaa41wmA%2FlaBkF2PBDvIJyBMkBomtS0%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;355&quot; height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;한영 전환시 발생하는 오류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한글과 영어를 같이 검색할 수 없다. 아니, 안하는게 정신건강에 유리하다.&lt;br /&gt;한글 입력 중 영어로 전환하면 한글자는 꼭 한글이 나오고 뒷부분부터 바뀐다.&lt;br /&gt;좀 더 테스트를 하고자 한은 한글로, 영은 전환후 dud으로 빠르게 번갈아가며 입력했더니&lt;br /&gt;전환을 포기하는 이상 현상이 발생하면서 커서도 중간쯤 고정되서 텍스트를 생성하는 오류가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 이모지는 한글로만 검색하고, GIF를 검색할 때는 한글이든 영어든 원하는 텍스트에 맞춰서 검색하자.&lt;/p&gt;</description>
      <category>etc</category>
      <category>emoji</category>
      <category>windows emoji</category>
      <category>윈도우 이모지</category>
      <category>이모지</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/985</guid>
      <comments>https://comp-jae.tistory.com/985#entry985comment</comments>
      <pubDate>Sun, 4 Jan 2026 02:24:03 +0900</pubDate>
    </item>
    <item>
      <title>USB 대용량 저장 장치을(를) 꺼내는 동안 문제가 발생했습니다.</title>
      <link>https://comp-jae.tistory.com/974</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2bUGH/btsNMbmY0Jx/66UnTAIfOOt2tY7HqXKaek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2bUGH/btsNMbmY0Jx/66UnTAIfOOt2tY7HqXKaek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2bUGH/btsNMbmY0Jx/66UnTAIfOOt2tY7HqXKaek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2bUGH%2FbtsNMbmY0Jx%2F66UnTAIfOOt2tY7HqXKaek%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;402&quot; height=&quot;148&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외장하드를 사용하는데 한 번씩 꺼내기를 하다 보면 위와 같은 에러메시지와 함께 꺼내기가 안 되는 일이 발생했다. 이 현상은 백그라운드에서 무엇인가 실행되고 있어서 장치에서 꺼내지 못함을 의미한다.&amp;nbsp;&lt;br /&gt;이에 몇가지 효과가 있었던 방법을 기록한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;작업 중인 파일 종료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 작업 중인 파일이 존재하는 경우.&lt;br /&gt;외장하드에 저장된 메모장을 열어놓고 편집하다가. 또는 저장된 파일을 실행시키고 종료하지 않은 채 꺼내기를 했던 경우가 있었다.&lt;br /&gt;또는 영상파일들을 재생시켰다가 잠시 멈춰두고 바로 꺼내기를 한 경우도 있었다.&lt;br /&gt;해당 파일들을 저장 및 종료하고 꺼내기를 진행하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 실행중인 백신 프로그램의 실시간 자동 보호 기능이 동작하면서 문제 될 수 있다. 외장기기들을 연결 시 백신 프로그램에서 자동으로 검사를 진행하는 경우도 있기 때문에 백신의 자동 보호 기능을 해제해 보거나 종료 후 진행하는 것도 도움이 된다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;작업 관리자 - Windows 탐색기 다시시작&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oFYEE/btsNLZGRjDI/odZgB5ZnXP3Rl3AoInLkC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oFYEE/btsNLZGRjDI/odZgB5ZnXP3Rl3AoInLkC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oFYEE/btsNLZGRjDI/odZgB5ZnXP3Rl3AoInLkC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoFYEE%2FbtsNLZGRjDI%2FodZgB5ZnXP3Rl3AoInLkC1%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;620&quot; height=&quot;369&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Ctrl + Alt + Delete를 눌러 작업 관리자를 실행한다.&lt;br /&gt;USB 저장 장치에서 실행 중인 프로세스 및 프로그램을 선택한 다음 마우스 오른쪽 버튼을 클릭하여 해당 프로그램을 또는 프로세스를 종료한다.&lt;br /&gt;실행중인 프로그램이 없는데 꺼내기가 되지 않는 경우에는 프로세스에서 Windows 탐색기 - 마우스 우클릭 - 다시 시작을 실행한다.&amp;nbsp;&lt;br /&gt;기존에 열려있던 탐색기가 모두 닫히면서 신기하게도 웬만하면 꺼내기가 된다. &lt;br /&gt;파일 이동, 복사, 폴더 생성, 파일명이나 폴더명 변경 등 탐색기에서의 작업내역들이 메모리에 남아서 발생하는 문제인 것 같았다.&lt;br /&gt;한 번에 안되면 3~5번 정도 반복해서 진행해 보자.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Resource Monitor&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpYEHN/dJMcahQJPmo/yKLG53NqXV0JVzWzQCq4l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpYEHN/dJMcahQJPmo/yKLG53NqXV0JVzWzQCq4l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpYEHN/dJMcahQJPmo/yKLG53NqXV0JVzWzQCq4l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpYEHN%2FdJMcahQJPmo%2FyKLG53NqXV0JVzWzQCq4l0%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;784&quot; height=&quot;699&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;699&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;Win + R &amp;rarr; resmon 입력&lt;/li&gt;
&lt;li&gt;&quot;디스크&quot; 탭 &amp;rarr; &quot;디스크 활동&quot; 섹션에서 활동을 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 제거해야 할 드라이브에서 어떤 것이 실행되고 있는지 확인할 수 있다.&lt;br /&gt;나같은 경우 외장하드를 사면서 설치한 제조사 자체 백업 프로그램이 문제였던 적이 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;명령 프롬프트&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리소스 모니터에서 실행중인 것을 다 일일이 제거했음에도 시스템적으로 뭔가 실행되고 있을 때 이렇게 조치한다.&lt;br /&gt;관리자 권한으로 명령프롬프트를 실행시킨다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUeqi7/dJMcafFL0Sy/Rw33rPopNuTTHW3KL9Cguk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUeqi7/dJMcafFL0Sy/Rw33rPopNuTTHW3KL9Cguk/img.png&quot; data-alt=&quot;명령프롬프트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUeqi7/dJMcafFL0Sy/Rw33rPopNuTTHW3KL9Cguk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUeqi7%2FdJMcafFL0Sy%2FRw33rPopNuTTHW3KL9Cguk%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; alt=&quot;윈도우 시작프로그램에서 명령프롬프트를 검색&quot; loading=&quot;lazy&quot; width=&quot;834&quot; height=&quot;344&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;명령프롬프트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;diskpart를 실행시켜 아래의 순서대로 입력해서 드라이브를 강제 종료 시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1772905668860&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;diskpart
list volume
select volume x (해당 드라이브 번호)
offline disk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcGrFi/dJMcaiibk6t/4pHEVAUYogDdAZeou8kzA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcGrFi/dJMcaiibk6t/4pHEVAUYogDdAZeou8kzA0/img.png&quot; data-alt=&quot;diskpart&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcGrFi/dJMcaiibk6t/4pHEVAUYogDdAZeou8kzA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcGrFi%2FdJMcaiibk6t%2F4pHEVAUYogDdAZeou8kzA0%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; alt=&quot;명령프롬프트에서 diskpart를 실행&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;381&quot; data-origin-width=&quot;652&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;diskpart&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이제 평소처럼 디스크 제거를 하면 제거가 정상적으로 된다.&lt;br /&gt;해당 디스크를 제거했다가 다시 재연결해도 반응이 없을텐데 그 때는 위의 순서대로 진행 후 마지막에 online disk 를 실행시킨다.&lt;br /&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;재부팅&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 방법들을 다 시도했는데도 안될 때는 컴퓨터를 재부팅하고 바로&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;꺼내기를&lt;/span&gt; 시도해 보자. 단, 윈도우 업데이트가 예정되어 있는 상태에서 외부기기를 연결한 상태로 재부팅하면 업데이트 완료가 되지 않고 멈추는 경우가 있으니 업데이트가 자동 실행되지 않도록 하고 재부팅해야 한다.&lt;/p&gt;</description>
      <category>etc</category>
      <category>USB</category>
      <category>USB 대용량 저장 장치을(를) 꺼내는 동안 문제가 발생했습니다.</category>
      <category>외장하드</category>
      <category>장치을(를) 꺼내는 동안 문제가 발생</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/974</guid>
      <comments>https://comp-jae.tistory.com/974#entry974comment</comments>
      <pubDate>Wed, 7 May 2025 21:50:07 +0900</pubDate>
    </item>
    <item>
      <title>FileNotFoundError: [WinError 3]</title>
      <link>https://comp-jae.tistory.com/973</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Windows‑API는 기본 설정에서&amp;nbsp;경로가 &lt;b&gt;260&amp;nbsp;자&lt;/b&gt;(MAX_PATH) 를 넘으면 &amp;ldquo;파일을 찾을 수 없다(FileNotFoundError / WinError 3)&amp;rdquo;라는 모호한 예외를 내보낸다.&lt;/p&gt;
&lt;h4 data-end=&quot;529&quot; data-start=&quot;517&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;해결 방법 - Windows 긴 경로(&amp;gt; 260 자) 활성화&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2TGdb/btsNsdqFFQZ/vkVCIdKPpVAlL2vedpCFDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2TGdb/btsNsdqFFQZ/vkVCIdKPpVAlL2vedpCFDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2TGdb/btsNsdqFFQZ/vkVCIdKPpVAlL2vedpCFDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2TGdb%2FbtsNsdqFFQZ%2FvkVCIdKPpVAlL2vedpCFDK%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;2010&quot; height=&quot;493&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;951&quot; data-start=&quot;762&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;903&quot; data-start=&quot;762&quot;&gt;&lt;b&gt;Windows&amp;nbsp;10&amp;nbsp;/&amp;nbsp;11 Pro&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;903&quot; data-start=&quot;794&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;903&quot; data-start=&quot;794&quot;&gt;gpedit.msc &amp;rarr; 컴퓨터 구성 &amp;gt; 관리 템플릿 &amp;gt; 시스템 &amp;gt; 파일 시스템 &amp;rarr; &lt;b&gt;&amp;ldquo;Win32 긴 경로 사용 가능하도록 설정&amp;rdquo;&lt;/b&gt;&amp;nbsp;항목을 &lt;b&gt;사용&lt;/b&gt; 으로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;951&quot; data-start=&quot;904&quot;&gt;&lt;b&gt;Home 버전 또는 스크립트 배포용&lt;/b&gt;&lt;br /&gt;관리자 PowerShell:&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1745011814848&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;New-ItemProperty -Path &quot;HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem&quot; ` -Name LongPathsEnabled -PropertyType DWord -Value 1 -Force&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;b&gt;참고&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=toruin84&amp;amp;logNo=222440232860&quot;&gt;윈도우11 홈 버전에 로컬 그룹 정책 편집기 gpedit.msc 설치 : 네이버 블로그&lt;/a&gt;&lt;/p&gt;</description>
      <category>etc</category>
      <category>filenotfounderror</category>
      <category>winerror 3</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/973</guid>
      <comments>https://comp-jae.tistory.com/973#entry973comment</comments>
      <pubDate>Sat, 19 Apr 2025 06:39:39 +0900</pubDate>
    </item>
    <item>
      <title>혼공학습단 13기 활동 회고</title>
      <link>https://comp-jae.tistory.com/961</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bci7lJ/btsMuKI2fxx/MNP7LvRKD0YliR05PzH4Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bci7lJ/btsMuKI2fxx/MNP7LvRKD0YliR05PzH4Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bci7lJ/btsMuKI2fxx/MNP7LvRKD0YliR05PzH4Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbci7lJ%2FbtsMuKI2fxx%2FMNP7LvRKD0YliR05PzH4Y1%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;640&quot; height=&quot;1012&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;885&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;혼공학습단 13기, 나의 6주간 도전기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새해가 되면 으레 새로운 목표를 세운다. '올해는 다이어트!' 같은 결심처럼 말이다. 올해&amp;nbsp;나는&amp;nbsp;새로운&amp;nbsp;도전을&amp;nbsp;선택했다.&amp;nbsp;바로&amp;nbsp;'혼자&amp;nbsp;공부하는&amp;nbsp;학습&amp;nbsp;습관'을&amp;nbsp;만들기&amp;nbsp;위해&amp;nbsp;혼공학습단&amp;nbsp;13기에&amp;nbsp;지원한&amp;nbsp;것.&amp;nbsp;그리고&amp;nbsp;1월&amp;nbsp;6일부터&amp;nbsp;시작된&amp;nbsp;여정은&amp;nbsp;6주&amp;nbsp;동안&amp;nbsp;꾸준히&amp;nbsp;이어졌고,&amp;nbsp;마침내&amp;nbsp;2월&amp;nbsp;23일에&amp;nbsp;마무리되었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;무엇을 원하는가&lt;/blockquote&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혼공학습단에 선정되었을 때 가장 기뻤던 건, 내가 좋아하는 윤인성님의 책으로 공부할 수 있다는 점이었다. 혼공 시리즈를 이미 여러 권 가지고 있었지만, 제대로 완독한 적은 없었다. 국비학원을 다니면서 바쁘게 공부하느라 책들은 한쪽에 쌓여만 갔다. 그런데 이번에는 다르게 해보고 싶었다. 취업 준비가 길어지면서 학습했던 것들이 희미해졌고, 다시 집중력을 끌어올리고 싶었다. 그래서 새로운 한 해를 맞아 학습 습관을 되찾고자 혼공학습단에 지원했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;혼공시리즈의 장점 인강!&lt;/blockquote&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이번 학습단에서는 매일 30분에서 1시간씩 인강을 듣는 루틴을 만들었다. 그리고 학습 내용을 블로그와 깃허브에 정리하며 복습했다. 인강은 반드시 보는 것을 추천한다. 책에서는 접하기 어려운 윤인성님의 실전 팁들이 가득하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히 인상 깊었던 장면이 있다. 조건문 챕터에서 짝수/홀수 판별하는 알고리즘을 다룰 때였다. 윤쌤이 &quot;나머지 연산자를 사용하면 된다는 단순한 알고리즘도, 처음 접하는 사람들은 스스로 생각하기 어렵고, 다들 어디선가 한 번쯤 보고 깨닫게 됩니다.&quot;라고 말씀하셨다. 이 말에 &quot;아, 나만 그런 게 아니었구나!&quot; 하고 안도감이 들었다. 혼자 공부할 때는 내가 부족한 것처럼 느껴졌지만, 모두가 같은 과정을 거친다는 걸 알게 되어 위로가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;느리지만 꾸준하게&lt;/blockquote&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혼공학습단에서는 매주 블로그에 주차별 과제를 기록해야 했다. 하지만 학습 내용을 정리하는 데 생각보다 시간이 오래 걸렸다. 매일 인강을 들었지만, 이를 블로그에 체계적으로 정리하는 것이 쉽지 않았다. 사실 이건 나 스스로가 학습 내용을 하나도 빠짐없이 기록하겠다는 욕심 때문이기도 했다. 기본 미션만 해도 충분했지만, 나는 더 깊이 있게 정리하고 싶었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;시간이 부족할 때는 AI를 활용하기도 했다. 챕터의 주요 개념과 소주제를 먼저 정리한 뒤, 강의를 들으며 이를 보완하는 방식으로 시간을 절약했다. 이렇게 하니 효율적으로 학습할 수 있었고, 매주 빠짐없이 과제를 수행할 수 있었다.&lt;/span&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;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;다음 목표는?&lt;/blockquote&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혼공학습단은 끝이 났지만, 내 학습은 아직 진행 중이다. 아직 남은 챕터들을 완강하는 것이 첫 번째 목표다. 그리고 배운 내용을 바탕으로 개인 프로젝트를 진행해볼 계획이다. 최근 리액트만 다루다 보니 순수 자바스크립트로 DOM을 조작하던 감각이 흐려졌다. 하지만 결국 자바스크립트가 근본이니, 이를 더 자유롭게 다루는 것이 목표다. 이를 위해 프로젝트를 통해 실전 경험을 쌓으려 한다.&lt;/span&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;blockquote data-ke-style=&quot;style2&quot;&gt;혼공족장님 만세!&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bth3J7/btsMztuCOtB/vvJo2legkOi2cyKTP71Lu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bth3J7/btsMztuCOtB/vvJo2legkOi2cyKTP71Lu1/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot; id=&quot;kEditorPhotosEditingImage-3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bth3J7/btsMztuCOtB/vvJo2legkOi2cyKTP71Lu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbth3J7%2FbtsMztuCOtB%2FvvJo2legkOi2cyKTP71Lu1%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSzf7t/btsMx2ESNob/KPBa50gTsLji5Foe6WQ2zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSzf7t/btsMx2ESNob/KPBa50gTsLji5Foe6WQ2zK/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot; id=&quot;kEditorPhotosEditingImage-4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSzf7t/btsMx2ESNob/KPBa50gTsLji5Foe6WQ2zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSzf7t%2FbtsMx2ESNob%2FKPBa50gTsLji5Foe6WQ2zK%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QrCl4/btsMzQJ7smo/KhZfN6qVPZ5IAqMGzSzKFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QrCl4/btsMzQJ7smo/KhZfN6qVPZ5IAqMGzSzKFk/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 41.0909%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;42.07&quot; id=&quot;kEditorPhotosEditingImage-5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QrCl4/btsMzQJ7smo/KhZfN6qVPZ5IAqMGzSzKFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQrCl4%2FbtsMzQJ7smo%2FKhZfN6qVPZ5IAqMGzSzKFk%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HTSab/btsMyEwQ80C/tLbZ9mDNFKx01wYagUjvf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HTSab/btsMyEwQ80C/tLbZ9mDNFKx01wYagUjvf0/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 41.0909%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;42.07&quot; id=&quot;kEditorPhotosEditingImage-6&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HTSab/btsMyEwQ80C/tLbZ9mDNFKx01wYagUjvf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHTSab%2FbtsMyEwQ80C%2FtLbZ9mDNFKx01wYagUjvf0%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K2Gvi/btsMyHmyvAw/BWSy5tknPKFk7bfSuntha1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K2Gvi/btsMyHmyvAw/BWSy5tknPKFk7bfSuntha1/img.png&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;512&quot; data-is-animation=&quot;false&quot; width=&quot;250&quot; height=&quot;252&quot; data-widthpercent=&quot;15.86&quot; id=&quot;kEditorPhotosEditingImage-1&quot; style=&quot;width: 15.4926%; margin-top: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K2Gvi/btsMyHmyvAw/BWSy5tknPKFk7bfSuntha1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK2Gvi%2FbtsMyHmyvAw%2FBWSy5tknPKFk7bfSuntha1%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;508&quot; height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMr7KD/btsMyldenoF/V0C8bwqm61ZfzTq3EkNN50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMr7KD/btsMyldenoF/V0C8bwqm61ZfzTq3EkNN50/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 40.573%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;41.54&quot; id=&quot;kEditorPhotosEditingImage-7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMr7KD/btsMyldenoF/V0C8bwqm61ZfzTq3EkNN50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMr7KD%2FbtsMyldenoF%2FV0C8bwqm61ZfzTq3EkNN50%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdoyMh/btsMxG9niSy/3Z0fcWRX6dqGpze8YPUBd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdoyMh/btsMxG9niSy/3Z0fcWRX6dqGpze8YPUBd1/img.png&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;380&quot; data-is-animation=&quot;false&quot; width=&quot;650&quot; height=&quot;247&quot; style=&quot;width: 40.573%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;41.54&quot; id=&quot;kEditorPhotosEditingImage-8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdoyMh/btsMxG9niSy/3Z0fcWRX6dqGpze8YPUBd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdoyMh%2FbtsMxG9niSy%2F3Z0fcWRX6dqGpze8YPUBd1%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;1000&quot; height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3ZtHf/btsMyspCc93/HmnWVWX7L5mw5GshImb3kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3ZtHf/btsMyspCc93/HmnWVWX7L5mw5GshImb3kK/img.png&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;472&quot; data-is-animation=&quot;false&quot; width=&quot;250&quot; height=&quot;233&quot; data-widthpercent=&quot;16.92&quot; id=&quot;kEditorPhotosEditingImage-2&quot; style=&quot;width: 16.5284%; margin-top: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3ZtHf/btsMyspCc93/HmnWVWX7L5mw5GshImb3kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3ZtHf%2FbtsMyspCc93%2FHmnWVWX7L5mw5GshImb3kK%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;506&quot; height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;주차별 간식과 응원의 메시지! &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사실 이 여정을 끝까지 완주할 수 있었던 것은 혼공족장님의 응원 덕분이다. 매주 과제를 제출하면 며칠 내로 족장님의 응원의 메시지가 댓글로 달렸다. 이 작은 격려가 목표를 달성하는 데 큰 동기부여가 되었다. 또한, 주차별 목표를 달성한 사람들 중 일부는 간식을 받을 수 있었는데, 나는 완주 간식까지 포함해 총 4번이나 받았다! 게다가 완주자에게는 한빛미디어에서 사용할 수 있는 2만 마일리지가 지급된다. 다음에는 어떤 혼공 시리즈를 구매해서 학습단에 참여할지 고민중이다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>13기</category>
      <category>완강</category>
      <category>완독</category>
      <category>혼공학습단</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/961</guid>
      <comments>https://comp-jae.tistory.com/961#entry961comment</comments>
      <pubDate>Sun, 23 Feb 2025 23:52:04 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 6주차 Chapter 07 문서 객체 모델</title>
      <link>https://comp-jae.tistory.com/960</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uNwfd/btsMudSr41L/KlOd0QpqXGAUv0QHrrFaY0/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uNwfd/btsMudSr41L/KlOd0QpqXGAUv0QHrrFaY0/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uNwfd/btsMudSr41L/KlOd0QpqXGAUv0QHrrFaY0/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuNwfd%2FbtsMudSr41L%2FKlOd0QpqXGAUv0QHrrFaY0%2Ftfile.dat&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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;p.&amp;nbsp;315의&amp;nbsp;&amp;lt;직접&amp;nbsp;해보는&amp;nbsp;손코딩&amp;gt;을&amp;nbsp;실행한&amp;nbsp;후&amp;nbsp;출력되는&amp;nbsp;고양이&amp;nbsp;이미지&amp;nbsp;캡처하기&lt;/b&gt;&lt;/h4&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;https://www.placecats.com으로&quot;&gt;https://www.placecats.com으로&lt;/a&gt; 변경되었음.&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;562&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brREkB/btsMuLiL2w7/elKf70WKXaNv8OoFrHy890/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brREkB/btsMuLiL2w7/elKf70WKXaNv8OoFrHy890/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brREkB/btsMuLiL2w7/elKf70WKXaNv8OoFrHy890/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrREkB%2FbtsMuLiL2w7%2FelKf70WKXaNv8OoFrHy890%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;562&quot; height=&quot;306&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1740473564803&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const img = document.querySelector(&quot;img&quot;);
      img.setAttribute(&quot;src&quot;, &quot;https://www.placecats.com/200/200&quot;);
      img.src = &quot;https://www.placecats.com/200/200&quot;;

      console.log(img.getAttribute(&quot;src&quot;));
      console.log(img.src);
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;img src=&quot;&quot; alt=&quot;&quot; /&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 352 누적 예제를 활용하여 본인의 할 일 목록을 만들어 캡처하기&lt;/span&gt; &lt;/span&gt; &lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA6zvK/btsMxCc5OeI/Wm2E6etOzoJD8n418f7hsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA6zvK/btsMxCc5OeI/Wm2E6etOzoJD8n418f7hsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA6zvK/btsMxCc5OeI/Wm2E6etOzoJD8n418f7hsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA6zvK%2FbtsMxCc5OeI%2FWm2E6etOzoJD8n418f7hsK%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;510&quot; height=&quot;264&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const addTodo = () =&amp;gt; {
        if (input.value !== &quot;&quot;) {
          const div = document.createElement(&quot;div&quot;);
          document.body.appendChild(div);

          const checkbox = document.createElement(&quot;input&quot;);
          checkbox.type = &quot;checkbox&quot;;
          checkbox.addEventListener(&quot;change&quot;, () =&amp;gt; {
            if (checkbox.checked) {
              div.style.textDecoration = &quot;line-through&quot;;
            } else {
              div.style.textDecoration = &quot;&quot;;
            }
          });
          div.appendChild(checkbox);

          const span = document.createElement(&quot;span&quot;);
          span.textContent = input.value;
          input.value = &quot;&quot;;
          div.appendChild(span);

          const deleteButton = document.createElement(&quot;button&quot;);
          deleteButton.textContent = &quot;제거하기&quot;;
          deleteButton.addEventListener(&quot;click&quot;, () =&amp;gt; {
            div.parentNode.removeChild(div);
          });
          div.appendChild(deleteButton);
        }
      };

      const h1 = document.createElement(&quot;h1&quot;);
      h1.textContent = &quot;할 일 목록&quot;;
      document.body.appendChild(h1);
      const input = document.createElement(&quot;input&quot;);
      input.addEventListener(&quot;keyup&quot;, (e) =&amp;gt; {
        if (e.keyCode === 13) {
          addTodo();
        }
      });
      document.body.appendChild(input);

      const addButton = document.createElement(&quot;button&quot;);
      addButton.textContent = &quot;추가하기&quot;;
      document.body.appendChild(addButton);
      addButton.addEventListener(&quot;click&quot;, addTodo);
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문서 객체 모델 &lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문서 객체 모델(Document Object Model), 줄여서 DOM이라고 부른다.&lt;/li&gt;
&lt;li&gt;문서 객체는 HTML 요소를 의미한다.&lt;/li&gt;
&lt;li&gt;문서&amp;nbsp;객체&amp;nbsp;모델은&amp;nbsp;자바스크립트를&amp;nbsp;통해&amp;nbsp;HTML&amp;nbsp;요소를&amp;nbsp;조작할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해주는&amp;nbsp;객체들의&amp;nbsp;집합이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;DOMContentLoaded&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;html에서 &amp;lt;script&amp;gt;가 실행될 때 DOM이 아직 만들어지지 않은 경우를 방지한다.&lt;/li&gt;
&lt;li&gt;head 내에 script 태그를 넣고 싶을 때 사용하며, body 태그 내 문서 가장 하단에 script를 배치하면 필요치 않다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, ()=&amp;gt;{
      console.log(&quot;안녕하세요&quot;)
    })
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;script&amp;gt;
    console.log(&quot;안녕하세요&quot;)
  &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;querySelector()&lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;document 객체를 통해 HTML 문서 내의 태그에 접근할 수 있다.&lt;/li&gt;
&lt;li&gt;querySelector()는 해당 조건에 맞는 첫 번째 태그만 선택한다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;다양한 선택자를 태그로 선택할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.querySelector(&quot;h1&quot;).style.color = &quot;red&quot;; // 태그 선택자
    document.querySelector(&quot;#header&quot;).style.backgroundColor = &quot;orange&quot;; // 아이디 선택자
    document.querySelector(&quot;.center.head&quot;).style.textAlign = &quot;center&quot;; // 클래스 선택자
    document.querySelector(&quot;[type=text]&quot;).style.borderRadius = &quot;10px&quot;; // 속성 선택자
    document.querySelector(&quot;body input&quot;).style.backgroundColor = &quot;blue&quot;; // 후손 선택자
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;h1 id=&quot;header&quot; class=&quot;center head&quot;&amp;gt;안녕하세요!&amp;lt;/h1&amp;gt;
  &amp;lt;input type=&quot;text&quot;&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;querySelectorAll()&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;querySelectorAll()은 해당 조건의 모든 태그를 선택한다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;querySelectorAll()의 결과는 NodeList라는 유사 배열(Iterable) 객체다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;NodeList 자체는 HTML 요소들의 리스트이지만, style 속성은 개별 요소(HTMLElement)에만 적용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;따라서 &lt;/span&gt;&lt;span&gt;각 요소를 순회하면서 적용해야 한다. 이 때 반복문을 활용한다.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
  document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      for (const el of document.querySelectorAll(&quot;input&quot;)) {
        el.style.backgroundColor = &quot;red&quot;;
      }
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;h1 id=&quot;header&quot; class=&quot;center head&quot;&amp;gt;안녕하세요!&amp;lt;/h1&amp;gt;
  &amp;lt;input type=&quot;text&quot; /&amp;gt;
  &amp;lt;input type=&quot;&quot; /&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;textContent / innerHTML&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;textContent는 값을 모두 문자로 인식한다.&lt;/li&gt;
&lt;li&gt;innerHTML은 값 내의 태그를 HTML로 인식한다.&lt;/li&gt;
&lt;li&gt;따라서&amp;nbsp;innerHTML은&amp;nbsp;보안상&amp;nbsp;문제가&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;가급적&amp;nbsp;textContent를&amp;nbsp;사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const header1 = document.querySelector(&quot;#textContent&quot;);
      const header2 = document.querySelector(&quot;#innerHTML&quot;);

      header1.textContent = &quot;바뀐 문자열&amp;lt;br&amp;gt;입니다.&quot;;
      header2.innerHTML = &quot;바뀐 문자열&amp;lt;br&amp;gt;입니다.&quot;;
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;h1 id=&quot;textContent&quot;&amp;gt;textContent 속성 기존 문자열&amp;lt;/h1&amp;gt;
  &amp;lt;h1 id=&quot;innerHTML&quot;&amp;gt;innerHTML 속성 기존 문자열&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;setAttribute / getAttribute&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값 넣기: element.setAttribute(&quot;속성명&quot;, &quot;값&quot;)&lt;/li&gt;
&lt;li&gt;값 추출: element.getAttribute(&quot;속성명&quot;)&lt;/li&gt;
&lt;li&gt;표준 속성(src, alt 등)은 점(.)으로 바로 접근 가능하다.&lt;/li&gt;
&lt;li&gt;사용자&amp;nbsp;정의&amp;nbsp;속성을&amp;nbsp;조작할&amp;nbsp;때&amp;nbsp;해당&amp;nbsp;메서드를&amp;nbsp;활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const img = document.querySelector(&quot;img&quot;);
      img.setAttribute(&quot;src&quot;, &quot;https://www.placecats.com/200/200&quot;);
      img.src = &quot;https://www.placecats.com/200/200&quot;;

      console.log(img.getAttribute(&quot;src&quot;));
      console.log(img.src);
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;img src=&quot;&quot; alt=&quot;&quot; /&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;스타일 조작&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;element.style.속성 = &quot;값&quot;&lt;/li&gt;
&lt;li&gt;자바스크립트에서는 CSS 속성명의 대시(-)를 대문자로 표현한다.&lt;/li&gt;
&lt;li&gt;또는 객체 속성으로 접근하는 방식도 사용 가능은 하다.(권장하지 않음)&lt;/li&gt;
&lt;li&gt;단위를 꼭 같이 표기해야 한다. (ex. height: &quot;10px&quot;)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740425479937&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const divs = document.querySelectorAll(&quot;div&quot;);

      divs.forEach((div, key) =&amp;gt; {
        div.style.backgroundColor = `rgb(${key * 25.5},${key * 25.5},${
          key * 25.5
        })`;
        div.style.height = &quot;10px&quot;;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문서&amp;nbsp;객체&amp;nbsp;생성,&amp;nbsp;제거,&amp;nbsp;이동 &lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문서 객체 생성하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;createElement()&lt;/li&gt;
&lt;li&gt;첫 번째 매개변수에 태그 이름을 입력하여 원하는 태그를 생성할 수 있다.&lt;/li&gt;
&lt;li&gt;생성된 태그 객체를 변수에 저장하면 내부 텍스트, 스타일, 속성 등을 수정할 수 있다.&lt;/li&gt;
&lt;li&gt;단, 이 단계는 생성만 한 것이기 때문에 화면에 출력되지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740425685070&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
  const header = document.createElement(&quot;h1&quot;);

  header.textContent = &quot;createElement로 만든 태그입니다.&quot;;
  header.style.backgroundColor = &quot;black&quot;;
  header.style.color = &quot;white&quot;;
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문서 객체 붙이기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;appendChild()&lt;/li&gt;
&lt;li&gt;생성된 문서 객체를 화면에 출력할 때 태그를 지정해 자식으로 붙인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740425740289&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
  const header = document.createElement(&quot;h1&quot;);

  header.textContent = &quot;createElement로 만든 태그입니다.&quot;;
  header.style.backgroundColor = &quot;black&quot;;
  header.style.color = &quot;white&quot;;

  const body = document.querySelector(&quot;body&quot;);
  body.appendChild(header);
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문서&amp;nbsp;객체&amp;nbsp;제거하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;removeChild()&lt;/li&gt;
&lt;li&gt;부모&amp;nbsp;노드(parentNode)를&amp;nbsp;사용하면&amp;nbsp;요소만으로&amp;nbsp;removeChild()&amp;nbsp;메서드를&amp;nbsp;호출하여&amp;nbsp;노드를&amp;nbsp;제거할&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;더&amp;nbsp;편하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const header = document.createElement(&quot;h1&quot;);

header.textContent = &quot;createElement로 만든 태그입니다.&quot;;
header.style.backgroundColor = &quot;black&quot;;
header.style.color = &quot;white&quot;;

const body = document.querySelector(&quot;body&quot;);
body.appendChild(header);
setTimeout(() =&amp;gt; {
  body.removeChild(header); // header의 위치가 바뀌면 새로운 위치를 지정해야 함.
  header.parentNode(header); // 항상 header의 부모 노드에서 제거함
}, 2000);&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문서 객체 이동하기 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;appendChild()&lt;/li&gt;
&lt;li&gt;출력하는 메서드이나 다른 위치를 지정해 출력하면 복사가 아니라 이동한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740426429399&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const header = document.createElement(&quot;h2&quot;);
      const first = document.querySelector(&quot;.first&quot;);
      const second = document.querySelector(&quot;.second&quot;);

      header.textContent = &quot;안녕하세요&quot;;

      first.appendChild(header);

      setTimeout(() =&amp;gt; {
        second.appendChild(header);
      }, 2000);
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;div class=&quot;first&quot;&amp;gt;
    &amp;lt;h1&amp;gt;첫 번째 div 태그 내부&amp;lt;/h1&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;second&quot;&amp;gt;
    &amp;lt;h1&amp;gt;두 번째 div 태그 내부&amp;lt;/h1&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이벤트 핸들링&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이벤트 연결하기 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;addEventListener()&lt;/li&gt;
&lt;li&gt;첫 번째 인자에 이벤트 이름, 두 번째 인자에 이벤트 발생 시 호출할 함수를 지정한다.&lt;/li&gt;
&lt;li&gt;아래 코드의 경우 텍스트를 클릭시 클릭 횟수가 증가한다.&lt;/li&gt;
&lt;li&gt;이 때 텍스트가 불필요하게 선택되는데 userSelect를 none으로 설정하면 이 기능을 없앨 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305784231&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const header = document.createElement(&quot;h1&quot;);
document.body.appendChild(header);

let count = 0;
header.style.userSelect = &quot;none&quot;;
header.textContent = `클릭 횟수 : ${count}회`;

header.addEventListener(&quot;click&quot;, () =&amp;gt; {
  header.textContent = `클릭 횟수 : ${++count}회`;
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이벤트&amp;nbsp;제거하기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;removeEventListener()&lt;/li&gt;
&lt;li&gt;제거할 때는 addEventListener에서 사용한 것과 동일한 함수를 매개변수로 전달한다.&lt;/li&gt;
&lt;li&gt;이를 위해 일반적으로 함수를 별도의 변수에 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305828757&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let counter = 0;

// 이벤트 중복연결을 막아줄 조건 설정
let isConnect = false;
  
const listener = () =&amp;gt; {
  header.textContent = `클릭 횟수 : ${++counter}회`;
};

const header = document.createElement(&quot;h1&quot;);
header.textContent = &quot;클릭 횟수 : 0회&quot;;

const p = document.createElement(&quot;p&quot;);
p.textContent = &quot;이벤트 연결 상태: 해제&quot;;

const connectButton = document.createElement(&quot;button&quot;);
connectButton.textContent = &quot;이벤트 연결&quot;;
connectButton.addEventListener(&quot;click&quot;, () =&amp;gt; {
  if (isConnect === false) {
    header.addEventListener(&quot;click&quot;, listener);
    p.textContent = &quot;이벤트 연결 상태: 연결&quot;;
    isConnect = true
  }
});

const disconnectButton = document.createElement(&quot;button&quot;);
disconnectButton.textContent = &quot;이벤트 해제&quot;;
disconnectButton.addEventListener(&quot;click&quot;, () =&amp;gt; {
  header.removeEventListener(&quot;click&quot;, listener);
  p.textContent = &quot;이벤트 연결 상태: 해제&quot;;
});

document.body.appendChild(header);
document.body.appendChild(connectButton);
document.body.appendChild(disconnectButton);
document.body.appendChild(p);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이벤트 활용&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;키보드&amp;nbsp;이벤트&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;keyup / keypress / keydown&lt;/li&gt;
&lt;li&gt;키보드 입력 상황별 이벤트다.&lt;/li&gt;
&lt;li&gt;keypress는&amp;nbsp;브라우저에&amp;nbsp;따라&amp;nbsp;아시아권의&amp;nbsp;문자를&amp;nbsp;제대로&amp;nbsp;처리하지&amp;nbsp;못하는&amp;nbsp;문제가&amp;nbsp;있어&amp;nbsp;잘&amp;nbsp;사용하지&amp;nbsp;않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1740427055293&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener(&quot;keyup&quot;, () =&amp;gt; {
  document.body.innerHTML = &quot;&amp;lt;h1&amp;gt;keyup 이벤트 발생&amp;lt;/h1&amp;gt;&quot;;
});

document.addEventListener(&quot;keydown&quot;, () =&amp;gt; {
  document.body.innerHTML = &quot;&amp;lt;h1&amp;gt;keydown 이벤트 발생&amp;lt;/h1&amp;gt;&quot;;
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이벤트 객체&lt;/b&gt;&lt;/h4&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;/ul&gt;
&lt;pre id=&quot;code_1739811974325&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.addEventListener(&quot;keyup&quot;, (e) =&amp;gt; {
  document.body.innerHTML = `&amp;lt;h1&amp;gt;${e.code} 이벤트 발생&amp;lt;/h1&amp;gt;`;
});

document.addEventListener(&quot;keydown&quot;, (e) =&amp;gt; {
  document.body.innerHTML = `&amp;lt;h1&amp;gt;${e.code} 이벤트 발생&amp;lt;/h1&amp;gt;`;
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이벤트 발생 객체&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래의 코드는 textarea태그에 이벤트를 연결했다. 이 때&amp;nbsp; textarea는 이벤트 발생 객체가 된다.&lt;/li&gt;
&lt;li&gt;이를 참조하는 다양한 방식이 있다.&lt;/li&gt;
&lt;li&gt;대표적으로 currentTarget을 통해 이벤트 발생 객체를 참조하는 방식이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739812055000&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const h1 = document.querySelector(&quot;h1&quot;);
const textarea = document.querySelector(&quot;textarea&quot;);
textarea.addEventListener(&quot;keyup&quot;, () =&amp;gt; {
  h1.textContent = `글자 수 : ${textarea.value.length}`;
});

textarea.addEventListener(&quot;keyup&quot;, (e) =&amp;gt; {
  h1.textContent = `글자 수 : ${e.currentTarget.value.length}`;
});&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;화살표 함수가 아닌 익명함수를 사용해 this를 참조할 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673048839&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const h1 = document.querySelector(&quot;h1&quot;);
const textarea = document.querySelector(&quot;textarea&quot;);
textarea.addEventListener(&quot;keyup&quot;, () =&amp;gt; {
  h1.textContent = `글자 수 : ${textarea.value.length}`;
});

textarea.addEventListener(&quot;keyup&quot;, function () {
  h1.textContent = `글자 수 : ${this.value.length}`;
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;기본 이벤트 막기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;preventDefault()&lt;/li&gt;
&lt;li&gt;태그의 기본 동작을 막을 수 있다.&lt;/li&gt;
&lt;li&gt;예를 들어 a 태그를 눌러도 링크로 이동하지 않거나&lt;/li&gt;
&lt;li&gt;텍스트&amp;nbsp;위에서&amp;nbsp;마우스&amp;nbsp;오른쪽&amp;nbsp;버튼을&amp;nbsp;눌러도&amp;nbsp;contextmenu가&amp;nbsp;나오지&amp;nbsp;않게&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673057940&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const a = document.querySelector(&quot;a&quot;);
      a.addEventListener(&quot;click&quot;, (e) =&amp;gt; {
        e.preventDefault();
      });
      a.addEventListener(&quot;contextmenu&quot;, (e) =&amp;gt; {
        e.preventDefault();
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;a href=&quot;http://naver.com/&quot;&amp;gt;네이버&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입력&amp;nbsp;양식&amp;nbsp;버튼&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;버튼&amp;nbsp;관련&amp;nbsp;태그&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;button,&amp;nbsp;input 태그 중 type=&quot;button&quot;,&amp;nbsp;type=&quot;submit&quot;&lt;/li&gt;
&lt;li&gt;이 세 가지 태그 모두 버튼 기능을 한다.&lt;/li&gt;
&lt;li&gt;click 이벤트를 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673181838&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const buttonA = document.querySelector(&quot;button&quot;);
      const buttonB = document.querySelector(&quot;input[type=button]&quot;);

      buttonA.addEventListener(&quot;click&quot;, (event) =&amp;gt; {
        event.currentTarget.textContent += &quot;글자&quot;;
      });

      buttonB.addEventListener(&quot;click&quot;, (event) =&amp;gt; {
        event.currentTarget.value += &quot;글자&quot;;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- click 이벤트 활용 --&amp;gt;
  &amp;lt;button&amp;gt;버튼&amp;lt;/button&amp;gt;
  &amp;lt;input type=&quot;button&quot; value=&quot;input 버튼&quot; /&amp;gt;
&amp;lt;/body&amp;gt;&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;submit 이벤트는 form 태그에 연결해야 한다.&lt;/li&gt;
&lt;li&gt;그래서 click 이벤트와는 달리 submit 이벤트를 따로 활용한다.&lt;/li&gt;
&lt;li&gt;submit 이벤트 핸들러에서 이메일 형식 검사 등의 유효성 검증 로직을 구현할 수 있다.&lt;/li&gt;
&lt;li&gt;이메일&amp;nbsp;형식이&amp;nbsp;잘못된&amp;nbsp;경우&amp;nbsp;preventDefault()를&amp;nbsp;사용하여&amp;nbsp;form&amp;nbsp;제출을&amp;nbsp;막을&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739815921718&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const form = document.querySelector(&quot;form&quot;);
      form.addEventListener(&quot;submit&quot;, (e) =&amp;gt; {
        const text = document.querySelector(&quot;input[type=text]&quot;);
        if (text.value.indexOf(&quot;@&quot;) &amp;gt;= 0) {
          alert(&quot;정상적으로 제출합니다!&quot;);
        } else {
          alert(&quot;이메일 형식을 입력해주세요&quot;);
          e.preventDefault();
        }
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- submit 이벤트 활용 --&amp;gt;
  &amp;lt;form action=&quot;&quot;&amp;gt;
    &amp;lt;label for=&quot;submit&quot;&amp;gt;이메일 형식을 입력해주세요&amp;lt;/label&amp;gt;
    &amp;lt;br /&amp;gt;
    &amp;lt;input id=&quot;submit&quot; type=&quot;text&quot; /&amp;gt;
    &amp;lt;input type=&quot;submit&quot; value=&quot;제출&quot; /&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;&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;추가로 form 태그 내 button 태그는 submit 이벤트를 발생시킨다.&lt;/li&gt;
&lt;li&gt;따라서 form 내부에서 button을 사용하고 싶을 때는 button태그가 아닌 input[type=&quot;button&quot;]을 생성해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입력&amp;nbsp;양식&amp;nbsp;글자&amp;nbsp;입력&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;key&amp;nbsp;이벤트를&amp;nbsp;사용한&amp;nbsp;출력&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;input, text, textarea 등은 값을 가져올 때 value 속성을 사용한다.&lt;/li&gt;
&lt;li&gt;key&amp;nbsp;이벤트는&amp;nbsp;keydown&amp;nbsp;-&amp;gt;&amp;nbsp;keypress&amp;nbsp;-&amp;gt;&amp;nbsp;입력양식에&amp;nbsp;값&amp;nbsp;추가&amp;nbsp;-&amp;gt;&amp;nbsp;keyup&amp;nbsp;단계를&amp;nbsp;거친다.&lt;/li&gt;
&lt;li&gt;keydown과 keypress에 이벤트를 등록하면 실제 입력을 즉시 감지하지 못한다.&lt;/li&gt;
&lt;li&gt;따라서 입력 값 추출을 위해서는 keyup 이벤트를 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const input = document.querySelector(&quot;input&quot;);
      const p = document.querySelector(&quot;p&quot;);

      input.addEventListener(&quot;keyup&quot;, () =&amp;gt; {
        const inch = Number(input.value);

        // 숫자가 아닌 값을 판별
        if (isNaN(inch)) {
          p.textContent = &quot;숫자를 입력해주세요&quot;;
          return;
        }

        p.textContent = `${inch * 2.54}cm로 변환되었습니다.`;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;input type=&quot;text&quot; /&amp;gt; inch&amp;lt;br /&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;change&amp;nbsp;이벤트를&amp;nbsp;사용한&amp;nbsp;출력&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;input태그 전체의 입력을 마쳤을 때 발생한다.&lt;/li&gt;
&lt;li&gt;즉, 입력 중에는 발생하지 않고 입력을 마치고 엔터를 쳤을 때나&lt;/li&gt;
&lt;li&gt;입력&amp;nbsp;후&amp;nbsp;마우스로&amp;nbsp;input&amp;nbsp;이외에&amp;nbsp;다른&amp;nbsp;곳을&amp;nbsp;클릭하는&amp;nbsp;등&amp;nbsp;입력을&amp;nbsp;마쳤다는게&amp;nbsp;선언될&amp;nbsp;때&amp;nbsp;발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306264699&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const input = document.querySelector(&quot;input&quot;);
      const p = document.querySelector(&quot;p&quot;);

      input.addEventListener(&quot;change&quot;, () =&amp;gt; {
        const inch = Number(input.value);

        // 숫자가 아닌 값을 판별
        if (isNaN(inch)) {
          p.textContent = &quot;숫자를 입력해주세요&quot;;
          return;
        }

        p.textContent = `${inch * 2.54}cm로 변환되었습니다.`;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;input type=&quot;text&quot; /&amp;gt; inch&amp;lt;br /&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;윤쌤의&amp;nbsp;조언(1) &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;onChange를 사용한다면 값을 다 입력한 다음 유효성 검증 결과를 출력한다.&lt;/li&gt;
&lt;li&gt;setTimeout 같은 타이머 함수를 이용하면 입력 중에 유효성 검증 결과를 출력한다.&lt;/li&gt;
&lt;li&gt;즉,&amp;nbsp;어떤&amp;nbsp;방식의&amp;nbsp;사용자&amp;nbsp;경험을&amp;nbsp;제공할&amp;nbsp;것인지에&amp;nbsp;따라&amp;nbsp;다르게&amp;nbsp;구현하는&amp;nbsp;것으로&amp;nbsp;정답은&amp;nbsp;없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입력&amp;nbsp;양식&amp;nbsp;선택&amp;nbsp;상자&lt;/b&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;/li&gt;
&lt;li&gt;html에서&amp;nbsp;공식&amp;nbsp;명칭은&amp;nbsp;select&amp;nbsp;선택&amp;nbsp;박스이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;단일 선택 상자 사용하기 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;select 태그를 생성하고 내부에 option 태그를 이용해 선택 옵션을 만든다.&lt;/li&gt;
&lt;li&gt;선택 이벤트를 감지하기 위해 change 이벤트를 활용한다.&lt;/li&gt;
&lt;li&gt;선택된 옵션의 정보(선택된 옵션의 텍스트, 선택된 옵션의 인덱스)를 가져와 화면에 출력한다.&lt;/li&gt;
&lt;li&gt;currentTarget.options&amp;nbsp;와&amp;nbsp;currentTarget.options.selectedIndex를&amp;nbsp;활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306623554&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const select = document.querySelector(&quot;select&quot;);
      const p = document.querySelector(&quot;p&quot;);

      select.addEventListener(&quot;change&quot;, (e) =&amp;gt; {
        const options = e.currentTarget.options;
        const index = options.selectedIndex;
        p.textContent = `선택: ${options[index].textContent}`;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;select&amp;gt;
    &amp;lt;option&amp;gt;떡볶이&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;순대&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;오뎅&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;튀김&amp;lt;/option&amp;gt;
  &amp;lt;/select&amp;gt;
  &amp;lt;p&amp;gt;선택: 떡볶이&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;다중&amp;nbsp;선택&amp;nbsp;상자&amp;nbsp;사용하기&lt;/b&gt;&lt;/h4&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;이를 위해 select 태그에 multiple 속성을 추가한다.&lt;/li&gt;
&lt;li&gt;다중 선택 시 모든 선택된 옵션을 출력하는 로직
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;options을 순회한다.&lt;/li&gt;
&lt;li&gt;selected된 option을 모두 배열에 담는다.&lt;/li&gt;
&lt;li&gt;join&amp;nbsp;메서드로&amp;nbsp;배열을&amp;nbsp;문자열로&amp;nbsp;바꿔&amp;nbsp;출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816240579&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const select = document.querySelector(&quot;select&quot;);
      const p = document.querySelector(&quot;p&quot;);

      select.addEventListener(&quot;change&quot;, (e) =&amp;gt; {
        const options = e.currentTarget.options;
        const list = [];
        for (const option of options) {
          if (option.selected) {
            list.push(option.textContent);
          }
        }
        p.textContent = `선택: ${list.join(&quot;,&quot;)}`;
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;select multiple&amp;gt;
    &amp;lt;option&amp;gt;떡볶이&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;순대&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;오뎅&amp;lt;/option&amp;gt;
    &amp;lt;option&amp;gt;튀김&amp;lt;/option&amp;gt;
  &amp;lt;/select&amp;gt;
  &amp;lt;p&amp;gt;선택:&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입력&amp;nbsp;양식&amp;nbsp;체크박스와&amp;nbsp;라디오버튼 &lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;체크박스 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;true/false 값을 나타내는 데 사용한다.&lt;/li&gt;
&lt;li&gt;필수,선택 약관동의 등&lt;/li&gt;
&lt;li&gt;checked&amp;nbsp;속성으로&amp;nbsp;체크&amp;nbsp;상태를&amp;nbsp;확인해서&amp;nbsp;text를&amp;nbsp;변경한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306978458&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const checkbox = document.querySelector(&quot;input[type=checkbox]&quot;);
      const checkboxResult = document.querySelector(&quot;h1#checkbox&quot;);
      checkbox.addEventListener(&quot;change&quot;, () =&amp;gt; {
        if (checkbox.checked) {
          checkboxResult.textContent = &quot;체크&quot;;
        } else {
          checkboxResult.textContent = &quot;해제&quot;;
        }
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- 어떤 대상의 true 또는 false --&amp;gt;
  &amp;lt;input type=&quot;checkbox&quot; /&amp;gt;
  &amp;lt;h1 id=&quot;checkbox&quot;&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;라디오 버튼&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;과거방법1:&amp;nbsp;undefined&amp;nbsp;체크&amp;nbsp;방식 &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;name 속성을 기준으로 여러 값을 묶어서 처리한다.&lt;/li&gt;
&lt;li&gt;따라서&amp;nbsp;querySelectorAll을&amp;nbsp;사용하고,&amp;nbsp;forEach&amp;nbsp;반복문을&amp;nbsp;통해&amp;nbsp;값을&amp;nbsp;순회해서&amp;nbsp;확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739307040932&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
  &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
  &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const radios = document.querySelectorAll(
        &quot;input[type=radio][name=gender]&quot;
      );
      const radioResult = document.querySelector(&quot;h1#radiobutton&quot;);
      radios.forEach((radio) =&amp;gt; {
        radio.addEventListener(&quot;change&quot;, (e) =&amp;gt; {
          e.currentTarget.value;
          radioResult.textContent = `${e.currentTarget.value} 버튼이 선택되었습니다.`;
        });
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;!-- 여러 대상 중에서 하나를 선택 --&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;여성&quot; /&amp;gt;여성&amp;lt;br /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;남성&quot; /&amp;gt;남성&amp;lt;br /&amp;gt;
  &amp;lt;input type=&quot;radio&quot; name=&quot;gender&quot; value=&quot;직접지정&quot; /&amp;gt;직접지정&amp;lt;br /&amp;gt;
  &amp;lt;h1 id=&quot;radiobutton&quot;&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;윤쌤의&amp;nbsp;조언(2) &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;li&gt;구현된&amp;nbsp;코드가&amp;nbsp;있어야&amp;nbsp;최적화도&amp;nbsp;하고&amp;nbsp;유지보수도&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;localStorage 객체&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;로컬 스토리지 객체란?&lt;/b&gt;&lt;/h4&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;getItem,&amp;nbsp;setItem,&amp;nbsp;removeItem,&amp;nbsp;clear&amp;nbsp;메서드를&amp;nbsp;제공한다.&lt;/li&gt;
&lt;li&gt;간단한 애플리케이션에서 데이터 저장에 유용하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739307085147&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;localStorage.getItem(&quot;키&quot;); // 키로 값을 꺼낼 때
localStorage.setItem(&quot;키&quot;, &quot;값&quot;); // 키로 값을 저장할 떄
localStorage.removeItem(&quot;키&quot;); // 키로 값을 제거할 떄
localStorage.clear(); // 전체 제거할 때&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;키 하나에 데이터 하나 저장하기&lt;br /&gt;&lt;/b&gt;&lt;/h4&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;입력 시 로컬 스토리지에 &quot;key&quot;라는 키로 값 저장&lt;/li&gt;
&lt;li&gt;새로고침&amp;nbsp;시&amp;nbsp;로컬&amp;nbsp;스토리지에서&amp;nbsp;&quot;key&quot;&amp;nbsp;키&amp;nbsp;값을&amp;nbsp;읽어와&amp;nbsp;적용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816489689&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const p = document.querySelector(&quot;p&quot;);
      const button = document.querySelector(&quot;button&quot;);
      const input = document.querySelector(&quot;input&quot;);

      const key = localStorage.getItem(&quot;key&quot;);
      if (key !== null) {
        p.textContent = `이전 실행 때의 마지막 값: ${key}`;
      }
      input.value = key;

      button.addEventListener(&quot;click&quot;, () =&amp;gt; {
        localStorage.clear();
      });

      input.addEventListener(&quot;input&quot;, () =&amp;gt; {
        localStorage.setItem(&quot;key&quot;, input.value);
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;button&amp;gt;지우기&amp;lt;/button&amp;gt;
  &amp;lt;input type=&quot;text&quot; /&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;키 하나에 여러 데이터 저장하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&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;데이터를 저장할 때 키-값 쌍으로 저장하는데, 키가 많아지면 관리하기 복잡해질 수 있다.&lt;/li&gt;
&lt;li&gt;그래서 하나의 키에다가 여러 데이터를 저장하는 방법을 많이 사용한다.&lt;/li&gt;
&lt;li&gt;아래의&amp;nbsp;예시는&amp;nbsp;split(&quot;,&quot;)를&amp;nbsp;이용하기&amp;nbsp;때문에&amp;nbsp;입력값&amp;nbsp;자체에&amp;nbsp;&quot;,&quot;가&amp;nbsp;포함되면&amp;nbsp;데이터가&amp;nbsp;제대로&amp;nbsp;저장되지&amp;nbsp;않는&amp;nbsp;문제가&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816556036&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;head&amp;gt;
  &amp;lt;script&amp;gt;
    const load = () =&amp;gt; {
      const data = localStorage.getItem(&quot;애플리케이션&quot;);
      if (data !== null) {
        const [color, message] = data.split(&quot;,&quot;);
        return {
          color: color,
          message: message,
        };
      } else {
        return {
          color: &quot;red&quot;,
          message: &quot;&quot;,
        };
      }
    };
    const save = (data) =&amp;gt; {
      localStorage.setItem(&quot;애플리케이션&quot;, `${data.color},${data.message}`);
    };

    document.addEventListener(&quot;DOMContentLoaded&quot;, () =&amp;gt; {
      const p = document.querySelector(&quot;p&quot;);
      const button = document.querySelector(&quot;button&quot;);
      const input = document.querySelector(&quot;input&quot;);
      const select = document.querySelector(&quot;select&quot;);

      // 초기 실행
      const data = load();
      p.textContent = `이전 실행 때의 마지막 값: ${data.message}`;
      input.value = data.message;
      document.body.style.backgroundColor = data.color;
      select.value = data.color;

      // 이벤트 연결
      button.addEventListener(&quot;click&quot;, () =&amp;gt; {
        // 데이터를 모두 지우고!
        data.color = &quot;red&quot;;
        data.message = &quot;&quot;;
        save(data);
        // 입력 양식 초기화!
        select.value = &quot;red&quot;;
        input.value = &quot;&quot;;
      });

      input.addEventListener(&quot;keyup&quot;, () =&amp;gt; {
        data.message = input.value;
        save(data);
      });

      select.addEventListener(&quot;change&quot;, () =&amp;gt; {
        const color = select.options[select.selectedIndex].value;
        // 입력 양식 반영
        document.body.style.backgroundColor = color;
        // 데이터를 저장
        data.color = color;
        save(data);
      });
    });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
  &amp;lt;button&amp;gt;지우기&amp;lt;/button&amp;gt;
  &amp;lt;input type=&quot;text&quot; /&amp;gt;
  &amp;lt;select name=&quot;&quot; id=&quot;&quot;&amp;gt;
    &amp;lt;option value=&quot;red&quot;&amp;gt;빨간색&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;blue&quot;&amp;gt;파란색&amp;lt;/option&amp;gt;
    &amp;lt;option value=&quot;green&quot;&amp;gt;초록색&amp;lt;/option&amp;gt;
  &amp;lt;/select&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;JSON&amp;nbsp;객체&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제점을 해결하기 위해 JSON 객체를 사용한다.&lt;/li&gt;
&lt;li&gt;JSON은 JavaScript Object Notation의 약자로, 자바스크립트 객체를 문자열로 표현하는 데이터 형식이다.&lt;/li&gt;
&lt;li&gt;JSON 객체는 키-값 쌍으로 구성되며, 키는 반드시 문자열로 구성되고, 문자열은 큰따옴표로 감싸야한다.&lt;/li&gt;
&lt;li&gt;자바스크립트에는 JSON 객체를 다루기 위한 두 가지 메서드가 있다:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;JSON.stringify(): 자바스크립트 객체를 JSON 문자열로 변환&lt;/li&gt;
&lt;li&gt;JSON.parse(): JSON 문자열을 자바스크립트 객체로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JSON 객체는 다양한 프로그래밍 언어에서 널리 사용되는 데이터 형식이므로, 이를 잘 활용하면 애플리케이션 간 데이터 호환성을 높일 수 있다.&lt;/li&gt;
&lt;li&gt;기존 setItem시 ',' 를 통해 값을 구분지어 넣던 것을 JSON.stringify를 활용해 바로 저장할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816602014&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const save = (data) =&amp;gt; {
  localStorage.setItem(&quot;애플리케이션&quot;, `${data.color}, ${data.message}`);
};

// JSON.stringify 적용
const save = (data) =&amp;gt; {
  localStorage.setItem(&quot;애플리케이션&quot;, JSON.stringify(data));
};&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;기존 로컬스토리지의 값을 split으로 구분해서 각각 변수로 설정했던 것은 JSON.parse로 간단하게 처리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739330092676&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const [color, message] = data.split(&quot;,&quot;);
return {
  color: color,
  message: message,
};

// JSON.parse
return JSON.parse(data);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>appendChild</category>
      <category>Change</category>
      <category>createElement</category>
      <category>DOMContentLoaded</category>
      <category>JSON.stringify</category>
      <category>localStorage</category>
      <category>preventDefault</category>
      <category>querySelector</category>
      <category>removeChild</category>
      <category>removeEventListener</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/960</guid>
      <comments>https://comp-jae.tistory.com/960#entry960comment</comments>
      <pubDate>Sun, 23 Feb 2025 23:50:29 +0900</pubDate>
    </item>
    <item>
      <title>[도서 리뷰] 게으름이 습관이 되기 전에</title>
      <link>https://comp-jae.tistory.com/958</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tpsh.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1mK03/btsMkCdXg3P/ZGI0revkI0nxObb4xXkz61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1mK03/btsMkCdXg3P/ZGI0revkI0nxObb4xXkz61/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1mK03/btsMkCdXg3P/ZGI0revkI0nxObb4xXkz61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1mK03%2FbtsMkCdXg3P%2FZGI0revkI0nxObb4xXkz61%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;458&quot; height=&quot;683&quot; data-filename=&quot;tpsh.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;한글판 제목은 '게으름이 습관이 되기 전에' 이지만 원제는 '&lt;b&gt;미루는 습관을 끊는 법&lt;/b&gt;'이다. 누구나 한 번쯤 &quot;나중에 해야지&quot;라고 생각하며 일을 미뤄본 경험이 있을 것이다. 각종 업무를 맡아놓고 감당이 안되서 미루게 되는 경우나, 거대한 프로젝트를 맡아 어디서부터 시작해야 할지 모를 막막함에 미루게 되는 경우 등. 하지만 미루는 습관은 성공을 방해하고 삶의 질을 낮춘다. 스티브 스콧의 The Anti-Procrastination Habit에서는 이러한 습관을 깨는 실용적인 방법을 소개한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;미루는 습관의 원인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;왜 우리는 미룰까?&lt;/b&gt; 이유를 알면 해결책도 찾을 수 있다. 책에서 설명하는 대표적인 이유는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;완벽주의&lt;/b&gt;: 너무 높은 기준을 세워 시작조차 하지 못한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;무기력감&lt;/b&gt;: 실패 경험과 피로로 동기가 부족하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;시간 착각&lt;/b&gt;: 미래의 나는 지금보다 더 나을 거라고 착각한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;집중력 부족&lt;/b&gt;: 환경이 산만하여 중요한 일에 집중하지 못한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;시간 부족&lt;/b&gt;: 일정이 많아 급한 일만 처리하게 된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;미루지 않는 습관 만들기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 책은 &amp;lsquo;제때 하는 습관&amp;rsquo;을 기르는 구체적인 전략을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;  25-5 법칙&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하고 싶은 일 25개를 작성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;가장 중요한 5개만 선택한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;나머지 20개는 완전히 제외한다. (이것이 핵심이다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;  3개월 SMART 목표 설정&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;S&lt;/b&gt;pecific(구체적인 목표 설정)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;M&lt;/b&gt;easurable(측정 가능하게 설정)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;A&lt;/b&gt;ttainable(달성 가능하게 설정)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;R&lt;/b&gt;elevant(핵심 목표와 관련되도록 설정)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;T&lt;/b&gt;ime-bound(마감일을 설정)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;예: &quot;3개월 안에 5kg 감량하기 위해 주 3회 운동하고 식단을 조절한다.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;  아이젠하워 매트릭스 활용&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;긴급성과 중요도를 기준으로 업무를 나눈다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 83px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;긴급함&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;긴급하지 않음&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;중요함&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉시 실행한다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;계획을 세운 후 실행한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;중요하지 않음&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위임한다.&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;삭제한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;미루지 않기 위한 실천법&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;2분 법칙&lt;/b&gt;: 2분 안에 끝낼 수 있는 일은 즉시 처리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;포모도로 기법&lt;/b&gt;: 25분 집중 + 5분 휴식 패턴을 반복한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;유혹 묶기&lt;/b&gt;: 미루는 행동과 좋아하는 행동을 결합한다. (예: 운동하면서 좋아하는 팟캐스트 듣기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;주간 계획표 활용&lt;/b&gt;: 80/20 법칙을 적용해 중요한 일부터 처리한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;미루는 습관과 작별하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;습관은 한 번에 바뀌지 않는다. 하지만 위 방법을 적용하면 미루는 버릇을 고치고, 원하는 목표를 더욱 쉽게 달성할 수 있다. 가장 중요한 것은 &lt;b&gt;시작하는 것&lt;/b&gt;이다. 미루지 말고 오늘부터 가장 중요한 다섯가지만 실천해보자.  &lt;/span&gt;&lt;/p&gt;</description>
      <category>도서 리뷰</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/958</guid>
      <comments>https://comp-jae.tistory.com/958#entry958comment</comments>
      <pubDate>Sat, 22 Feb 2025 19:09:40 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 5주차 Chapter 06 객체</title>
      <link>https://comp-jae.tistory.com/957</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyqqP3/btsMffdlLvx/KhjCiFg5kkV620tWkrVcMk/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyqqP3/btsMffdlLvx/KhjCiFg5kkV620tWkrVcMk/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyqqP3/btsMffdlLvx/KhjCiFg5kkV620tWkrVcMk/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyqqP3%2FbtsMffdlLvx%2FKhjCiFg5kkV620tWkrVcMk%2Ftfile.dat&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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;객체, 속성, 메소드가 무엇인지 설명하기&lt;/span&gt; &lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;객체&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체는&amp;nbsp;속성과&amp;nbsp;메소드를&amp;nbsp;가지고&amp;nbsp;있는&amp;nbsp;데이터&amp;nbsp;타입이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;중괄호 {}를 사용하여 만들 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;배열처럼&amp;nbsp;여러가지&amp;nbsp;자료형을&amp;nbsp;담을&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;속성&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체의&amp;nbsp;특징을&amp;nbsp;나타내는&amp;nbsp;값이다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;객체의 속성은 키와 값으로 이루어져 있다.&lt;/li&gt;
&lt;li&gt;속성의 키는 문자열이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;메서드&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체의&amp;nbsp;속성&amp;nbsp;중&amp;nbsp;함수인&amp;nbsp;속성을&amp;nbsp;메서드라고&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 288 확인 문제 3번 풀고, 풀이 과정 설명하기&lt;/span&gt; &lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Math.sin()은 매개변수로 radian에 대한 사인 값을 반환한다.&lt;/li&gt;
&lt;li&gt;radian은 각도의 도(&amp;deg;)와 다르게, 원의 반지름과 원주를 기준으로 각도를 측정하는 단위 중 하나다.&lt;/li&gt;
&lt;li&gt;degree는 90으로 주어졌으니, radian은 (degree * Math.PI) / 180로 계산된다.&lt;/li&gt;
&lt;li&gt;따라서, console.log(Math.sin(radian))은 1을 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const degree = 90;
const radian = (degree * Math.PI) / 180;
console.log(Math.sin(radian));&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;객체&lt;/b&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;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 생성 방법:&lt;/b&gt;&lt;/h4&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;(식별자 규칙에 의해 숫자로 시작하거나 $, \_ 외에 특수기호가 올 수 없다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;값에는&amp;nbsp;숫자,&amp;nbsp;문자열,&amp;nbsp;불,&amp;nbsp;함수&amp;nbsp;등&amp;nbsp;다양한&amp;nbsp;자료형을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;  // 객체 기본 형태
  const object = {
    키: 값,
    키: 값,
  };&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 값 접근:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체&amp;nbsp;이름&amp;nbsp;뒤에&amp;nbsp;점(.)이나&amp;nbsp;대괄호[]를&amp;nbsp;사용해서&amp;nbsp;값에&amp;nbsp;접근할&amp;nbsp;수&amp;nbsp;있다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const object = {
  age: 13,
  level: 1,
};

console.log(object[&quot;level&quot;]); // 1
object[&quot;level&quot;] = 25;
console.log(object[&quot;level&quot;]); // 25
console.log(object.age); // 13&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;속성과 메서드&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 내의 요소를 속성(property)라고 부른다.&lt;/li&gt;
&lt;li&gt;객체 내부에 있는 함수를 메서드라고 부른다.&lt;/li&gt;
&lt;li&gt;메서드를&amp;nbsp;정의할&amp;nbsp;때는&amp;nbsp;일반&amp;nbsp;함수와&amp;nbsp;화살표&amp;nbsp;함수&amp;nbsp;두&amp;nbsp;가지&amp;nbsp;방식을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;li&gt;단, 메서드에서 화살표 함수의 경우 this를 사용할 수 없으므로 일반 함수 방식을 사용하길 권장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const character = {
  level: 1,
  class: &quot;마법사&quot;,
  fireball: function () {
    console.log(`${this.class}가 파이어볼을 사용하였습니다.`);
  },
  icewall: () =&amp;gt; {
    console.log(`${character.class}가 아이스월을 사용하였습니다.`);
  },
};
character.fireball(); // 마법사가 파이어볼을 사용하였습니다.
character.icewall(); // 아이스월을 사용하였습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;메서드 내부의 this&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메서드 내부에서 this를 사용하면 현재 객체 자기 자신을 참조한다.&lt;/li&gt;
&lt;li&gt;하지만,&amp;nbsp;화살표&amp;nbsp;함수는&amp;nbsp;this가&amp;nbsp;외부&amp;nbsp;다른&amp;nbsp;객체(windows&amp;nbsp;등)를&amp;nbsp;참조한다. &lt;br /&gt;-&amp;nbsp;이를&amp;nbsp;익명&amp;nbsp;함수는&amp;nbsp;this를&amp;nbsp;바인딩&amp;nbsp;하지만&amp;nbsp;화살표&amp;nbsp;함수는&amp;nbsp;this를&amp;nbsp;바인딩&amp;nbsp;하지&amp;nbsp;않는다고&amp;nbsp;표현한다. &lt;br /&gt;-&amp;nbsp;this&amp;nbsp;바인딩&amp;nbsp;:&amp;nbsp;this를&amp;nbsp;현재&amp;nbsp;객체와&amp;nbsp;연결하는&amp;nbsp;행위&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const character = {
  class: &quot;마법사&quot;,
  
  icewall: () =&amp;gt; {
    console.log(`${this.class}가 아이스월을 사용하였습니다.`);
  },
};

character.icewall(); // undefined가 아이스월을 사용하였습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;객체 속성 추가와 삭제&lt;/b&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;/li&gt;
&lt;li&gt;delete 연산자를 사용하여 속성을 제거할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const character = {
  level: 1,
  class: &quot;마법사&quot;,
  fireball: function () {
    console.log(`${this.class}가 파이어볼을 사용하였습니다.`);
  },
};

character.hp = 100; // 동적 생성
delete character.hp; // 키와 값을 동적으로 제거&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본&amp;nbsp;자료형과&amp;nbsp;객체&amp;nbsp;자료형,&amp;nbsp;프로토타입&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트의&amp;nbsp;자료형은&amp;nbsp;기본&amp;nbsp;자료형과&amp;nbsp;객체&amp;nbsp;자료형으로&amp;nbsp;구분한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;기본 자료형&lt;/b&gt;&lt;/h4&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;기본&amp;nbsp;자료형은&amp;nbsp;값만&amp;nbsp;저장하기&amp;nbsp;때문에&amp;nbsp;속성과&amp;nbsp;메서드를&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체 자료형&lt;/b&gt;&lt;/h4&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;속성과&amp;nbsp;메서드를&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Array.isArray() &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트에서는 배열도 객체이기 때문에 typeof를 통해서는 자료형 확인이 어렵다.&lt;/li&gt;
&lt;li&gt;Array.isArray()&amp;nbsp;메서드를&amp;nbsp;사용해&amp;nbsp;배열을&amp;nbsp;판단할&amp;nbsp;수&amp;nbsp;있다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let arr = [1, 2, 3, 4];
console.log(Array.isArray(arr)); // true&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;일급 객체(First-Class Object) &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;typeof 연산자를 사용하면 function을 출력하지만, 객체의 특성을 가지고 있다.&lt;/li&gt;
&lt;li&gt;변수에 저장하고, 다른 함수에 전달하고, 함수에서 반환할 수도 있다.&lt;/li&gt;
&lt;li&gt;이러한&amp;nbsp;성질을&amp;nbsp;일급객체라&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;기본 자료형을 객체 자료형으로 선언하기 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;new&amp;nbsp;키워드를&amp;nbsp;사용해&amp;nbsp;기본&amp;nbsp;자료형도&amp;nbsp;객체&amp;nbsp;자료형으로&amp;nbsp;바꿔&amp;nbsp;선언할&amp;nbsp;수&amp;nbsp;있다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305784231&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let num = new Number(123);
num.color = &quot;blue&quot;;
console.log(num); // Number {123, color: &quot;blue&quot;}
console.log(num + 5); // 128&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;기본 자료형의 일시적 승급 &lt;br /&gt;&lt;/b&gt;&lt;/h4&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: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;(자료형 뒤에 점을 찍고 무엇인가 하려고 할 때)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하지만&amp;nbsp;이는&amp;nbsp;일시적인&amp;nbsp;승급으로&amp;nbsp;문장이&amp;nbsp;종료되면&amp;nbsp;없어진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305828757&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const str = &quot;문자열입니다.&quot;;
str.sample = 20;
console.log(str.sample); // undefined&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;교재 외 래퍼 객체&lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;new 키워드로 생성한 자료형을 래퍼 객체(Wrapper Object)라 한다.&lt;/li&gt;
&lt;li&gt;이는 아래와 같은 여러 이유로 권장하지 않다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;타입이 달라져 typeof로 비교가 불가능하다.&lt;/li&gt;
&lt;li&gt;비교 연산이 어렵다.&lt;/li&gt;
&lt;li&gt;자바스크립트 엔진 자체에서 필요시 래퍼 객체로 임시 생성했다가 삭제한다.(ex. length 메서드)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;프로토타입(Prototype)&lt;/b&gt;&lt;/h4&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;li&gt;기본적으로&amp;nbsp;존재하지&amp;nbsp;않는&amp;nbsp;메서드인데&amp;nbsp;사용하고&amp;nbsp;있는&amp;nbsp;코드를&amp;nbsp;본다면&amp;nbsp;prototype은&amp;nbsp;아닌지&amp;nbsp;확인해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739811974325&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String.prototype.contain = function (str) {
  return this.indexOf(str) &amp;gt;= 0;
};

const a = &quot;문자열&quot;;
console.log(`a.contain('문자'): ${a.contain(&quot;문자&quot;)}`); // a.contain('문자'): true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다양한 메서드 맛보기&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Number&amp;nbsp;객체&amp;nbsp;메서드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;toFixed()&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;숫자 N번째 자릿수까지 출력한다.&lt;/li&gt;
&lt;li&gt;문자열로&amp;nbsp;변환하면서&amp;nbsp;반올림하여&amp;nbsp;출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739812055000&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const num = 123.0987;
num.toFixed(2); // 123.10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;isNaN() &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수의 값이 NaN이면 true를, 아니라면 false를 반환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673048839&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const num = Number(&quot;문자열&quot;);
Number.isNaN(num); // true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;isFinite()&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;무한대의 값을 inFinity라고 한다.&lt;/li&gt;
&lt;li&gt;Infinity는 양과 음의 2가지 형태로 나뉜다.&lt;/li&gt;
&lt;li&gt;isFinite는&amp;nbsp;유한한&amp;nbsp;숫자이면&amp;nbsp;true,&amp;nbsp;Infinity이면&amp;nbsp;false를&amp;nbsp;반환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673057940&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let n = Infinity;
let m = -10 / 0; // - Infinity

console.log(n === m); // false
console.log(n === Infinity); // true

Number.isFinite(n); // false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;String 객체 메서드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;trim()&lt;br /&gt;&lt;/b&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;웹&amp;nbsp;개발에서&amp;nbsp;입력을&amp;nbsp;받는&amp;nbsp;경우가&amp;nbsp;굉장히&amp;nbsp;많기&amp;nbsp;때문에&amp;nbsp;자주&amp;nbsp;사용하는&amp;nbsp;메서드다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673181838&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let str = &quot;       문자          &quot;;
console.log(str.trim()); // 문자&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;split() &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;/ul&gt;
&lt;pre id=&quot;code_1739815921718&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  let str = &quot;15.12.25,크리스마스,기념일&quot;;
  console.log(str.split(&quot;,&quot;)); // ['15.12.25', '크리스마스', '기념일']
  str = &quot;15.12.25 크리스마스 기념일&quot;;
  console.log(str.split(&quot; &quot;)); // ['15.12.25', '크리스마스', '기념일']&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Math 객체 메서드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;내림:&amp;nbsp;Math.floor(),&amp;nbsp;올림:&amp;nbsp;Math.ceil(),&amp;nbsp;반올림:&amp;nbsp;Math.round()&lt;/b&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;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Math.floor(34.12); // 34

Math.ceil(34.12); // 35

Math.round(34.12); // 34&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;최대값: Math.max(), 최소값: Math.min() &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열의&amp;nbsp;요소에서&amp;nbsp;값을&amp;nbsp;도출하는&amp;nbsp;경우가&amp;nbsp;많으므로&amp;nbsp;전개연산자를&amp;nbsp;함께&amp;nbsp;기억하도록&amp;nbsp;한다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;Math.max(12, 34, 56); // 56

let arr = [12, 34, 56];

Math.max(...arr); // 56&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;랜덤한 숫자 생성: Math.random() &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0 이상, 1 미만의 랜덤한 숫자를 생성한다.&lt;/li&gt;
&lt;li&gt;Math.floor와&amp;nbsp;함께&amp;nbsp;사용해&amp;nbsp;소수점을&amp;nbsp;없앤&amp;nbsp;형태로&amp;nbsp;많이&amp;nbsp;사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306264699&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Math.floor(Math.random() * 10); // 0~9까지 생성됨
Math.floor(Math.random() * 50); // 0~50까지 생성됨
Math.floor(Math.random() * 10) + 1; // 1부터 10까지 생성됨
Math.floor(Math.random() * (max - min + 1)) + min; // min이상 max미만 랜덤하게 생성하는 공식&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;자바스크립트 라이브러리 활용&lt;br /&gt;&lt;/b&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;/li&gt;
&lt;li&gt;라이브러리는 파일을 다운로드 받거나 CDN 링크를 사용하는 방법이 있다.&lt;/li&gt;
&lt;li&gt;src&amp;nbsp;속성에&amp;nbsp;다운로드&amp;nbsp;받은&amp;nbsp;파일&amp;nbsp;자체를&amp;nbsp;경로지정하거나&amp;nbsp;CDN의&amp;nbsp;경로를&amp;nbsp;지정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;유용한&amp;nbsp;라이브러리&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Lodash - 집합처리나 배열처리와 관련해 유용한 기능을 제공한다.&lt;/li&gt;
&lt;li&gt;Luxon - 시간을 처리할 때 유용하며, '타임존 세팅', '지금부터 몇시간 후' 같은 처리에 유용하다.&lt;/li&gt;
&lt;li&gt;Handsontable - 웹페이지에 스프레드시트를 출력한다.&lt;/li&gt;
&lt;li&gt;D3.js / Chart.js - 데이터 시각화에 유용하다.&lt;/li&gt;
&lt;li&gt;Three.js -&amp;nbsp; 3차원 그래픽을 다룬다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;객체의 기본 속성 지정하기&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;매개변수로&amp;nbsp;객체를&amp;nbsp;지정하는&amp;nbsp;방법 &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;pre id=&quot;code_1739306623554&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (from, to, content) {
  return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다.`;
};

console.log(sendMail(&quot;나&quot;, &quot;첫사랑&quot;, &quot;잘지내&quot;));
// &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&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;매개변수로&amp;nbsp;객체를&amp;nbsp;전달하고,&amp;nbsp;함수에서&amp;nbsp;각&amp;nbsp;매개변수를&amp;nbsp;처리하도록&amp;nbsp;하면&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;명확한&amp;nbsp;코드&amp;nbsp;작성이&amp;nbsp;가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816240579&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;매개변수의&amp;nbsp;기본값&amp;nbsp;지정하기&lt;/b&gt; &lt;/h4&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;하지만&amp;nbsp;객체를&amp;nbsp;매개변수로&amp;nbsp;전달하게&amp;nbsp;되면&amp;nbsp;기본값을&amp;nbsp;지정하기&amp;nbsp;어렵다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306978458&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let sendMail = function (from, to, content, status = &quot;수취인불명&quot;) {
  return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다.`;
};

console.log(sendMail(&quot;나&quot;, &quot;첫사랑&quot;, &quot;잘지내&quot;));
// &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체를&amp;nbsp;매개변수로&amp;nbsp;전달할&amp;nbsp;때&amp;nbsp;기본값&amp;nbsp;지정하기&lt;/b&gt; &lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;과거방법1:&amp;nbsp;undefined&amp;nbsp;체크&amp;nbsp;방식 &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트는 정의되지 않은 속성을 출력하면 undefined가 출력된다.&lt;/li&gt;
&lt;li&gt;이를&amp;nbsp;활용해&amp;nbsp;기본값을&amp;nbsp;설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739307040932&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  object.status = object.status !== undefined ? object.status : &quot;이상 없음&quot;;

  return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;과거방법2:&amp;nbsp;Falsy&amp;nbsp;체크&amp;nbsp;방식 &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Falsy값을 체크해서 기본값을 설정한다.&lt;/li&gt;
&lt;li&gt;단,&amp;nbsp;빈&amp;nbsp;문자열이나&amp;nbsp;0도&amp;nbsp;Falsy&amp;nbsp;값으로&amp;nbsp;체크되니&amp;nbsp;이런&amp;nbsp;값이&amp;nbsp;오지&amp;nbsp;않을&amp;nbsp;것이&amp;nbsp;확실해야&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739307085147&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  object.status = object.status ? object.status : &quot;이상 없음&quot;;

  return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;과거방법3: 조건부 연산자 + 짧은 조건문&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽 피연산자가 Falsy 값이면 오른쪽 값을 반환함.&lt;/li&gt;
&lt;li&gt;Falsy&amp;nbsp;체크&amp;nbsp;방식처럼&amp;nbsp;0,&amp;nbsp;false,&amp;nbsp;&quot;&quot;&amp;nbsp;등도&amp;nbsp;기본값이&amp;nbsp;적용되는&amp;nbsp;문제가&amp;nbsp;있다. &lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739816489689&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  object.status = object.status || object.status : &quot;이상 없음&quot;;

  return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다.`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;현대방법1: 전개연산자 활용&lt;/b&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;pre id=&quot;code_1739816556036&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  object = { status: &quot;이상없음&quot;, ...object };

  return `${object.from}는 ${object.to}에게 '${object.content}'라고 메일을 보냅니다. 전송:${object.status}`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음&quot;

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
    status: &quot;수취인불명&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:수취인불명&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;현대방법2: 매개변수 구조 분해 할당 활용 &lt;br /&gt;&lt;/b&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;pre id=&quot;code_1739816602014&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function ({ from, to, content, status = &quot;이상없음&quot; }) {
  return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다. 전송:${status}`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;현대방법3: 전개 연산자와 구조 분해 할당 병행 &lt;br /&gt;&lt;/b&gt;&lt;/h4&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;Node.js&amp;nbsp;등에서&amp;nbsp;자주&amp;nbsp;사용되는&amp;nbsp;패턴으로&amp;nbsp;기억하도록&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739330092676&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendMail = function (object) {
  const { from, to, content } = { status: &quot;이상없음&quot;, ...object };

  return `${from}는 ${to}에게 '${content}'라고 메일을 보냅니다. 전송:${status}`;
};

console.log(
  sendMail({
    from: &quot;나&quot;,
    to: &quot;첫사랑&quot;,
    content: &quot;잘지내&quot;,
  })
); // &quot;나는 첫사랑에게 '잘지내'라고 메일을 보냅니다. 전송:이상없음&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>Math 메서드</category>
      <category>number 메서드</category>
      <category>string 메서드</category>
      <category>This</category>
      <category>객체</category>
      <category>래퍼객체</category>
      <category>매개변수 기본값</category>
      <category>메서드</category>
      <category>일급객체</category>
      <category>프로토타입</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/957</guid>
      <comments>https://comp-jae.tistory.com/957#entry957comment</comments>
      <pubDate>Thu, 13 Feb 2025 01:53:32 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 4주차 Chapter 05 함수</title>
      <link>https://comp-jae.tistory.com/956</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byEHzU/btsL52ZpOq6/KkIiqazdVYLRYwBXyqask0/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byEHzU/btsL52ZpOq6/KkIiqazdVYLRYwBXyqask0/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byEHzU/btsL52ZpOq6/KkIiqazdVYLRYwBXyqask0/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyEHzU%2FbtsL52ZpOq6%2FKkIiqazdVYLRYwBXyqask0%2Ftfile.dat&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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 202 &amp;lt;윤년을 확인하는 함수 만들기&amp;gt; 예제를 실행하여 2022년이 윤년인지 확인하는 결과 인증하기&lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ej0mqC/btsMbyXBej7/Fea70Vxks9LVOh72J4aIIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ej0mqC/btsMbyXBej7/Fea70Vxks9LVOh72J4aIIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ej0mqC/btsMbyXBej7/Fea70Vxks9LVOh72J4aIIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fej0mqC%2FbtsMbyXBej7%2FFea70Vxks9LVOh72J4aIIk%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;506&quot; height=&quot;238&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1739025562166&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const isLeapYear = function (year) {
  return year % 4 === 0 &amp;amp;&amp;amp; (year % 100 !== 0 || year % 400 === 0);
};&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 240 확인 문제 1번 풀고, 풀이 과정 설명하기&lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리연산자 &amp;amp;&amp;amp;를 통해 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3가지 조건에 일치하는 값을 필터링 하도록 했다. &lt;br /&gt;filter 메서드는 비파괴적처리를 하기 때문에 result라는 새로운 변수에 필터링된 결과값을 할당했고,&lt;br /&gt;console.log에는 결과값이 할당된 result 변수를 출력했다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ep2leZ/btsMeNlxiDP/RlfjKjpL0s6pPuFVitHqs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ep2leZ/btsMeNlxiDP/RlfjKjpL0s6pPuFVitHqs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ep2leZ/btsMeNlxiDP/RlfjKjpL0s6pPuFVitHqs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fep2leZ%2FbtsMeNlxiDP%2FRlfjKjpL0s6pPuFVitHqs1%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;592&quot; height=&quot;160&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// 변수를 선언합니다.
let numbers = [273, 25, 75, 52, 103, 32, 57, 24, 76]

// 처리합니다.
let result = numbers.filter((el) =&amp;gt; el % 2 === 1 &amp;amp;&amp;amp; el &amp;lt;= 100 &amp;amp;&amp;amp; el % 5 === 0);

// 출력합니다.
console.log(result)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;함수&lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수는&amp;nbsp;코드의&amp;nbsp;묶음이다.&lt;/li&gt;
&lt;li&gt;반복되는 작업을 한 번만 정의하면 필요시 재사용할 수 있어서 효율적이다.&lt;/li&gt;
&lt;li&gt;긴 프로그램을 기능별로 함수로 분리하면 모듈화되어 전체 코드의 가독성이 좋아진다.&lt;/li&gt;
&lt;li&gt;기능별로 수정이 가능하므로 유지보수가 쉽다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;함수&amp;nbsp;선언&amp;nbsp;방법:&lt;/b&gt;&lt;/h4&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;배열 내부의 각 값을 요소(element)라고 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const 함수명 = function () {
  실행될 내용
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;함수 호출:&lt;/b&gt;&lt;/h4&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;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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const 함수명 = function () {
  동작 실행
  return // 값을 가지고 원래 위치로 리턴한다.
}

함수명(); // 함수가 실행되면서 함수 내부로 점프한다.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;교재 외 프로시저 함수:&lt;/b&gt;&lt;/h4&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;보통&amp;nbsp;return&amp;nbsp;문이&amp;nbsp;없거나&amp;nbsp;반환값이&amp;nbsp;없고,&amp;nbsp;출력(console.log),&amp;nbsp;API요청,&amp;nbsp;데이터&amp;nbsp;저장,&amp;nbsp;파일&amp;nbsp;처리&amp;nbsp;등의&amp;nbsp;작업을&amp;nbsp;수행한다.&lt;/li&gt;
&lt;li&gt;현대 프로그래밍에서는 매개변수 유무와 관계없이 동작을 중심으로 판단한다.&lt;/li&gt;
&lt;li&gt;즉, 매개변수가 있더라도 반환값 없이 특정 동작을 수행하는 함수는 프로시저 함수라고 볼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const sayHello = function () {
  console.log(&quot;Hello, world!&quot;);
};
sayHello(); // 실행하지만 반환값이 없음

const sayHello2 = function (name) {
  console.log(`Hello, ${name}!`);
};
sayHello2(&quot;yoonTeacher&quot;); // 실행하지만 반환값이 없음&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;수학적 함수:&lt;/b&gt;&lt;/h4&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;함수&amp;nbsp;내부에&amp;nbsp;리턴&amp;nbsp;키워드를&amp;nbsp;사용한다.&lt;/li&gt;
&lt;li&gt;OO의 리턴값은 OO다 라고 표현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const sum = function (a, b) {
  return a + b; // 값을 가지고 원래 위치로 리턴한다.
};
sum(1, 2); // 함수에서 각각의 위치 a와 b에 해당 값을 할당하면서 점프한다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;함수의 두 가지 표기 방법 - 익명 함수와 선언적 함수 &lt;/b&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;/li&gt;
&lt;li&gt;초기에는&amp;nbsp;선언적&amp;nbsp;함수&amp;nbsp;형태를&amp;nbsp;많이&amp;nbsp;사용했지만,&amp;nbsp;현대&amp;nbsp;자바스크립트에서는&amp;nbsp;익명&amp;nbsp;함수&amp;nbsp;형태를&amp;nbsp;더&amp;nbsp;많이&amp;nbsp;사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;선언적 함수(함수 선언식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;function 키워드로 함수를 선언한다.&lt;/li&gt;
&lt;li&gt;함수의&amp;nbsp;이름이&amp;nbsp;필수다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function g() {
  return b;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;교재 외 함수 표현식 &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;함수&amp;nbsp;표현식&lt;/b&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;/ul&gt;
&lt;pre id=&quot;code_1739237959486&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const f = function () {
  return a;
};&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;함수 표현식이지만 이름을 붙이는 경우 내부에서 재귀적으로 호출이 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739237985914&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const factorial = function fact(n) {
  if (n &amp;lt;= 1) return 1;
  return n * fact(n - 1); // 내부에서 자신의 이름을 사용하여 재귀 호출
};

console.log(factorial(5)); // 5! = 5 * 4 * 3 * 2 * 1 = 120&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;즉, 모든 함수 표현식이 익명 함수는 아니지만, 익명 함수는 보통 함수 표현식에서 많이 사용된다.&lt;/li&gt;
&lt;li&gt;아래와 같은 즉시 호출 함수는 변수에 할당하지 않는 익명함수를 만들 수 있다..&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305574308&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(function () {
  console.log(&quot;I am anonymous!&quot;);
})();&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;나머지 매개변수와 전개 연산자(함수 호출) &lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;API(Application Programming Interface)란&lt;/b&gt;&lt;/h4&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;API 설계자가 만든 약속을 API 사용자가 활용한다.&lt;/li&gt;
&lt;li&gt;나머지&amp;nbsp;매개변수,&amp;nbsp;전개&amp;nbsp;연산자&amp;nbsp;등은&amp;nbsp;주로&amp;nbsp;API&amp;nbsp;설계자가&amp;nbsp;사용하는&amp;nbsp;기능이며,&amp;nbsp;API&amp;nbsp;사용자도&amp;nbsp;이해하면&amp;nbsp;좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;나머지&amp;nbsp;매개변수(Rest&amp;nbsp;Parameters):&lt;/b&gt;&lt;/h4&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;나머지&amp;nbsp;매개변수는&amp;nbsp;일반&amp;nbsp;매개변수와&amp;nbsp;함께&amp;nbsp;사용할&amp;nbsp;수도&amp;nbsp;있지만,&amp;nbsp;항상&amp;nbsp;마지막에&amp;nbsp;위치해야&amp;nbsp;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const arr = function (...list) {
console.log(list);
};

arr(&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;); // ['apple', 'banana', 'mango']

const arr2 = function (a, ...list) {
console.log(`${a}와 나머지 ${list}입니다.`);
};
arr2(&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;); // apple와 나머지 banana,mango입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;구버전&amp;nbsp;자바스크립트에서&amp;nbsp;가변&amp;nbsp;인자&amp;nbsp;함수&amp;nbsp;구현하기:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수를 지정하지 않고 arguments 객체를 사용하여 나머지 매개변수처럼 구현하는 방법이 있었다.&lt;/li&gt;
&lt;li&gt;arguments는 함수 내에서만 사용할 수 있는 유사 배열 객체이다.&lt;/li&gt;
&lt;li&gt;유사 배열 객체이기 때문에 배열 메서드를 사용할 수 없다.&lt;/li&gt;
&lt;li&gt;현대에는&amp;nbsp;나머지&amp;nbsp;매개변수를&amp;nbsp;사용할&amp;nbsp;것을&amp;nbsp;권장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const list = function () {
  let output = arguments;
  return output;
}

console.log(list(1, 2, 3, 4)); // &amp;nbsp;[1, 2, 3, 4, callee: &amp;fnof;, Symbol(Symbol.iterator): &amp;fnof;]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;전개 연산자(Spread Operator): &lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수를 &lt;b&gt;호출할 때&lt;/b&gt; 배열 앞에 ...을 붙여서 사용한다.&lt;/li&gt;
&lt;li&gt;이렇게&amp;nbsp;하면&amp;nbsp;배열의&amp;nbsp;요소들이&amp;nbsp;개별&amp;nbsp;인수로&amp;nbsp;전달된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305784231&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const arr = function (a, b) {
  console.log(a, b);
};
let list = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];
arr(...list); // apple banana&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;구버전&amp;nbsp;자바스크립트에서&amp;nbsp;전개&amp;nbsp;연산자&amp;nbsp;구현하기:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;과거에는 apply 메서드를 사용하여 전개 연산자를 구현했다.&lt;/li&gt;
&lt;li&gt;배열 형태로 전달할 인자를 apply()에 포함하면 개별 인자로 변환된다.&lt;/li&gt;
&lt;li&gt;현대에는&amp;nbsp;전개&amp;nbsp;연산자로&amp;nbsp;간단히&amp;nbsp;구현할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739305828757&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const list = function () {
  console.log.apply(null, arguments);
};
let input = [1, 2, 3, 4];
list.apply(null, input); // 1 2 3 4&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 매개변수와 가독성 &lt;br /&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;가독성의&amp;nbsp;중요성&lt;/b&gt;&lt;/h4&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;li&gt;기본&amp;nbsp;매개변수,&amp;nbsp;게터/세터,&amp;nbsp;프라이빗&amp;nbsp;속성/메서드&amp;nbsp;등은&amp;nbsp;가독성을&amp;nbsp;높이기&amp;nbsp;위한&amp;nbsp;기능들이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;과거&amp;nbsp;자바스크립트&amp;nbsp;버전의&amp;nbsp;기본&amp;nbsp;매개변수&amp;nbsp;처리&lt;/b&gt;&lt;/h4&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;파라미터가&amp;nbsp;undefined인&amp;nbsp;경우와&amp;nbsp;0인&amp;nbsp;경우를&amp;nbsp;구분해서&amp;nbsp;처리해야&amp;nbsp;하는&amp;nbsp;등&amp;nbsp;코드가&amp;nbsp;복잡해질&amp;nbsp;수&amp;nbsp;있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673048839&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const isLeapYear = function (year) {
  // year = typeof year === &quot;undefined&quot; ? new Date().getFullYear() : year;
  // year = year || new Date().getFullYear();

  return year % 4 === 0 &amp;amp;&amp;amp; (year % 100 !== 0 || year % 400 === 0);
};

console.log(isLeapYear());&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;기본&amp;nbsp;매개변수(default&amp;nbsp;parameter)&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&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;pre id=&quot;code_1738673057940&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const isLeapYear = function (year = new Date().getFullYear()) {
  return year % 4 === 0 &amp;amp;&amp;amp; (year % 100 !== 0 || year % 400 === 0);
console.log(isLeapYear());&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;콜백함수 &lt;br /&gt;&lt;/b&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;/li&gt;
&lt;li&gt;따라서 함수를 함수의 매개변수로 전달할 수 있다.&lt;/li&gt;
&lt;li&gt;이 때 전달된 함수를 &lt;b&gt;콜백함수&lt;/b&gt;라고 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738673181838&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const test = function (callback) {
  callback();
};

const call = function () {
  console.log(&quot;안녕하세요&quot;);
};

test(call); // 안녕하세요&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열&amp;nbsp;메서드&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열의 forEach, filter, map 메서드들은 모두 콜백함수를 매개변수로 받는다.&lt;/li&gt;
&lt;li&gt;이를&amp;nbsp;통해&amp;nbsp;배열의&amp;nbsp;요소를&amp;nbsp;다양하게&amp;nbsp;처리할&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;forEach&lt;/b&gt;&lt;/h4&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;배열의&amp;nbsp;요소를&amp;nbsp;콜백함수로&amp;nbsp;전달해서&amp;nbsp;반복하는&amp;nbsp;메서드다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;, &quot;grape&quot;];

arr.forEach(function (value, index, array) {
  console.log(value, index, array);
});

/*
apple 0 ['apple', 'banana', 'mango', 'grape']
banana 1&amp;nbsp;['apple', 'banana', 'mango', 'grape']
mango 2&amp;nbsp;['apple', 'banana', 'mango', 'grape']
grape 3&amp;nbsp;['apple', 'banana', 'mango', 'grape']
*/&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;filter&lt;/b&gt;&lt;/h4&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;단,&amp;nbsp;비파괴적&amp;nbsp;처리를&amp;nbsp;하기&amp;nbsp;때문에&amp;nbsp;필터링된&amp;nbsp;배열을&amp;nbsp;사용하려면&amp;nbsp;새로운&amp;nbsp;변수에&amp;nbsp;할당하거나&amp;nbsp;기존&amp;nbsp;변수에&amp;nbsp;재할당&amp;nbsp;해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let arr = [123, 345, 234, 456];
arr = arr.filter(function (value, index, array) {
  return value % 2 === 0;
});
console.log(arr); // (2)&amp;nbsp;[234, 456]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;map&lt;/b&gt;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&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;매개변수로 값, 인덱스, 기준 배열을 가진다.&lt;/li&gt;
&lt;li&gt;기존의 배열 요소를 기반으로 새로운 배열을 만들어서 리턴하는 함수다.&lt;/li&gt;
&lt;li&gt;filter와&amp;nbsp;마찬가지로&amp;nbsp;비파괴적&amp;nbsp;처리로&amp;nbsp;변수&amp;nbsp;할당이&amp;nbsp;필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306264699&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let arr = [123, 345, 234, 456];
arr = arr.map(function (value, index, array) {
  return value * 2;
});
console.log(arr); // [246, 690, 468, 912]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;콜백함수의&amp;nbsp;장점&lt;/b&gt;&lt;/h4&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;필요에&amp;nbsp;따라&amp;nbsp;매개변수의&amp;nbsp;함수를&amp;nbsp;통해&amp;nbsp;다른&amp;nbsp;결과를&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;타이머&amp;nbsp;함수,&amp;nbsp;즉시&amp;nbsp;호출&amp;nbsp;함수(IIFE),&amp;nbsp;엄격&amp;nbsp;모드&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;타이머 함수&lt;br /&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;setTimeout / clearTimout함수:&lt;/b&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;b&gt;한 번 실행&lt;/b&gt;되는&amp;nbsp;콜백&amp;nbsp;함수이다.&lt;/li&gt;
&lt;li&gt;clearTimeout를 통해 설정한 타이머를 해제할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306351751&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const timeout = setTimeout(function () {
  console.log(&quot;setTimeout이 실행되었습니다.&quot;);
}, 2000);

clearTimeout(timeout);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;setInterval / clearInterval함수: &lt;br /&gt;&lt;/b&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;b&gt;반복&amp;nbsp;실행&lt;/b&gt;되는&amp;nbsp;콜백&amp;nbsp;함수이다.&lt;/li&gt;
&lt;li&gt;clearInterval를 통해 설정한 타이머를 해제할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306361789&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const intervalTime = setInterval(function () {
  console.log(&quot;setInterval이 실행되었습니다.&quot;);
}, 2000);

clearInterval(intervalTime);&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;clear처리하는 함수들은 매개변수로 숫자를 넣도록 되어 있는데 이 숫자는 setTimeout과 setInterval의 리턴값이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;즉시 호출 함수 (IIFE, Immediately Invoked Function Expression):&lt;/b&gt;&lt;/h4&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;pre id=&quot;code_1739306623554&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(function func() {
  console.log(&quot;I am anonymous!&quot;);
})();
(function func() {
  console.log(&quot;I am anonymous!&quot;);
})();

/* I am anonymous
I am anonymous
*/&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;엄격&amp;nbsp;모드(Strict&amp;nbsp;Mode):&amp;nbsp;&lt;/b&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;/li&gt;
&lt;li&gt;브라우저 콘솔에 입력시 변수나 상수를 선언하지 않았는데도&lt;/li&gt;
&lt;li&gt;브라우저 임의로 a,b 변수를 생성해 값을 할당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739306978458&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = 100;
b = 200;

console.log(a + b);&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;이런 부분을 엄격하게 검사해 막아주는 기능이다.&lt;/li&gt;
&lt;li&gt;&amp;lt;script&amp;gt;태그를 시작할 때 코드의 첫 부분에 'use strict'를 선언하면 활성화된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739307040932&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  &amp;lt;script&amp;gt;
  &quot;use strict&quot;
  a = 100; b = 200; console.log(a + b);
  &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;IIFE&amp;nbsp;내부에서&amp;nbsp;엄격&amp;nbsp;모드를&amp;nbsp;적용하는&amp;nbsp;것이&amp;nbsp;일반적이다.&lt;/p&gt;
&lt;pre id=&quot;code_1739307085147&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
(function() {
  &quot;use strict&quot;
  a = 100;
  b = 200;
 console.log(a + b);
})()
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선언적&amp;nbsp;함수와&amp;nbsp;익명&amp;nbsp;함수의&amp;nbsp;차이,&amp;nbsp;확인&amp;nbsp;문제&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;함수를 만드는 2가지 방법 - 선언적 함수와 익명 함수&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;선언적&amp;nbsp;함수: &lt;br /&gt;&lt;/b&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 data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;익명&amp;nbsp;함수(함수&amp;nbsp;표현식):&lt;/b&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;선언적 함수와 익명적 함수의 차이&lt;/b&gt;&lt;/h4&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;이로 인해 두 함수를 섞어 사용하면 실행 순서 예측이 어려지고 여러개의 파일이 import되면 더 어려워진다.&lt;/li&gt;
&lt;li&gt;따라서&amp;nbsp;일반적으로&amp;nbsp;선언적&amp;nbsp;함수는&amp;nbsp;잘&amp;nbsp;사용하지&amp;nbsp;않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1739330092676&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;함수 ()

함수 = function () {
  console.log(&quot;익명함수&quot;)
}

function 함수() {
  console.log(&quot;선언적 함수&quot;)
}

함수()

&amp;gt; 선언적 함수
&amp;gt; 익명함수&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>return</category>
      <category>stric mode</category>
      <category>기본 매개변수</category>
      <category>나머지 매개변수</category>
      <category>매개변수</category>
      <category>익명함수</category>
      <category>전개 연산자</category>
      <category>타이머 함수</category>
      <category>함수</category>
      <category>화살표 함수</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/956</guid>
      <comments>https://comp-jae.tistory.com/956#entry956comment</comments>
      <pubDate>Wed, 5 Feb 2025 03:45:25 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 3주차 Chapter 04 반복문</title>
      <link>https://comp-jae.tistory.com/816</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLrhP4/btsLWuHOuxK/QLmu4DNbBaIxSHBj8ciPGK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLrhP4/btsLWuHOuxK/QLmu4DNbBaIxSHBj8ciPGK/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLrhP4/btsLWuHOuxK/QLmu4DNbBaIxSHBj8ciPGK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLrhP4%2FbtsLWuHOuxK%2FQLmu4DNbBaIxSHBj8ciPGK%2Ftfile.dat&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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;비파괴적 처리와 파괴적 처리의 의미와 장단점 설명하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비파괴적 처리:&lt;/b&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비파괴적 처리는 불변성을 유지하며 안정적인 코드 작성에 유리하지만, 메모리 사용량이 증가할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파괴적 처리:&lt;/b&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;예) 배열의 push() 메서드.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파괴적 처리는 메모리를 절약할 수 있지만, 원본 데이터가 변하기 때문에 사이드 이펙트가 발생할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;p. 173 확인 문제 3번 문제 풀고, 풀이 과정 설명하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공통적으로 함수실행 이후 원본 데이터에 변화가 있는지 확인하면 알 수 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;비파괴적 처리&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;&amp;gt; const strA = &quot;사과, 배, 바나나, 귤&quot;;
undefined

&amp;gt; strA.split(&quot;,&quot;);
[&quot;사과&quot;, &quot; 배&quot;, &quot; 바나나&quot;, &quot; 귤&quot;]

&amp;gt; strA;
&quot;사과, 배, 바나나, 귤&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;파괴적 처리&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;&amp;gt; const arrayB = [&quot;사과&quot;, &quot;배&quot;, &quot;바나나&quot;, &quot;귤&quot;];
undefined

&amp;gt; arrayB.push(&quot;감&quot;);
5

&amp;gt; arrayB;
[&quot;사과&quot;, &quot;배&quot;, &quot;바나나&quot;, &quot;귤&quot;, &quot;감&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;비파괴적 처리&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;&amp;gt; const arrayC = [1, 2, 3, 4, 5];
undefined

&amp;gt; arrayC.map((x) =&amp;gt; x \* x);
[1, 4, 9, 16, 25]

&amp;gt; arrayC;
[1, 2, 3, 4, 5]&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;4&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;비파괴적 처리&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;&amp;gt; const strD = &quot; 여백이 포함된 메시지   &quot;;
undefined

&amp;gt; strD.trim();
&quot;여백이 포함된 메시지&quot;

&amp;gt; strD;
&quot; 여백이 포함된 메시지   &quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;배열&lt;/b&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;/li&gt;
&lt;li&gt;순서가 중요하며 인덱스를 통해 해당 순서의 값을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 생성 방법:&lt;/b&gt;&lt;/h4&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;배열 내부의 각 값을 요소(element)라고 부른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;let arr = [요소, 요소, 요소];&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 요소 접근:&lt;/b&gt;&lt;/h4&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;인덱스는 0부터 시작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;nix&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr[0]; // &quot;apple&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 길이 구하기:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;arr.length로 배열의 길이(요소 개수)를 구할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ceylon&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.length; // 3&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 요소 추가:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;push() 메서드를 사용하여 배열의 맨 뒤에 요소를 추가할 수 있다.&lt;/li&gt;
&lt;li&gt;push(요소)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.push(&quot;pineapple&quot;);
console.log(arr); //  [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;, &quot;pineapple&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 중간에 요소 추가:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;splice() 메서드를 사용하여 특정 인덱스에 요소를 삽입할 수 있다.&lt;/li&gt;
&lt;li&gt;splice(인덱스, 0, 요소)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.splice(1, 0, &quot;orange&quot;);
console.log(arr); //  [&quot;apple&quot;, &quot;orange&quot;, &quot;banana&quot;, &quot;mango&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열 요소 제거:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;splice() 메서드를 사용하여 특정 인덱스의 요소를 제거할 수 있다.&lt;/li&gt;
&lt;li&gt;splice(인덱스, 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.splice(1, 1);
console.log(arr); //  [&quot;apple&quot;, &quot;mango&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열에서 특정 값의 인덱스 찾기:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;indexOf() 메서드를 사용하여 배열 내 특정 값의 인덱스를 찾을 수 있다.&lt;/li&gt;
&lt;li&gt;indexOf(요소)&lt;/li&gt;
&lt;li&gt;원하는 요소가 없을 때는 -1 을 출력한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ceylon&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.indexOf(&quot;mango&quot;); // 2
arr.indexOf(&quot;orange&quot;); // -1&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;배열에서 특정 값을 찾아 제거하기:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;- indexOf() 와 splice()를 같이 활용해서 특정 값을 제거할 수 있다.&lt;/li&gt;
&lt;li&gt;indexOf를 통해 먼저 인덱스를 찾는다.&lt;/li&gt;
&lt;li&gt;splice로 해당 인덱스의 값을 제거한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

let idx = arr.indexOf(&quot;mango&quot;); // 2
arr.splice(idx, 1);
console.log(arr); // [&quot;apple&quot;, &quot;banana&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스택, 힙, 비파괴적 처리, 파괴적 처리&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;스택&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFfgCl/btsL5BOqjW8/XKg9ddk5lu3TEq9NfgWRK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFfgCl/btsL5BOqjW8/XKg9ddk5lu3TEq9NfgWRK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFfgCl/btsL5BOqjW8/XKg9ddk5lu3TEq9NfgWRK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFfgCl%2FbtsL5BOqjW8%2FXKg9ddk5lu3TEq9NfgWRK0%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;400&quot; height=&quot;288&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1381&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;힙&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-1.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP4JSR/btsL7EQfhR1/DI78dDdUdUguacrTQ3CGuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP4JSR/btsL7EQfhR1/DI78dDdUdUguacrTQ3CGuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP4JSR/btsL7EQfhR1/DI78dDdUdUguacrTQ3CGuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP4JSR%2FbtsL7EQfhR1%2FDI78dDdUdUguacrTQ3CGuK%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;400&quot; height=&quot;480&quot; data-filename=&quot;image-1.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1229&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;/ul&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;10 &amp;gt; 5 ? console.log(&quot;맞았을 때 출력됩니다.&quot;) : console.log(&quot;틀렸을 때 출력됩니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;자료형과 스택 / 힙의 관계&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;제목 없는 다이어그램.jpg&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zd44Q/btsL6TAwOAv/KM6Rli1SpwO98WeonZrKlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zd44Q/btsL6TAwOAv/KM6Rli1SpwO98WeonZrKlk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zd44Q/btsL6TAwOAv/KM6Rli1SpwO98WeonZrKlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZd44Q%2FbtsL6TAwOAv%2FKM6Rli1SpwO98WeonZrKlk%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;463&quot; height=&quot;211&quot; data-filename=&quot;제목 없는 다이어그램.jpg&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스택:&lt;/b&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;힙:&lt;/b&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;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;비파괴적 처리와 파괴적 처리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비파괴적 처리:&lt;/b&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;/ul&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;  let num1 = 10;
  let num2 = 20;

  num1 + num2; // 30
  num1; // 10
  num2; // 20&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파괴적 처리:&lt;/b&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;예) 배열의 push() 메서드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;let arr = [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr; // [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;];

arr.push(&quot;orange&quot;);

arr; // [&quot;apple&quot;, &quot;banana&quot;, &quot;mango&quot;, &quot;orange&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자료형에 따른 처리 구분 이유:&lt;/b&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;li&gt;일반적으로 배열이나 객체등을 조작할 때는 원본을 복사해서 비파괴적으로 처리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;상수인데 변경 가능한 상수&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상수(const)는 스택의 값을 변경할 수 없게 제한한다.&lt;/li&gt;
&lt;li&gt;따라서 스택에 저장된 주소 자체를 다른 값으로 변경하면 에러가 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;  const a = [1, 2, 3];
  a = [5, 6]; // 에러&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;상수 내부의 복합 자료형은 힙에 저장되기 때문에 변경할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;  const a = [1, 2, 3];
  a.push(5);
  console.log(a); // [1,2,3,5]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;mutable(가변)과 immutable(불변)&lt;/b&gt;&lt;/h4&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;mutable 과 immutable 은 값 자체가 변경 가능한가 에 대한 개념이다.&lt;/li&gt;
&lt;li&gt;자바스크립트에서 객체와 배열은 기본적으로 mutable하지만, 그 데이터를 다루는 방식(메서드)이 파괴적일 수도 있고 아닐 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;윤쌤의 조언&lt;/b&gt;&lt;/h4&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;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;forof forin for 반복문&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;for 계통 반복문의 종류:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for of, for in, for 3가지가 있다.&lt;/li&gt;
&lt;li&gt;for of와 for in은 배열 등과 함께 사용하고, for는 범용으로 사용한다.&lt;/li&gt;
&lt;li&gt;반복문은 중첩할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;for of:&lt;/b&gt;&lt;/h4&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;/ul&gt;
&lt;pre id=&quot;code_1738673048839&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const arr = [&quot;하나&quot;, &quot;둘&quot;, &quot;셋&quot;, &quot;넷&quot;, &quot;다섯&quot;];

for (const i of arr) {
  console.log(i); // 차례대로 &quot;하나&quot;, &quot;둘&quot;, &quot;셋&quot;, &quot;넷&quot;, &quot;다섯&quot; 출력
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;for in:&lt;/b&gt;&lt;/h4&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;/ul&gt;
&lt;pre id=&quot;code_1738673057940&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const arr = [&quot;하나&quot;, &quot;둘&quot;, &quot;셋&quot;, &quot;넷&quot;, &quot;다섯&quot;];

for (const i of arr) {
  console.log(i); // 차례대로 0, 1, 2, 3, 4 출력
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;for:&lt;/b&gt;&lt;/h4&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;반복 변수는 반드시 let으로 선언해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;for (let 초기값 ; 조건문 ; 증감식){
  반복할 내용
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;while 반복문&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;while:&lt;/b&gt;&lt;/h4&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;/ul&gt;
&lt;pre id=&quot;code_1738673181838&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while (조건식) {
  반복할 내용
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;for 반복문과의 비교:&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;while 반복문은 조건이 중요할 때 사용&lt;/li&gt;
&lt;li&gt;for 반복문은 특정 횟수만큼 반복하거나 배열 등을 기반으로 반복할 때 사용&lt;/li&gt;
&lt;li&gt;결과가 나올 때까지, 특정 시간까지, 파일에서 특정 단어를 찾을 때까지 등&lt;/li&gt;
&lt;li&gt;정확한 반복 횟수를 정할 수 없을 때 유용하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;브레이크 구문:&lt;/b&gt;&lt;/h4&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;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let i = 1;

while (true) {
  console.log(`${i}번 반복했습니다`);
  i++;
  
  if (i === 5) {
    console.log(&quot;이제 그만&quot;);
    break;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;컨티뉴 구문:&lt;/b&gt;&lt;/h4&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;즉, 아래의 경우 continue에 막혀 &quot;이제 그만&quot; 이라는 문장은 한번도 출력되지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let i = 1;

while (i !== 5) {
  console.log(`${i}번 반복했습니다`);
  i++;
  continue;
  
  console.log(&quot;이제 그만&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;윤쌤의 조언&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;while문의 경우 파일의 입출력과 관련해서 사용하는 경우가 있는데,&lt;/li&gt;
&lt;li&gt;자바스크립트에서 파일의 입출력은 node.js와 연계되기 때문에 당장은 사용할 일이 없다.&lt;/li&gt;
&lt;li&gt;따라서 for 반복문 위주로 학습하면 된다.&lt;/li&gt;
&lt;li&gt;VSCode의 코드 조각은 최소한의 조작으로 최대의 행동을 할 수 있게 만들어주는 도구다.&lt;/li&gt;
&lt;li&gt;거부감 없이 활용해도 된다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>for</category>
      <category>forin</category>
      <category>forof</category>
      <category>indexOf</category>
      <category>Splice</category>
      <category>배열</category>
      <category>비파괴적처리</category>
      <category>스택</category>
      <category>파괴적처리</category>
      <category>힙</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/816</guid>
      <comments>https://comp-jae.tistory.com/816#entry816comment</comments>
      <pubDate>Tue, 4 Feb 2025 21:50:02 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 2주차 Chapter 03 조건문</title>
      <link>https://comp-jae.tistory.com/949</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYTaZf/btsLVwzEkFV/RKGaZ2vO9qwQ2w1y2QAfZK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYTaZf/btsLVwzEkFV/RKGaZ2vO9qwQ2w1y2QAfZK/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYTaZf/btsLVwzEkFV/RKGaZ2vO9qwQ2w1y2QAfZK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYTaZf%2FbtsLVwzEkFV%2FRKGaZ2vO9qwQ2w1y2QAfZK%2Ftfile.dat&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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 139 의 확인 문제 3번 문제 풀고 완전한 코드 만들어 비쥬얼 스튜디오 코드에서 실행 결과 인증하기&lt;/span&gt; &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ABWnG/btsLV5ha77C/QKMckksYqvW3cSaslEKiU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ABWnG/btsLV5ha77C/QKMckksYqvW3cSaslEKiU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ABWnG/btsLV5ha77C/QKMckksYqvW3cSaslEKiU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FABWnG%2FbtsLV5ha77C%2FQKMckksYqvW3cSaslEKiU1%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;640&quot; height=&quot;374&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let x = 15;

if (x &amp;gt; 10) {
  if (x &amp;lt; 20) {
    console.log(&quot;조건에 맞습니다.&quot;);
  }
}

if (x &amp;gt; 10 &amp;amp;&amp;amp; x &amp;lt; 20) {
  console.log(&quot;조건에 맞습니다.&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;p. 152의 &amp;lt;태어난 연도를 입력받아 띠 출력하기&amp;gt; 예제 실행하여 본인의 띠 출력한 화면 캡처하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1782&quot; data-origin-height=&quot;1208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSM4KI/btsLVHt8jUk/G50qrOq5ma66sSg4bOtYgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSM4KI/btsLVHt8jUk/G50qrOq5ma66sSg4bOtYgk/img.png&quot; data-alt=&quot;개인정보 이슈로 년도는 지웁니다. 하하&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSM4KI/btsLVHt8jUk/G50qrOq5ma66sSg4bOtYgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSM4KI%2FbtsLVHt8jUk%2FG50qrOq5ma66sSg4bOtYgk%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;640&quot; height=&quot;434&quot; data-origin-width=&quot;1782&quot; data-origin-height=&quot;1208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;개인정보 이슈로 년도는 지웁니다. 하하&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;if 조건문&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상반되는 조건이 있을 때는 if - else 구조를 사용하는 것이 좋다.&lt;/li&gt;
&lt;li&gt;조건은 상호배타적인 것이 좋다.&lt;/li&gt;
&lt;li&gt;else if 구문을 활용해 조건 비교 횟수를 줄이는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;if문:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;if 조건문은 조건식의 결과가 true이면 중괄호 안의 코드를 실행하고, false이면 건너뛴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737555146136&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(3 &amp;gt; 2){
  console.log(&quot;진실&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;else 구문:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;if 조건문 바로 뒤에 붙여 반대되는 조건에 대해 처리할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737555294243&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if(3 &amp;lt; 2){
  console.log(&quot;진실&quot;)
}else{
  console.log(&quot;거짓&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;if else if 조건문:&lt;/b&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;pre id=&quot;code_1737555518857&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let num = 255

if(num &amp;lt; 10) {
  console.log(&quot;10보다 작다&quot;)
}else if(num &amp;lt; 100) {
  console.log(&quot;100보다 작다&quot;)
}else {
  console.log(&quot;100보다 크다&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Switch&lt;/b&gt;&lt;/h4&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;case 문으로 조건을 나열하고 break 문으로 탈출한다.&lt;/li&gt;
&lt;li&gt;모든 조건에 맞지 않는 경우 default 문을 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737556072411&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let num = 95;

switch (true) {
  case num &amp;gt;= 95:
    console.log(&quot;A+입니다.&quot;);
    break;
  case num &amp;gt;= 90:
    console.log(&quot;A입니다.&quot;);
    break;
  case num &amp;gt;= 85:
    console.log(&quot;B+입니다.&quot;);
    break;
  case num &amp;gt;= 80:
    console.log(&quot;B입니다.&quot;);
    break;
  case num &amp;gt;= 75:
    console.log(&quot;C+입니다.&quot;);
    break;
  case num &amp;gt;= 70:
    console.log(&quot;C입니다.&quot;);
    break;
  default:
    console.log(&quot;F입니다.&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;삼항 연산자&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간단한 if-else 문을 한 줄로 표현할 수 있다.&lt;/li&gt;
&lt;li&gt;조건 ? 참일 때 : 거짓일 때&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737556489964&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;10 &amp;gt; 5 ? console.log(&quot;맞았을 때 출력됩니다.&quot;) : console.log(&quot;틀렸을 때 출력됩니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;짧은&amp;nbsp;조건문&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리 연산자의 특성을 조건문으로 사용한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;논리합 연산자:&lt;/b&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;우변이 거짓이어도 좌변의 영향으로 true가 되는 원리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737556747335&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;true || console.log(&quot;실행되지 않습니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;논리곱 연산자:&lt;/b&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;좌변이 거짓이면 이미 최종 false가 되는 원리.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1737556836323&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;false &amp;amp;&amp;amp; console.log(&quot;실행되지 않습니다.&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;윤쌤의 조언&lt;/b&gt;&lt;/h4&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;</description>
      <category>혼공학습단/혼공자스</category>
      <category>If</category>
      <category>switch</category>
      <category>논리곱</category>
      <category>논리합</category>
      <category>삼항연산자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/949</guid>
      <comments>https://comp-jae.tistory.com/949#entry949comment</comments>
      <pubDate>Wed, 22 Jan 2025 23:44:29 +0900</pubDate>
    </item>
    <item>
      <title>[도서 리뷰] 나는 네이버 프런트엔드 개발자입니다</title>
      <link>https://comp-jae.tistory.com/940</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmXkKa/btsLDWEAg8A/wXOhWIMyVrjFTYOQfKDdwk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmXkKa/btsLDWEAg8A/wXOhWIMyVrjFTYOQfKDdwk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmXkKa/btsLDWEAg8A/wXOhWIMyVrjFTYOQfKDdwk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmXkKa%2FbtsLDWEAg8A%2FwXOhWIMyVrjFTYOQfKDdwk%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;640&quot; height=&quot;906&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개발자가 목표인 사람들에게 '네카라쿠배' 출신들의 이야기는 항상 흥미로운 주제다. '네카라쿠배' 출신이라고 하면 &quot;와, 실력 장난 아니겠다&quot;, &quot;거긴 도대체 어떻게 들어가는 거야?&quot; 같은 생각, 다들 한번쯤 해보지 않았을까?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그렇다면 네이버 프런트엔드 개발자들은 어떻게 그 자리까지 올랐을까? &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 책은 다양한 배경을 가졌지만 모두 네이버에서 프런트엔드 개발자로 활동하는 8인의 이야기를 담고 있다. 이들의 경험과 노하우를 바탕으로 프런트엔드 개발에 필요한 기술, 태도, 성장 방법 등을 배울 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1. &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;프레임워크보다&amp;nbsp;기본기가&amp;nbsp;중요하다&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;가장 인상 깊었던 부분은 &amp;ldquo;프레임워크와 내 커리어 운명을 함께할 각오가 아니라면 자바스크립트 자체에 대한 이해와 숙련은 필수다.&amp;rdquo;라는 문구였다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;김지한 님은 자바스크립트 기본기를 강조하며, 프레임워크에 의존하지 말라는 메시지를 던진다. 프런트엔드의 많은 라이브러리와 프레임워크는 자바스크립트를 기반으로 하기 때문에, 기본기를 갖추지 않으면 한계에 부딪힐 수밖에 없다고 지적한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;나도 국비학원에서 동기들이 자바스크립트를 짧게 공부하고 리액트에만 올인했던 일이 떠오른다. 당시 팀 프로젝트를 진행하면서 자바스크립트 기본기를 다시 학습해야 한다는 걸 절감했었다. 결국, 기본에 충실해야 프런트엔드 개발자로서 더 나아갈 수 있다는 점에 깊이 공감했다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;2. &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;필요성에서&amp;nbsp;시작되는&amp;nbsp;학습&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;윤영제 님은 학습에 재미를 느끼지 못하는 이유를 &quot;필요성을 느끼지 못하고 학습하기 때문&quot;이라고 설명한다. &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;직접 개발하며 필요에 따라 학습할 때 더 큰 재미를 느낄 수 있다는 것이다.&amp;nbsp; &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;&quot;운영체제를&amp;nbsp;이해하면&amp;nbsp;브라우저를&amp;nbsp;잘&amp;nbsp;이해할&amp;nbsp;수&amp;nbsp;있다&quot;는&amp;nbsp;조언은&amp;nbsp;브라우저&amp;nbsp;성능&amp;nbsp;최적화나&amp;nbsp;백엔드와의&amp;nbsp;원활한&amp;nbsp;협업에도&amp;nbsp;적용될&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;현실적인&amp;nbsp;조언이었다.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;그 외에도 인프런에서 유명한 캡틴판교(장기효)님의 신입 개발자가 갖춰야 할 역량, 윤정현 님의 서비스 안정화 및 성능 향상을 위한 노력 등, 다양한 저자의 이야기가 흥미로웠다.&amp;nbsp; &lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;이처럼&amp;nbsp;프런트엔드라는&amp;nbsp;하나의&amp;nbsp;주제로&amp;nbsp;모인&amp;nbsp;저자들의&amp;nbsp;경험과&amp;nbsp;팁은&amp;nbsp;학습&amp;nbsp;방법이나&amp;nbsp;커리어&amp;nbsp;계획을&amp;nbsp;점검할&amp;nbsp;좋은&amp;nbsp;기회를&amp;nbsp;제공한다.&amp;nbsp;이&amp;nbsp;책은&amp;nbsp;개발자를&amp;nbsp;꿈꾸는&amp;nbsp;초보자뿐&amp;nbsp;아니라,&amp;nbsp;이미&amp;nbsp;개발자로&amp;nbsp;일하고&amp;nbsp;있는&amp;nbsp;사람들에게도&amp;nbsp;유용한&amp;nbsp;인사이트를&amp;nbsp;줄&amp;nbsp;것이다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;프런트엔드 개발에 관심이 있거나 이 분야에서 성장하고 싶은 사람이라면 읽어보길 추천한다.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>도서 리뷰</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/940</guid>
      <comments>https://comp-jae.tistory.com/940#entry940comment</comments>
      <pubDate>Mon, 20 Jan 2025 06:04:07 +0900</pubDate>
    </item>
    <item>
      <title>[혼공스] 1주차 Chapter 01 ~ 02</title>
      <link>https://comp-jae.tistory.com/802</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvU5xW/btsLJ75QMk8/hxjC1tfpDDfgjFPvGzH2rK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvU5xW/btsLJ75QMk8/hxjC1tfpDDfgjFPvGzH2rK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvU5xW/btsLJ75QMk8/hxjC1tfpDDfgjFPvGzH2rK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvU5xW%2FbtsLJ75QMk8%2FhxjC1tfpDDfgjFPvGzH2rK%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;640&quot; height=&quot;876&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;기본 미션&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p. 54의 &amp;lt;파일 만들고 저장해 실행하기&amp;gt;에서 'Hello World' 출력하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjbNu0/btsIAtD812U/zokXqnJu5ruOj7zVkAVBHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjbNu0/btsIAtD812U/zokXqnJu5ruOj7zVkAVBHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjbNu0/btsIAtD812U/zokXqnJu5ruOj7zVkAVBHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjbNu0%2FbtsIAtD812U%2FzokXqnJu5ruOj7zVkAVBHk%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;1530&quot; height=&quot;380&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
    &amp;lt;script&amp;gt;
      alert(&quot;Hello world&quot;);
    &amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;선택미션&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ch.01(01-1) 확인 문제 1번 상세하게 적고 인증하기&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;네이버 - 쇼핑, 블로그, 카페, 검색, vibe(음악), MYBOX 등.&lt;/li&gt;
&lt;li&gt;다음 - 뉴스, 검색, 메일, 지도 등.&lt;/li&gt;
&lt;li&gt;구글 - 검색, 이메일(Gmail), 지도(Google Maps), 클라우드 스토리지(Google Drive), 번역,&lt;/li&gt;
&lt;li&gt;인스타그램 - 이미지 및 동영상 업로드 기능, 스토리 기능, 무한 스크롤링, 그리고 다양한 애니메이션 효과&lt;/li&gt;
&lt;li&gt;페이스북 - 실시간 채팅, 알림 시스템, 동적 콘텐츠 로딩 기술&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;학습 기록&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개발 환경 설치&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;자바스크립트 프로그래밍을 하려면 텍스트 편집기(VSCode)와 코드 실행기(웹 브라우저)가 필요하다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;코드 실행 방법&lt;/h4&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;크롬 브라우저에서 &quot;about:blank&quot; 페이지 열고 마우스 우클릭 &amp;gt; 검사(Ctrl + Shift + I) &amp;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;Visual Studio Code에서 새 파일 생성, HTML 기본 템플릿 만든 뒤 JavaScript 코드 작성&lt;br /&gt;(1) [파일] &amp;rarr; [새 파일(Ctrl+ N)]을 선택한다.&lt;br /&gt;(2) 곧바로 [파일] &amp;rarr; [저장(Ctrl + S)]를 선택한다.&lt;br /&gt;(3) &quot;파일_이름.html&quot;라는 형태로 저장한다.&lt;br /&gt;(4) html:5 또는 ! 입력하고 엔터[또는 탭]&lt;br /&gt;(5) head 태그 안에 script 태그 생성&lt;br /&gt;(6) script 태그 안에 코드를 입력한다.&lt;br /&gt;(7) 코드를 모두 입력했다면 저장한다.&lt;br /&gt;(8) 크롬에 드래그앤드롭해서 실행한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;! DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
    &amp;lt;script&amp;gt;
      alert(&quot;안녕하세요&quot;); 
    &amp;lt;/script&amp;gt; 
  &amp;lt;/head&amp;gt; 
  &amp;lt;body&amp;gt;
  &amp;lt;/body&amp;gt; 
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 도구는 코드를 바로바로 입력하고 실행하는 인터랙티브한 방식 (REPL)이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REPL이란 Read Eval Print Loop의 줄임말로 읽고 + 실행(평가)하고 + 출력하는 것의 + 반복 이라는 뜻이다.&lt;/li&gt;
&lt;li&gt;편리하지만 기존 웹 페이지에서 실행시 영향을 줄 수 있어 about:blank 페이지를 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;오류 확인 방법&lt;/h4&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;b&gt;파일로 작성할 때 오류 확인: &lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;파일 실행 후 개발자 도구의 콘솔 탭에서 오류 확인 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자주 발생하는 오류:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ReferenceError : 단어 오탈자가 발생했을 때 출력한다.&lt;/li&gt;
&lt;li&gt;SyntaxError: 괄호, 따옴표 등 문법을 잘못 사용했을 때 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Visual Studio Code 관련 이야기&lt;/h4&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;li&gt;들여쓰기 방법: 일반적으로 2칸의 공백을 많이 사용한다. 코딩 컨벤션에 따라 유동적으로 결정하면 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기본 용어&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;표현식(Expression):&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문장(Statement):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드를 실행하는 단위로&amp;nbsp;줄바꿈이나 세미콜론으로 구분한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키워드(Keyword):&lt;/b&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;b&gt;식별자(Identifier):&lt;/b&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;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;li&gt;공백 문자 포함 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;가독성 향상을 위해 'camelCase' 규칙 등이 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주석과 출력&lt;/h4&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;pre id=&quot;code_1736436497389&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HTML 주석: &amp;lt;!--  --&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1736436467665&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;자바스크립트 한 줄 주석: //
자바스크립트 여러 줄 주석: /* */&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;2&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;출력 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;alert() 함수: 경고창 출력&lt;/li&gt;
&lt;li&gt;console.log() 메서드: 콘솔에 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; start=&quot;3&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;코드 읽는 방법&lt;/li&gt;
&lt;/ol&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;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;문자열과 숫자&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자열 만들기:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736436696229&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 큰따옴표(&quot;&quot;) 또는 작은따옴표('')로 문자열을 만들 수 있음
&quot;문자열&quot;
'문자열'

// 문자열 안에 따옴표를 포함하고 싶다면 역슬래시\를 사용해 이스케이프 처리해야 함
let str = &quot;문자열 안에 \&quot;이렇게\&quot; 포함할 것&quot;

// 이스케이프 문자 - 문자 그대로의 표현이 아닌 다른 의미를 가지는 문자
\n(줄바꿈)
\\(역슬래시를 표현)
\t(탭)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자열 처리:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736437836342&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 문자열 연결 연산자(+): 두 문자열을 연결할 수 있음
&quot;문자&quot; + &quot;열&quot; =&amp;gt; &quot;문자열&quot;

// 문자열 선택 연산: 대괄호[]로 문자열에서 특정 문자를 선택할 수 있음 (인덱스는 0부터 시작)
&quot;문자열&quot;[0] =&amp;gt; &quot;문&quot;

// 문자열의 길이: length 속성
&quot;문자열&quot;.length =&amp;gt; 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;숫자 자료형:&lt;/b&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;숫자 자료형 관련 주의사항:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFPqaX/btsLHNVNuJq/orIlqlT9cKYWVTUrOOmuO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFPqaX/btsLHNVNuJq/orIlqlT9cKYWVTUrOOmuO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFPqaX/btsLHNVNuJq/orIlqlT9cKYWVTUrOOmuO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFPqaX%2FbtsLHNVNuJq%2ForIlqlT9cKYWVTUrOOmuO1%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;190&quot; height=&quot;55&quot; data-origin-width=&quot;190&quot; data-origin-height=&quot;55&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;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;불(boolean)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참(true)과 거짓(false)을 나타내는 자료형이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;불 값을 숫자로 변환하면 true는 1, false는 0이 된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;불 값으로 변환할 때는 대부분의 경우 true로 변환되지만, 0, '', null, undefined, NaN은 false로 변환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;불을 생성하는 방법:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736435914084&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// 직접 true 또는 false를 입력
let a = true;

// 비교 연산자(===, !==, &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=)를 사용하여 생성
console.log(1 &amp;lt; 2) // true&lt;/code&gt;&lt;/pre&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;불의 활용:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건문(if-else)에서 사용되어 프로그램의 흐름을 제어&lt;/li&gt;
&lt;li&gt;회원가입, 로그인 등의 입력 검증에 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1736438022947&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (true) {
  console.log(진실); 
}

// 논리 부정 연산자(!): 불 값을 반대로 변경한다.
!(false) =&amp;gt; true&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;불 연산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;논리 연산자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;논리합(OR, ||): 적어도 하나가 true면 true&lt;/li&gt;
&lt;li&gt;논리곱(AND, &amp;amp;&amp;amp;): 모두가 true여야 true&lt;/li&gt;
&lt;li&gt;각 경우에 따른 결과는 총 8가지다.&lt;/li&gt;
&lt;/ul&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;br /&gt;논리합(OR, ||): 적어도 하나가 true면 true&lt;/p&gt;
&lt;pre id=&quot;code_1736436016548&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;true || true -&amp;gt; true
false || true -&amp;gt; true
true || true -&amp;gt; true
false || false -&amp;gt; false&lt;/code&gt;&lt;/pre&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;연산자: &amp;amp;&amp;amp;(그리고)&lt;br /&gt;논리곱(AND, &amp;amp;&amp;amp;): 모두가 true여야 true&lt;/p&gt;
&lt;pre id=&quot;code_1736436025559&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;true &amp;amp;&amp;amp; true -&amp;gt; true
true &amp;amp;&amp;amp; false false -&amp;gt; false
false &amp;amp;&amp;amp; true - false -&amp;gt; false
false &amp;amp;&amp;amp; false -&amp;gt; false -&amp;gt; false&lt;/code&gt;&lt;/pre&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;연립 부등식(두 개 이상의 부등식을 묶어서 나타낸 것)의 경우 js는 좌측부터 우측으로 비교 연산을 진행하므로 오류가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1736438262081&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-3 &amp;lt;= x &amp;lt; 2; 
// (-3 &amp;lt;= x)를 먼저 연산 후 true로 결과를 도출
// 이후 true &amp;lt; 2 로 연산. 
// true는 다시 1로 형변환되어 최종 결과는 true가 된다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 비교 연산자와 논리 연산자를 함께 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1736438289406&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-3 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;드 모르간의 법칙:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;논리 연산자 부정 시 변환 규칙으로&amp;nbsp;복잡한 조건을 쉽게 뒤집는데 유용하다.&lt;/li&gt;
&lt;li&gt;부등식은 반대로! 논리곱 논리합 교체!한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1736438335100&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 원래 코드
!(12 &amp;lt;= 현재_시 &amp;amp;&amp;amp; 현재_시 &amp;lt;= 13)

// 드 모르간의 법칙 적용 후
(12 &amp;gt; 현재_시 || 현재_시 &amp;gt; 13)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자료형 검사:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;typeof 연산자를 사용하면 어떤 자료형인지 확인할 수 있다.&lt;/li&gt;
&lt;li&gt;결과값은 문자열로 출력된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1736438371266&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;typeof 2; // 'number'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;템플릿 문자열:&lt;/b&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;pre id=&quot;code_1736438438716&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;`17 + 23의 값은 ${17 + 23} 입니다.`;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;상수와 변수 기본&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상수(constant)와 변수(variable)의 개념 및 특징:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736438485561&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 상수: 값이 변하지 않는 자료.
const a = 1;

// 변수: 값이 변할 수 있는 자료.
let a = 2; 
a = 3;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상수 선언 및 주의사항:&lt;/b&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;code&gt;const 식별자 = 값&lt;/code&gt; 형태로 작성해야 함.&lt;/li&gt;
&lt;li&gt;선언한 상수 값은 변경할 수 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변수 선언 및 주의사항:&lt;/b&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;code&gt;let 식별자 = 값&lt;/code&gt; 형태로 선언.&lt;/li&gt;
&lt;li&gt;변수는 언제든 값을 변경할 수 있음.&lt;/li&gt;
&lt;li&gt;동일한 이름의 변수를 중복 선언할 수 있으나, 파일 단위로는 중복 선언 불가.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기타 개념:&lt;/b&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;li&gt;&lt;code&gt;let 식별자 = 오른쪽값&lt;/code&gt; 에서 '='을 기준으로 왼쪽은 '대입'하는 곳, 오른쪽은 '대입'되는 값.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상수와 변수 사용 시 고려사항:&lt;/b&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;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;연산자와 undefined&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변수에 적용할 수 있는 연산자:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1736438617984&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 복합 대입 연산자
a += 100; 
a -= 100;

// 증감 연산자
a++; 
a--;&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;복합 대입 연산자와 증감 연산자는 편리하게 코드를 작성할 수 있게 해줌&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;undefined 자료형:&lt;/b&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;/ul&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;/p&gt;
&lt;pre id=&quot;code_1736438753948&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 결과는 문자열로 저장된다.
let a = prompt(&quot;원하는 숫자를 입력하세요&quot;)

// 계산이 쉽도록 숫자열로 형 변환
a = Number(a)

// 변환할 수 없는 문자열을 숫자로 변환하면 NaN(Not a Number)이 나온다.
let a = prompot(&quot;원하는 숫자를 입력하세요&quot;) // (ex. '안녕하세요')
a = Number(a) // NaN&lt;/code&gt;&lt;/pre&gt;</description>
      <category>혼공학습단/혼공자스</category>
      <category>type of</category>
      <category>undefined</category>
      <category>논리 연산자</category>
      <category>문자열</category>
      <category>변수</category>
      <category>상수</category>
      <category>숫자</category>
      <category>연산자</category>
      <category>주석</category>
      <category>템플릿 문자열</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/802</guid>
      <comments>https://comp-jae.tistory.com/802#entry802comment</comments>
      <pubDate>Fri, 10 Jan 2025 01:08:43 +0900</pubDate>
    </item>
    <item>
      <title>혼공학습단 13기 선정</title>
      <link>https://comp-jae.tistory.com/941</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC0dsJ/btsLIA2K8qV/yLvG2YnHOFfXIlxjvZElCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC0dsJ/btsLIA2K8qV/yLvG2YnHOFfXIlxjvZElCK/img.png&quot; data-alt=&quot;선정되면 받는 이메일!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC0dsJ/btsLIA2K8qV/yLvG2YnHOFfXIlxjvZElCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC0dsJ%2FbtsLIA2K8qV%2FyLvG2YnHOFfXIlxjvZElCK%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;640&quot; height=&quot;307&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;선정되면 받는 이메일!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한빛미디어 혼공학습단 13기에 선정되었다. 개인적으로 윤인성님을 좋아하는데 혼자 공부하는 시리즈 자바스크립트와 파이썬 책의 저자이시다. 그래서 책은 이미 가지고 있었고, 취준 기간 중 복습 겸 가지고 있는 책을 완독하자는 생각에 신청하게 되었다. 개인적인 욕심으로는 혼자 공부하는 시리즈를 4권 가량 가지고 있기 때문에 이번 기수를 시작으로 매 기수 진행해서 가지고 있는 책을 모두 완독하고 싶다.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #f44336; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span&gt;혼공학습단 13기 활동 방법(3단계)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg44nI/btsLJfDvri1/nMZoMSTKfyksTUACg5wflk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg44nI/btsLJfDvri1/nMZoMSTKfyksTUACg5wflk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg44nI/btsLJfDvri1/nMZoMSTKfyksTUACg5wflk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg44nI%2FbtsLJfDvri1%2FnMZoMSTKfyksTUACg5wflk%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;991&quot; height=&quot;536&quot; data-origin-width=&quot;991&quot; data-origin-height=&quot;536&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;span&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLBXuLgInP-5kxpAKy2DNXoebCse2grHjl&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;혼자 공부하는 자바스크립트 유뷰트 재생목록&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736434094709&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; &quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/playlist?list=PLBXuLgInP-5kxpAKy2DNXoebCse2grHjl&quot; data-og-url=&quot;http://www.youtube.com/playlist?list=PLBXuLgInP-5kxpAKy2DNXoebCse2grHjl&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3D4aw/hyX0AacEU4/Y806pKwfV9w2fbF7PzgD1K/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270,https://scrap.kakaocdn.net/dn/be8PUl/hyX0vGKbZn/de29l4u5UnZkxYk5nviLa1/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLBXuLgInP-5kxpAKy2DNXoebCse2grHjl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/playlist?list=PLBXuLgInP-5kxpAKy2DNXoebCse2grHjl&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3D4aw/hyX0AacEU4/Y806pKwfV9w2fbF7PzgD1K/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270,https://scrap.kakaocdn.net/dn/be8PUl/hyX0vGKbZn/de29l4u5UnZkxYk5nviLa1/img.jpg?width=480&amp;amp;height=270&amp;amp;face=0_0_480_270');&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;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://hongong.hanbit.co.kr/%ed%98%bc%ea%b3%b5-%ea%b2%8c%ec%8b%9c%ed%8c%90/?uid=231&amp;amp;mod=document&amp;amp;pageid=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;[혼공 학습단 13] 스터디 활동과 도서별 커리큘럼 안내&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736434279046&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[혼공학습단 13기] 혼공학습단 활동과 도서별 커리큘럼 안내&quot; data-og-description=&quot;&amp;nbsp; 안녕하세요, 한빛미디어 혼공학습단의 혼공족장입니다. 혼공학습단 13기의 활동과 도서별 커리큘럼 안내 드립니다. &amp;nbsp; 13기 활동 기간 1주차: 1월 6일 ~ 1월 12일 2주차: 1월 13일 ~ 1월 19일 3주차: 1&quot; data-og-host=&quot;hongong.hanbit.co.kr&quot; data-og-source-url=&quot;https://hongong.hanbit.co.kr/%ed%98%bc%ea%b3%b5-%ea%b2%8c%ec%8b%9c%ed%8c%90/?uid=231&amp;amp;mod=document&amp;amp;pageid=1&quot; data-og-url=&quot;https://hongong.hanbit.co.kr/?kboard_content_redirect=231&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzTxEf/hyX0AH3j5r/dNW5uEiymgyjaIP6GjZfvk/img.png?width=960&amp;amp;height=1064&amp;amp;face=0_0_960_1064,https://scrap.kakaocdn.net/dn/dx688j/hyX0lc25kH/Bb8N51YrEnjSKDKy4a94H0/img.png?width=960&amp;amp;height=1064&amp;amp;face=0_0_960_1064&quot;&gt;&lt;a href=&quot;https://hongong.hanbit.co.kr/%ed%98%bc%ea%b3%b5-%ea%b2%8c%ec%8b%9c%ed%8c%90/?uid=231&amp;amp;mod=document&amp;amp;pageid=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hongong.hanbit.co.kr/%ed%98%bc%ea%b3%b5-%ea%b2%8c%ec%8b%9c%ed%8c%90/?uid=231&amp;amp;mod=document&amp;amp;pageid=1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzTxEf/hyX0AH3j5r/dNW5uEiymgyjaIP6GjZfvk/img.png?width=960&amp;amp;height=1064&amp;amp;face=0_0_960_1064,https://scrap.kakaocdn.net/dn/dx688j/hyX0lc25kH/Bb8N51YrEnjSKDKy4a94H0/img.png?width=960&amp;amp;height=1064&amp;amp;face=0_0_960_1064');&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;[혼공학습단 13기] 혼공학습단 활동과 도서별 커리큘럼 안내&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 안녕하세요, 한빛미디어 혼공학습단의 혼공족장입니다. 혼공학습단 13기의 활동과 도서별 커리큘럼 안내 드립니다. &amp;nbsp; 13기 활동 기간 1주차: 1월 6일 ~ 1월 12일 2주차: 1월 13일 ~ 1월 19일 3주차: 1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hongong.hanbit.co.kr&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;</description>
      <category>혼공학습단/혼공자스</category>
      <category>혼공스</category>
      <category>혼공학습단</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/941</guid>
      <comments>https://comp-jae.tistory.com/941#entry941comment</comments>
      <pubDate>Mon, 6 Jan 2025 23:38:53 +0900</pubDate>
    </item>
    <item>
      <title>[도서 리뷰] 개발자가 되고 싶습니다</title>
      <link>https://comp-jae.tistory.com/939</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;book.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSeuMg/btsLFyCuNFi/Am3mq2otXm9bYTw5FBoBUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSeuMg/btsLFyCuNFi/Am3mq2otXm9bYTw5FBoBUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSeuMg/btsLFyCuNFi/Am3mq2otXm9bYTw5FBoBUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSeuMg%2FbtsLFyCuNFi%2FAm3mq2otXm9bYTw5FBoBUk%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;640&quot; height=&quot;696&quot; data-filename=&quot;book.jpg&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1741&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최근 읽은 '개발자가 되고 싶습니다'는 &lt;b&gt;개발자가 되기 위한 공부 방법&lt;/b&gt;, &lt;b&gt;이력서 작성&lt;/b&gt;, &lt;b&gt;포트폴리오 제작&lt;/b&gt;, &lt;b&gt;면접 준비&lt;/b&gt;까지 신입 개발자로서 겪게 될 과정 전반을 따뜻하게 풀어낸 책이다. 30대 중반에 iOS 개발자로 도전한 앨런님의 경험을 바탕으로, 다양한 상황에서 실질적으로 적용 가능한 조언과 전략을 제시한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqRBuY/btsLC2FI0kD/QD7mJUzUNruV44dxqXsNe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqRBuY/btsLC2FI0kD/QD7mJUzUNruV44dxqXsNe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqRBuY/btsLC2FI0kD/QD7mJUzUNruV44dxqXsNe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqRBuY%2FbtsLC2FI0kD%2FQD7mJUzUNruV44dxqXsNe0%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;527&quot; height=&quot;523&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;문법과 프레임워크 기초까지 예습하고 가야 효과가 크다.&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;특히 위의 문장은 부트캠프와 국비 과정에 참여했던 내 경험과 정확히 맞아떨어진다. 실제로 프론트엔드가 무엇인지조차 모르고 시작했던 동기 중 대부분은 혼란 속에 과정을 포기하거나 힘겹게 마쳤다. 반면, 기본적인 준비를 해온 이들은 과정을 효율적으로 활용하며 더 나은 결과를 얻었다. 이 책은 그런 준비의 중요성을 강조하며 시행착오를 줄이는 법을 알려준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt; 다만, 책이 2023년 4월에 출판된 점을 고려할 때, &lt;b&gt;현재의 취업 시장 상황과는 다소 차이가 있다.&lt;/b&gt; 2019~2021년은 개발자 취업의 황금기였지만, 2022년 이후 시장은 급격히 어려워졌다. 다시 전공자를 찾거나 나이를 따지기 시작하는 기업들이 늘어나고 있고, 중소기업의 채용에도 수백 명이 지원하는 상황이다. 그렇기에 이 책에서 말하는 &quot;포기하지 않으면 가능하다&quot;는 희망적인 메시지에 대해서는 안타깝지만 쉽게 동의하기 어려운 상황이 되었다. 워낙 iOS 개발자가 귀하다는 이야기를 많이 들어서 iOS쪽은 다를 수도 있으려나.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: start;&quot;&gt;그럼에도 불구하고, 개발자가 되기로 마음먹은 이들에게 이 책은 꼭 필요한 가이드가 될 것이다. 앨런님은 &quot;&lt;b&gt;우선&amp;nbsp;재미를&amp;nbsp;붙이는&amp;nbsp;것&lt;/b&gt;&quot;을&amp;nbsp;강조하며,&amp;nbsp;높은&amp;nbsp;목표를&amp;nbsp;바로&amp;nbsp;추구하기보다는&amp;nbsp;작은&amp;nbsp;성취감을&amp;nbsp;쌓아가며&amp;nbsp;꾸준히&amp;nbsp;나아가라고&amp;nbsp;조언한다.&amp;nbsp;이&amp;nbsp;책에서&amp;nbsp;제시한&amp;nbsp;학습&amp;nbsp;자료와&amp;nbsp;전략은&amp;nbsp;&lt;b&gt;국비&amp;nbsp;과정이나&amp;nbsp;부트캠프를&amp;nbsp;시작하기&amp;nbsp;전&lt;/b&gt;에 꼭 참고해야 할 내용이다. 비전공자로 개발자에 도전하려는 이들에게 강력히 추천한다.&lt;/span&gt; &lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>도서 리뷰</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/939</guid>
      <comments>https://comp-jae.tistory.com/939#entry939comment</comments>
      <pubDate>Mon, 6 Jan 2025 03:39:28 +0900</pubDate>
    </item>
    <item>
      <title>국비냐 부트캠프냐 고민스러울 때</title>
      <link>https://comp-jae.tistory.com/938</link>
      <description>&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;※ 주의&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이 글은 지극히 주관적인 경험으로&lt;br /&gt;개인적인 의지의 표명. 한풀이. 각오 다지기. 후회.&lt;span&gt;&amp;nbsp;&lt;/span&gt;반성의 시간 등이 뒤섞여 있습니다.&lt;br /&gt;혹시나 어떠한 알 수 없는 알고리즘으로 인해 이 페이지로 이끌려 오셨다면&lt;br /&gt;이 글은 개인적으로 개발자가 되기를 원하는 누군가에게 전하는 사견입니다.&lt;br /&gt;이렇게 해야만 한다는 것은 아닌 하나의 의견으로 봐주시면 감사하겠습니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;서론&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;직장을 다니며 부트캠프를 진행하다가 중도하차 후 늦은 나이에 국비지원 프론트엔드 과정을 수료했다. 국비지원과 부트캠프는 개발자 지망생들에게 흔히 선택되는 길이지만, 동시에 많은 편견과 오해도 따라다닌다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ozfwP/btsLEJLdOFm/pn2ygifBGNUekQUjwFHllk/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ozfwP/btsLEJLdOFm/pn2ygifBGNUekQUjwFHllk/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ozfwP/btsLEJLdOFm/pn2ygifBGNUekQUjwFHllk/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FozfwP%2FbtsLEJLdOFm%2Fpn2ygifBGNUekQUjwFHllk%2Ftfile.dat&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;441&quot; height=&quot;172&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5qAr6/btsLEhg7qse/eaa2uDdIB7JKOTUVShL8tK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5qAr6/btsLEhg7qse/eaa2uDdIB7JKOTUVShL8tK/tfile.dat&quot; data-alt=&quot;국비 출신이라 하면 일단 거른다 카더라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5qAr6/btsLEhg7qse/eaa2uDdIB7JKOTUVShL8tK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5qAr6%2FbtsLEhg7qse%2Feaa2uDdIB7JKOTUVShL8tK%2Ftfile.dat&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;640&quot; height=&quot;166&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;국비 출신이라 하면 일단 거른다 카더라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;그런데 국비 관련만 그런 글이 있는가 하니 그건 또 아니다.&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuOkkm/btsLDdGLovI/dxoAEIVWG4b8WJ4M7Tas21/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuOkkm/btsLDdGLovI/dxoAEIVWG4b8WJ4M7Tas21/tfile.dat&quot; data-alt=&quot;변형 기출. 부트캠프 출신은 거른다 카더라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuOkkm/btsLDdGLovI/dxoAEIVWG4b8WJ4M7Tas21/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuOkkm%2FbtsLDdGLovI%2FdxoAEIVWG4b8WJ4M7Tas21%2Ftfile.dat&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;640&quot; height=&quot;190&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;224&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;변형 기출. 부트캠프 출신은 거른다 카더라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이러다 다 걸러질 것 같다. 어떻게 하라는겨.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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-origin-width=&quot;1588&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh4IIp/btsLFhm99r5/GDvvqE48Oc31CEYfn6NFn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh4IIp/btsLFhm99r5/GDvvqE48Oc31CEYfn6NFn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh4IIp/btsLFhm99r5/GDvvqE48Oc31CEYfn6NFn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh4IIp%2FbtsLFhm99r5%2FGDvvqE48Oc31CEYfn6NFn1%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;640&quot; height=&quot;177&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9DME2/btsLC4ptIOE/m1W7RMNuRIKip6x72DOfT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9DME2/btsLC4ptIOE/m1W7RMNuRIKip6x72DOfT0/img.png&quot; data-origin-width=&quot;1710&quot; data-origin-height=&quot;398&quot; data-is-animation=&quot;false&quot; width=&quot;640&quot; height=&quot;149&quot; style=&quot;width: 71.0897%; margin-right: 10px;&quot; data-widthpercent=&quot;71.93&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9DME2/btsLC4ptIOE/m1W7RMNuRIKip6x72DOfT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9DME2%2FbtsLC4ptIOE%2Fm1W7RMNuRIKip6x72DOfT0%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;1710&quot; height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkaA4F/btsLDHtLTpo/Wwbc8QGQjbPVtQ99i1yPaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkaA4F/btsLDHtLTpo/Wwbc8QGQjbPVtQ99i1yPaK/img.png&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;452&quot; data-is-animation=&quot;false&quot; width=&quot;640&quot; height=&quot;382&quot; style=&quot;width: 27.7475%;&quot; data-widthpercent=&quot;28.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkaA4F/btsLDHtLTpo/Wwbc8QGQjbPVtQ99i1yPaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkaA4F%2FbtsLDHtLTpo%2FWwbc8QGQjbPVtQ99i1yPaK%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;758&quot; height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;도르마무, 거래를 하러 왔다..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;어쨌든 이런 편견에도 불구하고 나는 두 과정을 모두 경험하며(결과적으로 독학까지 세가지?) 나만의 결론을 얻었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그래서&amp;nbsp;이&amp;nbsp;글에서는&amp;nbsp;내가&amp;nbsp;국비와&amp;nbsp;부트캠프를&amp;nbsp;통해&amp;nbsp;배운&amp;nbsp;점들을&amp;nbsp;솔직하게&amp;nbsp;공유하고,&amp;nbsp;같은&amp;nbsp;고민을&amp;nbsp;하는&amp;nbsp;사람들에게&amp;nbsp;도움이&amp;nbsp;될&amp;nbsp;조언을&amp;nbsp;나누고자&amp;nbsp;한다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;본론&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;국비지원과 부트캠프의 현실&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국비지원 과정은 &quot;무료로 배우고 취업까지 연계한다&quot;는 장점이 있지만, 모든 수강생이 동일한 결과를 얻지는 못한다. 부트캠프도 마찬가지다. &quot;비전공자도 개발자가 될 수 있다&quot;는 문구는 희망적으로 들리지만, 실제로는 자기주도 학습 능력과 철저한 시간 관리가 요구된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgIBOL/btsLDb3d5JP/KxjGKPeOMP81WYzVO2bEtk/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgIBOL/btsLDb3d5JP/KxjGKPeOMP81WYzVO2bEtk/tfile.dat&quot; data-alt=&quot;과연 그럴까..?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgIBOL/btsLDb3d5JP/KxjGKPeOMP81WYzVO2bEtk/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgIBOL%2FbtsLDb3d5JP%2FKxjGKPeOMP81WYzVO2bEtk%2Ftfile.dat&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;769&quot; height=&quot;58&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;과연 그럴까..?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경험으로 볼 때, 국비든 부트캠프든 &quot;어디서 배웠는지&quot;보다 중요한 것은 &lt;b&gt;얼마나 집중적으로 많은 시간을 투자했는지&lt;/b&gt;였다. 회사에 다니면서 짬짬이 공부하던 시기와 지금 온전히 공부에 전념할 수 있는 시기를 비교하면, 학습의 깊이가 확연히 다르다. 이는 국비와 부트캠프의 한계를 넘어선 문제다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;부트캠프와 국비에서 얻은 교훈&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 부트캠프에서는 &quot;기초부터 차근차근 가르쳐준다&quot;는 말에 큰 기대를 걸었다. 하지만 현실은 달랐다. 부트캠프의 주된 방식은 &lt;b&gt;자기주도 학습&lt;/b&gt;이었다. 예를 들어, 사전 OT에서 강사가 &quot;기초부터 배우니 준비할 필요가 없다&quot;고 했지만, 실제로는 미리 준비한 사람들과 그렇지 않은 사람들 사이의 격차가 매우 컸다. 더군다나 직장을 다니면서 하루종일 공부하는 사람과 똑같은 결과를 얻는다? 불가능한 이야기다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 타임머신을 타고 그 시점으로 돌아간다면, 나에게 이렇게 조언할 것이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;생활코딩 같은 무료 강의를 하나라도 완강하고 가라.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국비지원의 경우 &quot;팀 프로젝트를 진행하고 연계된 기업에서 발표시 참관도 한다'는 말에 큰 기대를 걸었다. 기업에서 참관했고 피드백도 좋았다. 다만 연계된 기업에서 항상 채용한다는 기대를 버려야한다. 참관한 기업들은 경기가 어렵고 TO가 없다며 올해는 채용계획이 없다고 했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;연계된 기업이 있고 취업을 알선한다고 했지 보장한다고 하진 않았다.는 함정&lt;br /&gt;전적으로 취업되지 못한 책임은 수강생이 진다.&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;자기주도 학습의 중요성&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9nKRs/btsLE0TvE91/Zuuka1PCR83JmR3F42EZmK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9nKRs/btsLE0TvE91/Zuuka1PCR83JmR3F42EZmK/tfile.dat&quot; data-alt=&quot;왠만한 부트캠프라면 한번씩은 한다는 홍보문구. 하지만..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9nKRs/btsLE0TvE91/Zuuka1PCR83JmR3F42EZmK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9nKRs%2FbtsLE0TvE91%2FZuuka1PCR83JmR3F42EZmK%2Ftfile.dat&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;597&quot; height=&quot;122&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왠만한 부트캠프라면 한번씩은 한다는 홍보문구. 하지만..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트캠프에서는 강의 자료를 제공하고, 과제를 내주고, 프로젝트를 진행하지만, 결국 모든 학습의 주체는 나였다.&lt;br /&gt;어떤 환경에서도 성공하려면 &lt;b&gt;내가 얼마나 시간을 투자하고 스스로 학습했는지&lt;/b&gt;가 중요하다. 계획한 대로 공부가 진행되지 않는다면, 부트캠프의 치열한 속도를 따라가기 어려울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국비지원은 일반적으로 9-6의 규칙적인 수업이 진행되기 때문에 멱살잡고 분량을 진행한다. 문제는 공부해야 할 내용들이 산더미기 때문에 수업 이후 복습이 필수다.&lt;br /&gt;나는 국비 기간 시작부터 종료되는 시점까지 꾸준히 학원이 마감하는 22시까지 추가 학습을 진행했지만 그래도 매일의 수업 내용을 완벽히 소화할 수는 없었다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h3&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;912&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb5dFA/btsLE3vTz7X/Yt5BYngaVvLM8Sm502eYWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb5dFA/btsLE3vTz7X/Yt5BYngaVvLM8Sm502eYWK/img.png&quot; data-alt=&quot;디시인사이드에 프로그래밍 갤러리라는게 있단다. 이거 레알이다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb5dFA/btsLE3vTz7X/Yt5BYngaVvLM8Sm502eYWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb5dFA%2FbtsLE3vTz7X%2FYt5BYngaVvLM8Sm502eYWK%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;400&quot; height=&quot;221&quot; data-filename=&quot;edited_blob&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;912&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;디시인사이드에 프로그래밍 갤러리라는게 있단다. 이거 레알이다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부트캠프나 국비지원을 고민하는 사람들에게는 이렇게 말하고 싶다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;시작하기 전, 먼저 스스로 공부를 해볼 것 - 생활코딩 같은 온라인 공개 강의 완강해보기&lt;br /&gt;시간 관리와 자기주도 학습 능력을 점검할 것 - 치열한 속도를 따라가기 어렵다&lt;br /&gt;부트캠프나 국비는 기초를 다지기에 좋은 환경이 아니다.&lt;br /&gt;빠른 진행 속도를 따라가기 위해 기초가 준비된 상태로 참가해야 얻는 것이 많다.&lt;br /&gt;수료하더라도 이력서만 돌리고 있지 말고 꾸준히 프로젝트를 할 것&lt;br /&gt;짧게는 3개월에서 2년까지 취준 기간이 필연적으로 발생하니 이에 대해 대비할 것&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;에필로그&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수료 후 아직까지 취준상태지만 이제 뭘 모르는지 모르는 상태에서 뭘 모르는지 아는 상태가 되었다. 진정으로 개발 공부에 전념하며 꿈을 향해 나아가고 있다. 아직 개발자가 되기까지 갈 길이 멀지만, 이 여정을 통해 얻은 깨달음은 분명하다. 환경에 의존하기보다는 &lt;b&gt;스스로를 믿고 끝까지 나아가는 것&lt;/b&gt;, 그것이 가장 중요한 태도다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;추후 읽어볼 내용&lt;/b&gt;&lt;/h4&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;https://skyu2579.tistory.com/51&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://skyu2579.tistory.com/51&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://okky.kr/articles/1188038&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://okky.kr/articles/1188038&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>생각정리</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/938</guid>
      <comments>https://comp-jae.tistory.com/938#entry938comment</comments>
      <pubDate>Sat, 4 Jan 2025 19:07:20 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #13 : 클래스</title>
      <link>https://comp-jae.tistory.com/934</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LXU50/btsLlI6TtXe/QBN7trLIm19cIIo9X1Lksk/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LXU50/btsLlI6TtXe/QBN7trLIm19cIIo9X1Lksk/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LXU50/btsLlI6TtXe/QBN7trLIm19cIIo9X1Lksk/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLXU50%2FbtsLlI6TtXe%2FQBN7trLIm19cIIo9X1Lksk%2Ftfile.dat&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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.16&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;10장. 클래스&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;클래스는 작고 단순해야 하며, 단일 책임 원칙(SRP)을 따라야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;캡슐화&lt;/b&gt;를 통해 내부 구현을 숨기고, 필드에 직접 접근하지 않도록 한다.&lt;/li&gt;
&lt;li&gt;클래스는 &lt;b&gt;확장에는 열려 있고, 변경에는 닫혀 있어야(OCP)&lt;/b&gt; 하며, 새로운 기능을 추가할 때 기존 코드를 수정하지 않도록 설계한다.&lt;/li&gt;
&lt;li&gt;의존성 역전 원칙(DIP)을 통해 인터페이스와 구현을 분리하고, 유연성을 확보한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상속보다는 구성&lt;/b&gt;을 우선적으로 고려하여 복잡한 계층 구조를 피한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리액트로 함수형 프로그래밍을 주로 하다보니 클래스와는 좀 어색하다.&amp;nbsp;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;함수 챕터와 일맥상통하는 부분이 있다는 것을 느끼면서 읽었다. 작고, 단순해야하며, 단일 책임 원칙을 따라야 한다는 점. 처음부터 일관되게 이야기하는 가독성과도 맞닿아 있다. 어렵지만 연차가 쌓일수록 이 책이 다른 느낌으로 다가온다고..(카더라) 추후에 클래스와 좀 더 친해지고 나서 읽으면 또 다른 느낌이려나 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단일 책임 원칙(SRP): 클래스는 오직 하나의 책임만 가져야 하며, 변경할 이유도 하나만 있어야 한다.&lt;/li&gt;
&lt;li&gt;캡슐화: 클래스 내부 구현을 숨기고, 외부에는 상호작용하는 부분만 노출. 외부의 잘못된 사용을 방지한다.&lt;/li&gt;
&lt;li&gt;OCP (개방-폐쇄 원칙): 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다, 즉 기존 코드를 수정하지 않고도 새로운 기능을 추가할 수 있어야 한다.&lt;/li&gt;
&lt;li&gt;DIP (의존성 역전 원칙): 고수준 모듈은 저수준 모듈에 의존하지 않고, 둘 다 추상화된 인터페이스에 의존해야 한다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/934</guid>
      <comments>https://comp-jae.tistory.com/934#entry934comment</comments>
      <pubDate>Tue, 17 Dec 2024 02:38:57 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #11 : 단위 테스트</title>
      <link>https://comp-jae.tistory.com/933</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqVtsE/btsLhMakMwV/ipoEayenvGNplGTRsB6pjK/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqVtsE/btsLhMakMwV/ipoEayenvGNplGTRsB6pjK/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqVtsE/btsLhMakMwV/ipoEayenvGNplGTRsB6pjK/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqVtsE%2FbtsLhMakMwV%2FipoEayenvGNplGTRsB6pjK%2Ftfile.dat&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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.13&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;9장. 단위&amp;nbsp;테스트&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;단위 테스트는 필수적&lt;/b&gt;이며, 코드의 품질과 리팩토링 속도를 높인다.&lt;/li&gt;
&lt;li&gt;테스트는 함수마다 &lt;b&gt;한 개념만&lt;/b&gt; 테스트한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;F.I.R.S.T 원칙&lt;/b&gt;을 따라 빠르고, 독립적이며 반복 가능한 테스트를 작성해야 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;F&lt;/b&gt;ast : 빠른 테스트가 가능한 코드를 작성한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I&lt;/b&gt;ndependent : 단위 테스트는&lt;span&gt;&amp;nbsp;&lt;/span&gt;작고 독립적이어야 하며, 불필요한 의존성을 최소화해야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;R&lt;/b&gt;epeatable : 실행 환경이 테스트에 실패한 이유가 되지 않도록 어디서나 반복적으로 실행할 수 있어야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S&lt;/b&gt;elf&lt;b&gt;-&lt;/b&gt;Validating : 테스트는 결과가 명확하게 성공 또는 실패로 나타나야 한다. 확인 작업을 수동으로 하면 안 된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;T&lt;/b&gt;imely : 테스트는 실제 코드를 구현하기 직전에 구현한다. TDD(테스트 주도 개발)이 가능하게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Given-When-Then&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패턴을 사용해 명확하게 구조화할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734547712072&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function add(a, b) {
  return a + b;
}

// 단위 테스트: Given-When-Then
test(&quot;add 함수는 두 숫자의 합을 반환한다&quot;, () =&amp;gt; {
  // Given [준비]
  const a = 2;
  const b = 3;

  // When [실행]
  const result = add(a, b);

  // Then [조건]
  expect(result).toBe(5);
});&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;&lt;b&gt;TDD&lt;/b&gt;를 통해 테스트를 먼저 작성하면 더 나은 설계를 유도할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;최근 프론트엔드 채용 공고에서 테스트 도구 사용 경험을 우대사항으로 제시하는 경우가 늘어나고 있어서 관심을 두고 있었다. 해당 챕터를 통해 이미 기존의 언어들은 테스트에 대한 다양한 방법론과 패턴이 존재함을 알 수 있었다. 앞서 에러 처리부터 단위 테스트까지 모두 견고한 프로그램을 만들기 위한 일환으로 본다면, 견고한 코드 작성을 위해 타입스크립트가 프론트엔드의 기본사항이 된 것처럼 테스트도 점차 프론트엔드의 기본으로 자리 잡을 것으로 예상된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RSpec: Ruby 코드를 테스트하기 위해 프로그래밍 언어 Ruby로 작성된 컴퓨터 도메인 특정 언어 (DSL)(특정 애플리케이션 도메인) 테스트 도구이다.&lt;/li&gt;
&lt;li&gt;TEMPLATE METHOD 패턴 : 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다.&lt;/li&gt;
&lt;li&gt;Given-When-Then 패턴 :
&lt;ul style=&quot;list-style-type: disc; color: #24292e; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Given [준비]: 테스트를 하기 위해 세팅하는 주어진 환경.&lt;/li&gt;
&lt;li&gt;When [실행]: 테스트를 하기 위한 조건으로 프론트엔드에선 사용자와의 상호작용인 경우도 많음.&lt;/li&gt;
&lt;li&gt;Then [조건]: 예상 결과를 나타내며 의도대로 동작하는지 검증 및 확인할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;TDD : 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현하는 개발방식이다.&lt;/li&gt;
&lt;li&gt;Test Pyramid
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Unit Test : 단위 테스트. 개별 컴포넌트의 동작을 테스트 하는 단계다. 주로 배포하기 전 자동으로 실행되도록 한다.&lt;/li&gt;
&lt;li&gt;Integration Test : 개별 컴포넌트를 합쳐 동작을 테스트 하는 단계다.&lt;/li&gt;
&lt;li&gt;E2E Test : End to End Test. 즉,&amp;nbsp; 시스템 또는 프로세스의 시작부터 끝까지의 흐름을 테스트하는 단계다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&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;https://inpa.tistory.com/entry/GOF&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Inpa Dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://techblog.woowahan.com/17404/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://techblog.woowahan.com/17404&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://velog.io/@wlwl99/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;wlwl99.log&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/933</guid>
      <comments>https://comp-jae.tistory.com/933#entry933comment</comments>
      <pubDate>Fri, 13 Dec 2024 03:38:23 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #10 : 오류처리</title>
      <link>https://comp-jae.tistory.com/932</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0dNm8/btsLdbXbFYX/LiX7ZR5ooR1h7TuwbeJO50/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0dNm8/btsLdbXbFYX/LiX7ZR5ooR1h7TuwbeJO50/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0dNm8/btsLdbXbFYX/LiX7ZR5ooR1h7TuwbeJO50/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0dNm8%2FbtsLdbXbFYX%2FLiX7ZR5ooR1h7TuwbeJO50%2Ftfile.dat&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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.10&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;7장. 오류처리&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;오류코드보다 예외를 사용하라&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오류 처리를 반환값 대신 예외로 처리하는 것이 더 좋다. (중첩에 중첩되는 if문 사용X)&lt;/li&gt;
&lt;li&gt;예외를 사용하면 &lt;b&gt;정상적인 코드 흐름과 오류 처리가 분리&lt;/b&gt;되어 가독성이 좋아진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예외에 의미를 제공하라.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예외가 언제 발생하는지 &lt;b&gt;의도를 명확하게&lt;/b&gt; 작성하고, 혼란스러운 예외 사용을 피해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;null을 반환하지 마라&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;null을 반환하면 호출하는 쪽에서 &lt;b&gt;null 체크&lt;/b&gt;를 해야 하므로 코드가 복잡해진다.&lt;/li&gt;
&lt;li&gt;대신 예외를 던지거나, 명시적인 값을 반환하는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특별한 경우를 처리하는 클래스 사용&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;null 대신 &lt;b&gt;Null Object 패턴&lt;/b&gt;이나 특별한 오류 객체를 사용해 로직을 단순화하라.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용(프론트엔드 적용버전)&lt;/b&gt;&lt;/span&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;span style=&quot;color: #333333;&quot;&gt;반환값 대신 &lt;b&gt;throw&lt;/b&gt;를 사용해 예외를 던져라.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734455190395&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 나쁜 예시
function getUser(id) {
  if (id &amp;lt;= 0) return null; // 잘못된 경우 null 반환
  return { id, name: &quot;User&quot; };
}

const user = getUser(-1);
if (!user) {
  console.log(&quot;User not found&quot;);
}


// 개선안
function getUser(id) {
  if (id &amp;lt;= 0) {
    throw new Error(&quot;Invalid user ID&quot;);
  }
  return { id, name: &quot;User&quot; };
}

try {
  const user = getUser(-1);
  console.log(user);
} catch (error) {
  console.error(error.message);
}&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;&lt;span style=&quot;color: #333333;&quot;&gt;에러 처리 코드와 비즈니스 로직을 분리하라.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734455314902&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 나쁜 예시
try {
  const response = fetch(&quot;/api/data&quot;);
  const data = response.json();
  console.log(data);
} catch (error) {
  console.error(&quot;Failed to load data&quot;, error);
}


// 개선안
// 에러 처리 코드
async function safeFetchData(url) {
  try {
    const response = await fetch(url);
    return await response.json();
  } catch (error) {
    console.error(&quot;Fetch failed:&quot;, error);
    return null;
  }
}

// 비즈니스 로직
async function main() {
  const data = await safeFetchData(&quot;/api/data&quot;);
  if (data) {
    console.log(data);
  }
}

main();&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;&lt;span style=&quot;color: #333333;&quot;&gt;에러 처리 코드와 비즈니스 로직을 분리하라 - 각 함수의 에러처리 버전&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734456999656&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 공통 API 요청 함수
async function fetchData(url, options = {}) {
  try {
    const response = await fetch(url, options);

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return await response.json();
  } catch (error) {
    console.error(`API 호출 실패: ${url}`, error.message);
    throw error; // 개별 try-catch에서 처리 가능
  }
}

// 각각의 API 요청 함수
async function getUser(id) {
  try {
    const user = await fetchData(`/api/users/${id}`);
    console.log(&quot;User data:&quot;, user);
  } catch (error) {
    console.error(&quot;사용자 정보를 불러오지 못했습니다.&quot;);
  }
}

async function getPosts() {
  try {
    const posts = await fetchData(&quot;/api/posts&quot;);
    console.log(&quot;Posts:&quot;, posts);
  } catch (error) {
    console.error(&quot;게시글 목록을 불러오지 못했습니다.&quot;);
  }
}

// 실행
getUser(1);
getPosts();&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;&lt;span style=&quot;color: #333333;&quot;&gt;null이나 undefined 대신 기본값을 반환해라.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734455404841&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 나쁜 예시
function getUser(id) {
  if (id &amp;lt;= 0) return null;
  return { id, name: &quot;User&quot; };
}

const user = getUser(-1);
console.log(user ? user.name : &quot;Guest&quot;);


// 개선안
function getUser(id) {
  if (id &amp;lt;= 0) return { id: 0, name: &quot;Guest&quot; }; // 기본값 반환
  return { id, name: &quot;User&quot; };
}

const user = getUser(-1);
console.log(user.name); // 항상 안전하게 접근 가능&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;&lt;span style=&quot;color: #333333;&quot;&gt;의미 있는 에러 메시지를 작성해라.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734455453495&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 나쁜 예시
throw new Error(&quot;Something went wrong&quot;);


// 개선안
function getUser(id) {
  if (id &amp;lt;= 0) {
    throw new Error(`Invalid ID: ${id}. ID must be greater than 0.`);
  }
  return { id, name: &quot;User&quot; };
}

try {
  getUser(-1);
} catch (error) {
  console.error(error.message);
}&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;&lt;span style=&quot;color: #333333;&quot;&gt;에러를 개발자용 로그와 사용자 메시지로 나눠 처리하라.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734455492723&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;async function fetchData() {
  try {
    const response = await fetch(&quot;/api/data&quot;);
    if (!response.ok) {
      throw new Error(&quot;Network response was not ok&quot;);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error(&quot;Error details for developers:&quot;, error); // 개발자용 로그
    alert(&quot;데이터를 불러오는 중 문제가 발생했습니다. 다시 시도해주세요.&quot;); // 사용자 알림
    return null;
  }
}

fetchData();&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이게 무슨 소리야 욕하면서 본 것 같다. 클린코드가 자바 중심의 책이라 자바스크립트를 다루는 나로써는 이해할 수 없는 예시와 지문들 때문에 책은 20분도 안되서 다 읽었지만 관련한 영상이나 자료를 찾는데 3시간 이상을 쏟아부었다. 이게 노마드코더 챌린지가 아니었으면 여기서 읽기를 때려쳤을 듯. 유튜브에서 관련한 영상들을 찾아보니 의견이 분분한 챕터이기도 한 것 같다. GPT와도 열띤 토론을 나눴다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이에 따라 프론트엔드 버전용을 별도로 기록하게 되었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMXpzW/btsLmGn0pey/zidI1QXBjtTF7qSSAcxMh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMXpzW/btsLmGn0pey/zidI1QXBjtTF7qSSAcxMh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMXpzW/btsLmGn0pey/zidI1QXBjtTF7qSSAcxMh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMXpzW%2FbtsLmGn0pey%2FzidI1QXBjtTF7qSSAcxMh0%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;712&quot; height=&quot;91&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 챕터는&lt;span&gt; &lt;/span&gt;&lt;/span&gt;코드의 가독성, 오류 상황에서 시스템의 안정적인 동작 등에 따라 취사선택을 해야할 것 같고, 실무 경험을 쌓아야 논할 수 있을 것 같다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Checked Exception &amp;nbsp;: 컴파일 타임에 예외 처리를 강제하는 자바의 예외 처리 방식이다. 파일 입출력 시 발생할 수 있는 예외( IOException)나&amp;nbsp; 데이터베이스 관련 작업에서 발생할 수 있는 예외(&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;SQLException&lt;/span&gt;) 등은 &lt;b&gt;try-catch로 반드시 처리해야 컴파일이 가능하다&lt;/b&gt;. 하지만 자바스크립트는 모든 예외가 선택적 처리가 가능한 Unchecked Exception처럼 동작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&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;https://www.youtube.com/watch?v=LQ182IQZfW8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;try? catch? 예외처리란 뭐 하는 건가요? - 얄팍한 코딩사전&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=qMZN1G0MwMs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;클린코드 읽기 - 에러코드 리턴보다 익셉션? - 최범균&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/qkraudghgh/clean-code-javascript-ko?tab=readme-ov-file#%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%ACerror-handling&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;JS로 읽는 클린코드 (한글판) - 에러 처리&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mangbaam.github.io/book/2022/03/03/clean-code-7.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mangbaam.github.io/book/2022/03/03/clean-code-7.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://min88.tistory.com/entry/%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C-Day-14-15-%EC%98%A4%EB%A5%98-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;JM'sNOTE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/932</guid>
      <comments>https://comp-jae.tistory.com/932#entry932comment</comments>
      <pubDate>Wed, 11 Dec 2024 02:39:34 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #08 : 객체와 자료구조</title>
      <link>https://comp-jae.tistory.com/931</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWG7VO%2FbtsJ3REZ7I3%2FwXLPYbg8uLfpc6s8n1uKv0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.08&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;7장. 오류처리&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&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;&lt;b&gt;객체(Object)&lt;/b&gt;는 데이터를 캡슐화하여 동작(메서드)을 통해서만 접근하도록 하며, 복잡성을 감추고 유연성을 제공한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자료구조(Structure)&lt;/b&gt;는 데이터를 외부에 노출하며, 데이터를 처리하는 &lt;b&gt;비즈니스 로직&lt;/b&gt;과 구조를 분리한다.&lt;/li&gt;
&lt;li&gt;객체는 &lt;b&gt;디미터 법칙&lt;/b&gt;을 준수하여 불필요한 의존성을 줄이고, 객체 내부의 데이터를 무분별하게 노출하지 않아야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복잡한 비즈니스 로직이 포함된 데이터&lt;/b&gt;는 객체로 감싸고, 단순히 데이터를 전달하는 역할만 필요한 경우 자료구조를 사용한다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;객체와 자료구조는 상호 보완적&lt;/b&gt;이며, 상황에 따라 적절히 선택하여 사용해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;짧지만 어려운 내용이다. 정리하면 일단 &lt;b&gt;둘 다 클래스를 통해서 생성한 결과물&lt;/b&gt;을 두고 이야기 하는 것임을 나중에서야 알았다. &lt;b&gt;비즈니스 로직&lt;/b&gt;의 유무에 따라 객체와 자료구조로 나뉘어 지는데 &lt;b&gt;객체는 디미터 법칙을 준수&lt;/b&gt;해야하고, 자료구조에 대해서는 DTO와 빈 구조에 대해 한번 더 설명한 것이었다. 책만으로는 이해가 잘 안되서 관련한 영상을 보고 한번 더 정리했는데 이건 추후에 실제 코드를 만들어보면서 한번 더 정리해야 할 것 같다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;휴리스틱 : 경험에 의한 법칙. ex) 출퇴근 시간, 특히 월요일에는 차가 막힌다.&lt;/li&gt;
&lt;li&gt;디미터 법칙(law of Demeter) : '객체는 자신의 가까운 친구(직접적으로 연관된 객체)와만 대화해야 하며, 친구의 친구와는 대화하지 말아야 한다'는 원칙. 즉 ex) obj.a().b().c().d(); 와 같이 함수가 반환하는 객체의 함수를 소환하는 객체의 함수를 소환하는 식의 연쇄작용이 생겨서는 안된다.&lt;/li&gt;
&lt;li&gt;DTO(Data Transfer Object) : 공개 변수만 있고 함수가 없는 클래스 형태. 대표적인 자료구조다.&lt;/li&gt;
&lt;li&gt;빈(bean)구조 : 비공개(private) 변수를 조회/설정 함수로 조작한다. 자료구조.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/931</guid>
      <comments>https://comp-jae.tistory.com/931#entry931comment</comments>
      <pubDate>Mon, 9 Dec 2024 04:46:22 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #07 : 형식 맞추기</title>
      <link>https://comp-jae.tistory.com/930</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWG7VO%2FbtsJ3REZ7I3%2FwXLPYbg8uLfpc6s8n1uKv0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.07&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5장. 형식 맞추기&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;일관된 형식&lt;/b&gt;은 &lt;b&gt;코드의 가독성과 유지보수성을 높이는 핵심&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;적절한 &lt;b&gt;줄바꿈과 여백&lt;/b&gt;으로 코드를 시각적으로 분리하고, &lt;b&gt;논리적 흐름&lt;/b&gt;을 명확히 해야 한다.&lt;/li&gt;
&lt;li&gt;팀의 &lt;b&gt;스타일 가이드&lt;/b&gt;를 따르고, 자동화 도구를 활용하여 형식 논쟁을 최소화 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;형식 맞추기는 내 생각에 가장 쉽게 클린 코드를 만들 수 있는 방법이다. 그러면서 사실상&amp;nbsp; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Prettier와 ESLint가 필수가 되면서 자동으로 포맷팅이 되니까 잘 모를 수 있는 기본적인 영역이다. &lt;/span&gt;사실상 클린 코드의 가장 큰 목표가 나와 동료의 생산성을 높이는 것이기 때문에 이 부분만 잘 지켜도 협업 생산성이 높아진다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React는 변수처럼 Hook을 상단에 기재하는데 클린코드에서는 변수는 사용하는 위치에 최대한 가까이 선언하라고 한다.&lt;/li&gt;
&lt;li&gt;각 Hook을 개별 함수의 상단에 위치시키면 안되는 것인지 조사&amp;nbsp;&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리액트에서 Hook은 &lt;a title=&quot;리액트 공식문서 Hook 사용 규칙 링크&quot; href=&quot;https://ko.legacy.reactjs.org/docs/hooks-overview.html#rules-of-hooks&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식문서&lt;/a&gt;에서 최상위에서만 호출하도록 명시하고 있다.&lt;/li&gt;
&lt;li&gt;이는 Hook이 &lt;b&gt;컴포넌트의 상태와 로직&lt;/b&gt;을 관리하기 때문으로&amp;nbsp;&lt;b&gt;데이터 흐름&lt;/b&gt;과 &lt;b&gt;상태 관리&lt;/b&gt;를 명확히 파악하기 위한 규칙이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Hook이 그 중첩 함수 내부에서만 의미가 있을 때&lt;/b&gt;는 중첩 함수 근처에서 호출하는 것이 더 나을 수 있지만, 그럴 경우에는 CustomHook을 만드는 것이 더 나음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/930</guid>
      <comments>https://comp-jae.tistory.com/930#entry930comment</comments>
      <pubDate>Sun, 8 Dec 2024 01:07:38 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #06 | Mission (1)</title>
      <link>https://comp-jae.tistory.com/910</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;QUIZ 01.&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hint ! : 검색하기 쉬운 이름을 사용하세요.&lt;/li&gt;
&lt;li&gt;blastOFF는 로켓 발사를 의미.&lt;/li&gt;
&lt;li&gt;86400000은 하루의 밀리초 (milliseconds) 의미.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;// What the heck is 86400000 for?
setTimeout(blastOff, 86400000);


// GOOD  
const MILLISECONDS_IN_A_DAY = 86400000
setTimeout(blastOff, MILLISECONDS_IN_A_DAY);

/* 
86400000가 의미하는 바가 불명확함
구체적이고 의도가 명확한 변수를 만들어 할당함
하루라는 총 시간의 양은 변하지 않기 때문에 const 사용
*/&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;QUIZ 02.&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hint ! : 의미있는 이름을 사용해 주세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;const yyyymmdstr = moment().format(&quot;YYYY/MM/DD&quot;);

// GOOD  
const currentDate = moment().format(&quot;YYYY/MM/DD&quot;);

// 변수명을 좀 더 의미있는 단어로 수정함&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;QUIZ 03.&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Hint ! : 불필요하게 반복하지 마세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;const Car = {
  carMake: &quot;Honda&quot;,
  carModel: &quot;Accord&quot;,
  carColor: &quot;Blue&quot;
};

function paintCar(car, color) {
  car.carColor = color;
}

// GOOD  
const Car = {
  Make: &quot;Honda&quot;,
  Model: &quot;Accord&quot;,
  Color: &quot;Blue&quot;
};

function paintCar(car, color) {
  car.Color = color;
}

// 객채명과 동일한 car라는 중복단어 제거&lt;/code&gt;&lt;/pre&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/910</guid>
      <comments>https://comp-jae.tistory.com/910#entry910comment</comments>
      <pubDate>Fri, 6 Dec 2024 14:13:03 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #05 : 주석</title>
      <link>https://comp-jae.tistory.com/909</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWG7VO%2FbtsJ3REZ7I3%2FwXLPYbg8uLfpc6s8n1uKv0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.05&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4장. 주석&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;코드를 개선&lt;/b&gt;해서 주석이 필요 없도록 만드는 것이 더 좋다.&lt;/li&gt;
&lt;li&gt;좋은 주석은 드물기 때문에 &lt;b&gt;최대한 주석을 줄이고, 코드 자체로 의도를 드러내야 한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수명, 변수명, 클래스명&lt;/b&gt; 등을 의미 있게 지어 주석 대신 &lt;b&gt;자체적으로 코드가 무엇을 하는지 설명&lt;/b&gt;하도록 해야 한다.&lt;/li&gt;
&lt;li&gt;복잡한 로직은 함수로 분리하고 명확한 함수명을 붙이는 것이 좋다.&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주석이 필요할 때 :&lt;/b&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;b&gt;법적 정보&lt;/b&gt;: 라이선스나 저작권 관련 정보를 제공해야 할 때.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의도를 설명하는 주석&lt;/b&gt;: 코드의 의도가 명확하지 않을 때, 그 이유나 목적을 설명하는 주석&lt;/li&gt;
&lt;li&gt;&lt;b&gt;경고&lt;/b&gt;: 동작 방식이 정해진 코드는 다른 방식은 문제가 생길 수 있음을 경고하는 주석.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TODO 주석&lt;/b&gt;: 추후 개선해야 할 부분이나 추가 작업을 기록할 때.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;주석의 문제점 :&lt;/b&gt;&lt;/span&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;b&gt;업데이트&lt;/b&gt;하지 않으면 잘못된 정보를 제공할 수 있다.&lt;/li&gt;
&lt;li&gt;너무 길거나 많은 정보가 나열된 주석은 &lt;b&gt;가독성&lt;/b&gt;을 해치고 코드의 &lt;b&gt;복잡성&lt;/b&gt;을 높인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;주석을 남기기 전에 생각할 것 :&lt;/b&gt;&lt;/span&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;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코드를 짤 때마다 '이건 이렇게 주석을 달면 좋지 않을까?' '이건 이런 주석이 있으면 이해하기 더 쉽겠지?' 라고 생각하면서 코드를 짰던 적이 있다. 나름대로 친절하고 쉽게 다른 사람들을 위해서 주석을 짰다고 생각했지만, 추후 주석을 보면서 '이게 뭔 소리야?' 라거나 '이런 것도 주석으로 남겼네?'라는 생각이 들었다. 주석은 나쁜 코드를 보완하지 못한다. 어떻게 해야 주석을 잘 짤 수 있을까? 보다 '어떻게 해야 주석이 필요하지 않은 코드를 짤 수 있을까' 를 고민해야 한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;javadoc : Java 프로그래밍 언어에서 사용되는 문서화 도구. 주석을 달아 API 문서를 자동으로 생성하는 데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729285391110&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;/**
 * 이 메서드는 두 숫자의 합을 반환합니다.
 *
 * @param a 첫 번째 숫자
 * @param b 두 번째 숫자
 * @return 두 숫자의 합
 */
public int add(int a, int b) {
    return a + b;
}&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;이 주석을 아래의 명령을 통해 HTML 형식의 API 문서로 변환할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729285391111&quot; class=&quot;shell&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;javadoc MyClass.java&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;Base64 :&amp;nbsp;이진 데이터를 텍스트 형식으로 인코딩하는 방식이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/qkraudghgh/clean-code-javascript-ko&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;JS로 읽는 클린코드 (한글판)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://silver-ye.tistory.com/&quot;&gt;https://silver-ye.tistory.com/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/909</guid>
      <comments>https://comp-jae.tistory.com/909#entry909comment</comments>
      <pubDate>Fri, 6 Dec 2024 02:01:04 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #04 : 함수</title>
      <link>https://comp-jae.tistory.com/861</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWG7VO/btsJ3REZ7I3/wXLPYbg8uLfpc6s8n1uKv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWG7VO%2FbtsJ3REZ7I3%2FwXLPYbg8uLfpc6s8n1uKv0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.02&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3장. 함수&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1. 작게 만들어라&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;함수는 짧고 간결하게 한다.&lt;br /&gt;중첩 구조가 생길 만큼 커져서는 안된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 한 가지만 해라&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;함수 내의 모든 문장의 추상화 수준이 동일해야 한다.&lt;br /&gt;최대한 추상화 수준이 하나인 함수를 구현하기 위해 노력해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3.&amp;nbsp;함수의&amp;nbsp;이름은&amp;nbsp;동작을&amp;nbsp;설명해야&amp;nbsp;한다&lt;/b&gt; &lt;br /&gt;길고 서술적인 이름이 짧고 어려운 이름보다 좋다.&lt;br /&gt;이름만 보고도 함수의 목적을 쉽게 알 수 있어야 한다. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4.&amp;nbsp;함수의&amp;nbsp;인수(파라미터)는&amp;nbsp;적을수록&amp;nbsp;좋다&lt;/b&gt; &lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;함수 인자는 0~2개가 적당하다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;3개 이상은 객체로 묶어서 전달하는 것이 좋다.&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;인자가 많을수록 함수가 복잡해지고, 테스트하기 어려워진다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;5. 부수 효과를 일으키지 마라&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;함수는&amp;nbsp;부수&amp;nbsp;효과&amp;nbsp;(side&amp;nbsp;effect)가&amp;nbsp;없어야&amp;nbsp;한다.&lt;/span&gt;&lt;br /&gt;외부 상태를 변경하거나 전역 변수를 수정하는 것 등은 함수의 동작을 예측하기 어렵게 만든다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;6.&amp;nbsp;명령과&amp;nbsp;조회를&amp;nbsp;분리하라&lt;/b&gt; &lt;br /&gt;함수는 명령(어떤 동작을 수행)과 조회(어떤 정보를 반환)의 역할을 혼합하지 말아야 한다. &lt;br /&gt;하나의 함수는 어떤 동작을 하거나 값을 반환하는 한 가지 목적만을 가져야 한다. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;7. Try/Catch 블록 뽑아내기&lt;/b&gt;&lt;br /&gt;오류 처리는 try/catch 블록으로 처리하고 별도 함수로 뽑아내는 것이 좋다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;8. 함수를 짜는 방법&lt;/b&gt;&lt;/span&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 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바코드가 눈에 안 들어와서 너무 힘들었다. JS판으로 다시 보면서 겨우 이해할 수 있었는데 역시 마감기한이 이틀인 이유가 있다. 추상화 수준이라는 단어에 꽂혔는데 기존에는 동작하는 함수를 만들고 난 뒤에 함수 쪼개기를 해볼 생각을 하지 못했던 것 같다. '이렇게 하나하나 세분화해서 쪼갤 수도 있구나'라는 생각과 함수의 재사용성이라는 측면을 고려했을 때 '어디까지 쪼개는 게 좋을까'라는 생각이 공존했는데 현업에서는 어떻게 하는지 나중에 꼭 확인해보고 싶다. 또한 추상 메서드를 묶어서 하나의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;추상 팩토리에서 사용하는 방식에 대해 공부가 더 필요할 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&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;br /&gt;책에서는 코드에 불필요하거나 복잡하거나 불명확한 표현을 덧붙여 해석하기 어렵게 하는 것을 표현하는 것으로도 사용했다.&lt;/li&gt;
&lt;li&gt;추상화 수준 : 코드가 어떤 일을 할 때 &lt;b&gt;무엇을 하는지(고수준)&lt;/b&gt;와 &lt;b&gt;어떻게 하는지(저수준)&lt;/b&gt;를 구분하는 것을 말한다. 예를 들어 아래의 코드에서 authenticateUser는 고수준 함수다. 내부적으로 logFailure와 logSuccess 함수가 실행되는데 이 함수들이 어떻게 동작하는지 로직은 해당 함수 외부에 별도로 작성되어 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1728832567484&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 사용자를 인증하는 고수준 함수
function authenticateUser(username, password) {
  const user = findUser(username);

  if (!user) {
    logFailure(username);
    return false;
  }

  if (!checkPassword(user, password)) {
    logFailure(username);
    return false;
  }

  logSuccess(username);
  return true;
}

// 성공 로그를 기록하는 저수준 함수
function logSuccess(username) {
  console.log(`사용자 ${username} 인증 성공`);
}

// 실패 로그를 기록하는 저수준 함수
function logFailure(username) {
  console.log(`사용자 ${username} 인증 실패`);
}&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;팩토리 : 객체를 생성하는 역할을 담당하는 클래스 또는 메서드를 의미한다.&lt;/li&gt;
&lt;li&gt;추상 팩토리 : 이 패턴은 관련된 객체들의 집합을 생성하기 위한 인터페이스를 제공하는 것이다. 구체적인 클래스에 의존하지 않고, 상위 팩토리 인터페이스를 통해 객체들을 그룹화하고 추상화하여 생성할 수 있다. 예를 들어, 모던 가구와 클래식 가구를 생산하는 두 공장이 있다고 할 때, 두 공장의 가구 생성 메서드를 하나의 추상 팩토리 인터페이스로 묶어서 다양한 가구 객체를 생성하는 방식을 추상화할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1729077385127&quot; class=&quot;scala&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;// 추상 팩토리: 가구 팩토리 인터페이스
class FurnitureFactory {
  createChair() {}
  createSofa() {}
}

// 모던 스타일 가구 공장 (구체적인 팩토리)
class ModernFurnitureFactory extends FurnitureFactory {
  createChair() {
    return new ModernChair();
  }
  createSofa() {
    return new ModernSofa();
  }
}

// 클래식 스타일 가구 공장 (구체적인 팩토리)
class ClassicFurnitureFactory extends FurnitureFactory {
  createChair() {
    return new ClassicChair();
  }
  createSofa() {
    return new ClassicSofa();
  }
}

// 제품 클래스: 모던 스타일 의자와 소파
class ModernChair {
  info() {
    console.log(&quot;This is a modern chair.&quot;);
  }
}

class ModernSofa {
  info() {
    console.log(&quot;This is a modern sofa.&quot;);
  }
}

// 제품 클래스: 클래식 스타일 의자와 소파
class ClassicChair {
  info() {
    console.log(&quot;This is a classic chair.&quot;);
  }
}

class ClassicSofa {
  info() {
    console.log(&quot;This is a classic sofa.&quot;);
  }
}

// 클라이언트 코드: 가구 세트를 만드는 함수
function createFurnitureSet(factory) {
  const chair = factory.createChair();
  const sofa = factory.createSofa();

  chair.info(); // 의자 정보 출력
  sofa.info();  // 소파 정보 출력
}

// 사용 예시
const modernFactory = new ModernFurnitureFactory();
createFurnitureSet(modernFactory);
// 출력: 
// This is a modern chair.
// This is a modern sofa.

const classicFactory = new ClassicFurnitureFactory();
createFurnitureSet(classicFactory);
// 출력: 
// This is a classic chair.
// This is a classic sofa.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/qkraudghgh/clean-code-javascript-ko&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;JS로 읽는 클린코드 (한글판)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://silver-ye.tistory.com/&quot;&gt;https://silver-ye.tistory.com/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/861</guid>
      <comments>https://comp-jae.tistory.com/861#entry861comment</comments>
      <pubDate>Mon, 2 Dec 2024 15:06:02 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #03 : 의미있는 이름</title>
      <link>https://comp-jae.tistory.com/856</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRsujH/btsJ22UpdJa/KxkCDy0pQMBzWVfzr9vhr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRsujH/btsJ22UpdJa/KxkCDy0pQMBzWVfzr9vhr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRsujH/btsJ22UpdJa/KxkCDy0pQMBzWVfzr9vhr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRsujH%2FbtsJ22UpdJa%2FKxkCDy0pQMBzWVfzr9vhr0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.12.01&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2장. 의미있는 이름&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&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;b&gt;의도를 분명히 밝힌다.&lt;/b&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;예를 들어, count 대신 numberOfUsers라는 이름을 사용하면 그 변수가 무엇을 나타내는지 더 명확해진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그릇된 정보를 피한다.&lt;/b&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;예를 들어, 리스트가 아닌데 accountList라는 이름을 사용하면 안 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의미 있게 구분한다.&lt;/b&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;예를 들어 data, info와 같은 단어만으로는 이게 어떤 데이터인지, 어떤 정보인지 알 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;발음하기 쉬운 이름을 사용한다.&lt;/b&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;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;검색하기 쉬운 이름을 사용한다.&lt;/b&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;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;클래스는 명사, 메서드는 동사로 짓는다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스 이름은 명사로, 메서드 이름은 동사로 짓는 것이 좋다. &lt;br /&gt;예를 들어, Customer, Account는 클래스명으로 적합하고, getUserName은 메서드명으로 적합하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;한 개념에 하나의 단어를 사용한다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 개념은 동일한 단어를 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;일관성 있게&lt;span&gt; &lt;/span&gt;&lt;/span&gt;사용 한다. &lt;br /&gt;예를 들어, fetch, retrieve, get을 섞어 쓰지 말고, 하나의 용어로 통일한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;불필요한 맥락을 없앤다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스명이나 함수명에서 불필요한 정보는 뺀다.&lt;br /&gt;예를 들어, GasStationAddress 대신 Address가 더 명확하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많이 듣는 개발자들의 농담 중에 개발보다 변수명 짓는 게 더 어렵다는 이야기가 있다. 이번 챕터는 들어가면서 '이름을 잘 짓는 간단한 규칙' 을 소개하겠다고 한다. 책의 내용대로 함수나 메서드는 동작한다는 것에 집중하면 네이밍이 그나마 편한데 변수는 아직도 어려울 때가 있다. 추후에 변수로 인한 결과물까지 고려하면 처음의 네이밍과 서로 부자연스러운 경우가 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;이 챕터를 한마디로 정리하면&amp;nbsp;&lt;b&gt;함부로 네이밍 하지 마라.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&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;br /&gt;책에서는 코드에 불필요하거나 복잡하거나 불명확한 표현을 덧붙여 해석하기 어렵게 하는 것을 표현하는 것으로도 사용했다.&lt;/li&gt;
&lt;li&gt;Visitor 패턴 : 객체지향 프로그래밍에서 사용하는 디자인 패턴 중 하나로, 객체의 구조를 변경하지 않으면서 새로운 기능을 추가할 수 있게 해 준다. 상속과 오버라이드를 활용한 방법이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1728731181645&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 부모 클래스
class Shape {
  getPerimeter() {
    console.log('Shape의 둘레를 계산합니다.');
  }
}

// 자식 클래스 (오버라이드)
class Circle extends Shape {
  constructor(radius) {
    super(); // 부모 클래스의 생성자 호출
    this.radius = radius;
  }

  // 부모 클래스의 getPerimeter 메서드를 오버라이드
  getPerimeter() {
    const perimeter = 2 * Math.PI * this.radius;
    return perimeter.toFixed(2)
  }
}

// 또 다른 자식 클래스 (오버라이드)
class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }

  // 부모 클래스의 getPerimeter 메서드를 오버라이드
  getPerimeter() {
    const perimeter = 2 * (this.width + this.height);
    return perimeter
  }
}

// 사용 예시
const circle = new Circle(5);
const rectangle = new Rectangle(4, 6);

// 각각의 클래스에서 오버라이드된 getPerimeter가 호출된다.
console.log(&quot;Circle의 둘레: &quot;, circle.getPerimeter());      // Circle의 둘레: 31.42
console.log(&quot;Rentangle의 둘레: &quot;, rectangle.getPerimeter());   // Rectangle의 둘레: 20&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;JobQueue : 비동기 작업을 처리하는 대기열로, Task Queue(setTimeout, setInterval, DOM 이벤트와 같은 콜백 함수를 처리)보다 우선순위가 높은 마이크로태스크(Microtasks)(Promise의 then, catch 등)가 대기하는 큐이다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1728731311504&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log('1. Script start');

// Tast Queue
setTimeout(() =&amp;gt; {
  console.log('4. SetTimeout callback');
}, 0);

// Micro Queue
Promise.resolve().then(() =&amp;gt; {
  console.log('3. Promise then');
});

console.log('2. Script end');&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/qkraudghgh/clean-code-javascript-ko&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;JS로 읽는 클린코드 (한글판)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://silver-ye.tistory.com/category/%EA%B3%B5%EB%B6%80/%EB%85%B8%EA%B0%9C%EB%B6%81&quot;&gt;https://silver-ye.tistory.com/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt; ️ &lt;b&gt;과제&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wtxWL/btsJ4gjF2gW/CAdCiQGuf0qNwjg02Jto31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wtxWL/btsJ4gjF2gW/CAdCiQGuf0qNwjg02Jto31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wtxWL/btsJ4gjF2gW/CAdCiQGuf0qNwjg02Jto31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwtxWL%2FbtsJ4gjF2gW%2FCAdCiQGuf0qNwjg02Jto31%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;640&quot; height=&quot;110&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;194&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>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/856</guid>
      <comments>https://comp-jae.tistory.com/856#entry856comment</comments>
      <pubDate>Sun, 1 Dec 2024 14:35:16 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #02 : 깨끗한 코드란</title>
      <link>https://comp-jae.tistory.com/855</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caD9ts/btsJeD8KQDA/4x0ShNYVEIf2IVLo3XwznK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caD9ts/btsJeD8KQDA/4x0ShNYVEIf2IVLo3XwznK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caD9ts/btsJeD8KQDA/4x0ShNYVEIf2IVLo3XwznK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaD9ts%2FbtsJeD8KQDA%2F4x0ShNYVEIf2IVLo3XwznK%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.11.30&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추천사 ~ 1장. 깨끗한 코드&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;✔ 책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TPM 5S철학으로 코드 바라보기
&lt;ol style=&quot;list-style-type: 1;&quot; data-ke-list-type=&quot;1&quot;&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;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;ol style=&quot;list-style-type: 1;&quot; data-ke-list-type=&quot;1&quot;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;나쁜 코드를 짜는 이유
&lt;ol style=&quot;list-style-type: 1;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;일정이 촉박하다.&lt;/span&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;li&gt;빨리 업무를 끝내는 방법은 코드를 최대한 깨끗하게 유지하는 습관이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클린 코드
&lt;ol style=&quot;list-style-type: 1;&quot; data-ke-list-type=&quot;decimal&quot;&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;li&gt;르블랑의 법칙(나중은 결코 오지 않는다)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;아직은 '클린코드' 보다는 '돌아가는 코드'를 만드는 게 우선이지만 여러 번 협업을 경험하면서 팀원의 코드에 따라 개발 속도가 확연히 달라지는 것을 경험했다. 그래서 내게 있어 클린코드를 읽고 공부하고 연습하는 이유는 &lt;b&gt;내 코드가 다른 사람에게 방해가 되지 않기를&lt;/b&gt; 바라기 때문이다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KRSWt/btsJ4MWDMm3/QAwha0vrkxUTFk7UBwLLEk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KRSWt/btsJ4MWDMm3/QAwha0vrkxUTFk7UBwLLEk/img.webp&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;432&quot; data-is-animation=&quot;false&quot; style=&quot;width: 26.4912%; margin-right: 10px;&quot; data-widthpercent=&quot;27.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KRSWt/btsJ4MWDMm3/QAwha0vrkxUTFk7UBwLLEk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKRSWt%2FbtsJ4MWDMm3%2FQAwha0vrkxUTFk7UBwLLEk%2Fimg.webp&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;432&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tf3dk/btsJ2XMHIP3/1wxzkplVaGaPLQCoAcxqWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tf3dk/btsJ2XMHIP3/1wxzkplVaGaPLQCoAcxqWK/img.png&quot; data-origin-width=&quot;543&quot; data-origin-height=&quot;301&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;36.7&quot; style=&quot;width: 35.8424%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tf3dk/btsJ2XMHIP3/1wxzkplVaGaPLQCoAcxqWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftf3dk%2FbtsJ2XMHIP3%2F1wxzkplVaGaPLQCoAcxqWK%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;543&quot; height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bguBqa/btsJ4uBQpyW/vshCX0qmVaX5darU5TSyt1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bguBqa/btsJ4uBQpyW/vshCX0qmVaX5darU5TSyt1/img.jpg&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;461&quot; data-is-animation=&quot;false&quot; style=&quot;width: 35.3408%;&quot; data-widthpercent=&quot;36.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bguBqa/btsJ4uBQpyW/vshCX0qmVaX5darU5TSyt1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbguBqa%2FbtsJ4uBQpyW%2FvshCX0qmVaX5darU5TSyt1%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;820&quot; height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;'코딩 책 한 권만 읽으면 이렇게 됩니다' 라는 제목의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;코딩애플 유튜브에서는 클린코드를 예시로 책 한권 읽고 이를 &lt;b&gt;종교처럼&lt;/b&gt; 떠받들면서 다른 사람에게 &lt;b&gt;강요하면 안된다&lt;/b&gt;는 내용이다. 책을 읽으면서 이를 &lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;직접 '생각'해 보고 '의심'해 보면서 학습하기를 권유한다.&lt;/span&gt; &lt;br /&gt;살아가면서 느끼는 부분이지만 '절대'인 것은 없다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;상황에 따라 유연한 사고를 할 줄 아는 것도 협업에서는 중요한 것이다.&lt;span&gt; 그래서 나는 이 책을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt; 통해 기술을 습득해서 다른 사람에게 이렇게 해야 한다 강요하는 사람이 되고 싶지는 않다. 다만, 클린코드가 무엇인지 배우고, 숙달이 된다면. 내가 기존의 코드를 더 클린 하게 만들 수 있다면 &lt;b&gt;더 나은 방향을 직접 제시할 수 있는 사람이고 싶다&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt; &lt;span&gt; &lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000; text-align: start;&quot;&gt;궁금한&amp;nbsp;내용이&amp;nbsp;있거나,&amp;nbsp;잘&amp;nbsp;이해되지&amp;nbsp;않는&amp;nbsp;내용이&amp;nbsp;있다면&amp;nbsp;적어보세요.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;휴리스틱(heuristic) : 경험에 기반해 어림잡아 판단하는 것. 기계와는 다른 인간의 특성이다.&lt;/li&gt;
&lt;li&gt;스크럼(scrum) : 애자일(Agile) 방법론 중 하나로, 소프트웨어 개발 프로젝트 관리에 많이 사용한다. 스프린트를 반복하며 점진적으로 개발한다.&lt;/li&gt;
&lt;li&gt;스프린트(sprint) : 2~4주 사이의 짧은 개발 주기로, 각 스프린트에서 팀은 구현 가능한 기능을 완료하는 것을 목표로 한다. 스프린트가 끝나면 다음 스프린트로 이어진다.&lt;/li&gt;
&lt;li&gt;린(lean) : 개발에서 린이란 불필요한 코드를 작성하지 않고, 고객이 원하는 기능을 빠르고 효율적으로 제공하는 것을 목표로 하는 방식이다. 반복적인 개선, 피드백, 낭비 제거가 중요한 요소이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;  참고자료&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/qkraudghgh/clean-code-javascript-ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;JS로 읽는 클린코드 (한글판)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://silver-ye.tistory.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://silver-ye.tistory.com/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&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;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/855</guid>
      <comments>https://comp-jae.tistory.com/855#entry855comment</comments>
      <pubDate>Sat, 30 Nov 2024 21:56:07 +0900</pubDate>
    </item>
    <item>
      <title>클린코드 Assignment #01 : 구매인증</title>
      <link>https://comp-jae.tistory.com/853</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXqQsE/btsJdnrJwvC/opuMRbPK7XpRyYj5v1qbl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXqQsE/btsJdnrJwvC/opuMRbPK7XpRyYj5v1qbl0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXqQsE/btsJdnrJwvC/opuMRbPK7XpRyYj5v1qbl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXqQsE%2FbtsJdnrJwvC%2FopuMRbPK7XpRyYj5v1qbl0%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;400&quot; height=&quot;527&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;노개북 클린코드&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;노개북은 '노마드 개발자 북클럽' 의 약자로 노마드코더에서 진행하는 챌린지다. &lt;br /&gt;한동안 '개발자라면 OOO는 읽어야 된다' 카더라로 구매해놓은 책이었는데 &lt;br /&gt;지금 생각해보면 당시에 읽기는 너무 난이도가 높았다..;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;챌린지 진행 방식&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;챌린지는 책의 핵심 부분만 함께 읽는 것이 목표다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #ffffff; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;(1) 읽어요&lt;/b&gt; : 아래 스케쥴을 보고. 그날의 할당치를 읽는다. 미션/퀴즈가 있을 시 이를 수행한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;(2) 쓰세요&lt;/b&gt;&amp;nbsp;:&amp;nbsp;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://nomadcoders.co/faq/challenge/book-til&quot;&gt;TIL 작성방법&lt;/a&gt; 을 참고하여, 독서기록을 작성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;(3) 공유해요&lt;/b&gt; : 작성한 TIL 혹은 미션 완수 링크를 제출하고. 슬랙에 공유한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;미션 : 책 구매 인증&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oPsxl/btsJfj1V43x/j93tRtMSBk81Qqi30SLQE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oPsxl/btsJfj1V43x/j93tRtMSBk81Qqi30SLQE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oPsxl/btsJfj1V43x/j93tRtMSBk81Qqi30SLQE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoPsxl%2FbtsJfj1V43x%2Fj93tRtMSBk81Qqi30SLQE1%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;640&quot; height=&quot;271&quot; data-origin-width=&quot;1670&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #ffffff; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;무려 22년 구매내역이다.. (&lt;s&gt;2년을 묵혀뒀네..)&lt;br /&gt;&lt;/s&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 기회에 다 읽어내도록 하겠다! 화이팅!!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>도서/클린코드(Clean Code)</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/853</guid>
      <comments>https://comp-jae.tistory.com/853#entry853comment</comments>
      <pubDate>Sat, 30 Nov 2024 02:02:55 +0900</pubDate>
    </item>
    <item>
      <title>윈도우 옛날 프로그램 해상도 작아지는 현상 해결하기</title>
      <link>https://comp-jae.tistory.com/919</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;윈도우 옛날 프로그램 해상도 작아지는 현상&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랫동안&amp;nbsp;윈도우&amp;nbsp;7에서&amp;nbsp;사용해&amp;nbsp;오던&amp;nbsp;프로그램이&amp;nbsp;있다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;최근 윈도우 11에서 오랜만에 다시 설치해 실행해 보니, 텍스트가 너무 작게 표시되고, 크기 조절도 되지 않아 불편했다.&amp;nbsp;&amp;nbsp; &lt;br /&gt;몇&amp;nbsp;번은&amp;nbsp;그냥&amp;nbsp;참고&amp;nbsp;사용했지만,&amp;nbsp;나중을&amp;nbsp;위해서라도&amp;nbsp;해결할&amp;nbsp;필요가&amp;nbsp;있겠다&amp;nbsp;싶어&amp;nbsp;GPT의&amp;nbsp;도움을&amp;nbsp;받아&amp;nbsp;문제를&amp;nbsp;해결하고&amp;nbsp;기록을&amp;nbsp;남긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 &lt;b&gt;구형 프로그램이 고해상도 디스플레이 환경에서 적절하게 동작하지 않는 경우&lt;/b&gt;로 고해상도 DPI 설정을 조정하여 프로그램의 크기와 텍스트를 조정할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해결 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 해당 프로그램의 실행 파일을 우클릭&lt;/b&gt;하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;속성&quot;&lt;/b&gt;을 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;1296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/comH0z/btsKfNIaxIb/p3yhKp0nlakGM3Tx6Ama30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/comH0z/btsKfNIaxIb/p3yhKp0nlakGM3Tx6Ama30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/comH0z/btsKfNIaxIb/p3yhKp0nlakGM3Tx6Ama30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcomH0z%2FbtsKfNIaxIb%2Fp3yhKp0nlakGM3Tx6Ama30%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;537&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;1296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 속성 창에서&amp;nbsp;&lt;b&gt;&quot;호환성&quot;&lt;/b&gt;&amp;nbsp;탭으로 이동한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YzjZc/btsKfyEvJbS/CbTJdFfG7PTJWNKmjkYok0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YzjZc/btsKfyEvJbS/CbTJdFfG7PTJWNKmjkYok0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YzjZc/btsKfyEvJbS/CbTJdFfG7PTJWNKmjkYok0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYzjZc%2FbtsKfyEvJbS%2FCbTJdFfG7PTJWNKmjkYok0%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;394&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;634&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;3.&lt;b&gt; &quot;높은 DPI 설정 변경&quot;&lt;/b&gt; 버튼을 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VjvZS/btsKfp1XgSo/0fGDQPVcS7BVsBMbSAOCGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VjvZS/btsKfp1XgSo/0fGDQPVcS7BVsBMbSAOCGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VjvZS/btsKfp1XgSo/0fGDQPVcS7BVsBMbSAOCGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVjvZS%2FbtsKfp1XgSo%2F0fGDQPVcS7BVsBMbSAOCGK%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;629&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 열리는 창에서 &lt;b&gt;&quot;높은 DPI 조정 동작을 재정의&quot;&lt;/b&gt; 옵션을 체크한 후, &lt;b&gt;&quot;시스템(고급)&quot;&lt;/b&gt;으로 설정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHheKc/btsKeFq4sZG/GaU1OOTSGqUrwt3JotIw90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHheKc/btsKeFq4sZG/GaU1OOTSGqUrwt3JotIw90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHheKc/btsKeFq4sZG/GaU1OOTSGqUrwt3JotIw90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHheKc%2FbtsKeFq4sZG%2FGaU1OOTSGqUrwt3JotIw90%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;521&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 설정을 저장한 후 프로그램을 다시 실행하면 해상도에 맞춰 조정된 프로그램을 사용할 수 있다.&lt;/p&gt;</description>
      <category>etc</category>
      <category>dpi</category>
      <category>Windows</category>
      <category>옛날 프로그램 해상도</category>
      <category>윈도우</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/919</guid>
      <comments>https://comp-jae.tistory.com/919#entry919comment</comments>
      <pubDate>Tue, 22 Oct 2024 15:34:11 +0900</pubDate>
    </item>
    <item>
      <title>압축풀기를 완료할 수 없습니다 압축폴더가 올바르지 않습니다.</title>
      <link>https://comp-jae.tistory.com/867</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;압축풀기를 완료할 수 없습니다 압축폴더가 올바르지 않습니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgkGSY/btsJm3zIu3r/nZvJy6Z0l8jXfgUJaNzv61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgkGSY/btsJm3zIu3r/nZvJy6Z0l8jXfgUJaNzv61/img.png&quot; data-alt=&quot;압축풀기를 완료할 수 없습니다 오류 메시지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgkGSY/btsJm3zIu3r/nZvJy6Z0l8jXfgUJaNzv61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgkGSY%2FbtsJm3zIu3r%2FnZvJy6Z0l8jXfgUJaNzv61%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; alt=&quot;압축풀기를 완료할 수 없습니다 오류 메시지&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;281&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;압축풀기를 완료할 수 없습니다 오류 메시지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 드라이브에서 알고리즘 관련 압축파일을 하나공유 받았는데 윈도우의 기본 압축풀기 버튼을 누르면 오류가 발생했다.&lt;br /&gt;처음에는 용량이 323KB였기 때문에 압축파일이 손실되었거나 잘못된 파일이라 생각했다.&lt;br /&gt;그런데 나 빼고는 모두 정상적으로 압축을 풀었다고.. (으잉..?) 결론은&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;874&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcrZOu/btsJmu5BSxK/NT0rRb6YKmvroqxglUmGLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcrZOu/btsJmu5BSxK/NT0rRb6YKmvroqxglUmGLk/img.png&quot; data-alt=&quot;한빛출판네트워크 동일사례에 대한 설명&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcrZOu/btsJmu5BSxK/NT0rRb6YKmvroqxglUmGLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcrZOu%2FbtsJmu5BSxK%2FNT0rRb6YKmvroqxglUmGLk%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; alt=&quot;한빛출판네트워크 동일사례에 대한 설명&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;506&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;874&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;한빛출판네트워크 동일사례에 대한 설명&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mac 운영체제에서 압축한 파일이라 윈도우 기본 압축프로그램으로 풀리지 않았다. &lt;br /&gt;윈도우 10 이하 버전의 탐색기에서 주로 발생한다고 하는데 난 윈도우 11인데 왜..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 찾아보니 UTF-8을 지원하지 않는 압축프로그램으로 해제를 시도하면 발생하는 오류라고 한다.&lt;br /&gt;(윈도우 실망ㅡㅜ)&lt;br /&gt;uft-8에 해당하는 문자가 폴더나 파일명에 포함되어 있으면 오류가 발생한다고..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;반디집으로 압축해제&lt;/u&gt;하니 무사히 압축해제가 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://kr.bandisoft.com/bandizip/&quot;&gt;반디집 다운로드 바로가기&lt;/a&gt;&lt;br /&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://www.altools.co.kr/download/alzip.aspx&quot;&gt;알집 다운로드 바로가기&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고자료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;a title=&quot;네이버 블로그&quot; href=&quot;https://blog.naver.com/cite_0/222254173902&quot;&gt;네이버 블로그 일상잡기&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://support.hanbit.co.kr/hc/ko/articles/360040279372-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%ED%95%9C-%ED%8C%8C%EC%9D%BC%EC%9D%B4-%EC%95%95%EC%B6%95%ED%95%B4%EC%A0%9C%EA%B0%80-%EB%90%98%EC%A7%80-%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;한빛 네트워크&lt;/a&gt;&lt;/p&gt;</description>
      <category>etc</category>
      <category>압축폴더가 올바르지 않습니다.</category>
      <category>압축풀기를 완료할 수 없습니다</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/867</guid>
      <comments>https://comp-jae.tistory.com/867#entry867comment</comments>
      <pubDate>Mon, 2 Sep 2024 14:22:01 +0900</pubDate>
    </item>
    <item>
      <title>구글 검색 효과적으로 하는 법</title>
      <link>https://comp-jae.tistory.com/850</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저작권 문제가 발생할 수 있어 기사 링크만 기록합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기사 원문 : &lt;a href=&quot;https://www.itworld.co.kr/news/280537&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.itworld.co.kr/news/280537&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1724299179287&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;&amp;ldquo;이것만 알면 검색왕&amp;rdquo; 효과적인 구글 검색을 위한 10가지 팁&quot; data-og-description=&quot;쇼핑할 때나 자료 조사를 할 때, 친구와의 논쟁을 끝내려고 할 때 대부분 사람은 구글을 가장 먼저 찾는다. 하지만 수십억 개의 검색 결과 중에서&quot; data-og-host=&quot;www.itworld.co.kr&quot; data-og-source-url=&quot;https://www.itworld.co.kr/news/280537&quot; data-og-url=&quot;https://www.itworld.co.kr/news/280537&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jdCVc/hyWSmx9ZmA/jH99O1enHXzO15eOqDnQB1/img.jpg?width=853&amp;amp;height=480&amp;amp;face=0_79_293_398,https://scrap.kakaocdn.net/dn/bfwGmy/hyWSbpSKVm/7lDmoKxKRapSPUHjBuzZv0/img.jpg?width=853&amp;amp;height=480&amp;amp;face=0_79_293_398&quot;&gt;&lt;a href=&quot;https://www.itworld.co.kr/news/280537&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.itworld.co.kr/news/280537&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jdCVc/hyWSmx9ZmA/jH99O1enHXzO15eOqDnQB1/img.jpg?width=853&amp;amp;height=480&amp;amp;face=0_79_293_398,https://scrap.kakaocdn.net/dn/bfwGmy/hyWSbpSKVm/7lDmoKxKRapSPUHjBuzZv0/img.jpg?width=853&amp;amp;height=480&amp;amp;face=0_79_293_398');&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;&amp;ldquo;이것만 알면 검색왕&amp;rdquo; 효과적인 구글 검색을 위한 10가지 팁&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.itworld.co.kr&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;</description>
      <category>etc</category>
      <category>구글 검색 방법</category>
      <category>효과적인 검색 방법</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/850</guid>
      <comments>https://comp-jae.tistory.com/850#entry850comment</comments>
      <pubDate>Thu, 22 Aug 2024 13:19:12 +0900</pubDate>
    </item>
    <item>
      <title>개발자 블로그 꼭 해야하나.</title>
      <link>https://comp-jae.tistory.com/833</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;블로그를 어떻게 활용할지 생각중이다. 20년도만 해도 신입개발자를 목표로 한다면 &lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://wayhome25.github.io/&quot;&gt;초보몽키&lt;/a&gt;님의 블로그를 참고하는 것이 대세였다. 일기 형식의 TIL로 성향을 알 수 있고, 공부내용을 기록함으로써 기술에 대한 관심과 역량도 알 수 있기 때문이었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHpjZ7/btsITiCLcof/v3QmGlv9LXWr9IwH0v5Cpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHpjZ7/btsITiCLcof/v3QmGlv9LXWr9IwH0v5Cpk/img.png&quot; data-alt=&quot;출처 : https://wayhome25.github.io/til/2017/04/17/TIL/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHpjZ7/btsITiCLcof/v3QmGlv9LXWr9IwH0v5Cpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHpjZ7%2FbtsITiCLcof%2Fv3QmGlv9LXWr9IwH0v5Cpk%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;640&quot; height=&quot;482&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1638&quot; data-origin-height=&quot;1234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://wayhome25.github.io/til/2017/04/17/TIL/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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;blob&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;1162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vjg07/btsISH392QI/orCysWXnkgTEnqAQNdaAq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vjg07/btsISH392QI/orCysWXnkgTEnqAQNdaAq0/img.png&quot; data-alt=&quot;출처 : https://wayhome25.github.io/javascript/2017/02/24/js-coding-style/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vjg07/btsISH392QI/orCysWXnkgTEnqAQNdaAq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVjg07%2FbtsISH392QI%2ForCysWXnkgTEnqAQNdaAq0%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;640&quot; height=&quot;444&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;1162&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://wayhome25.github.io/javascript/2017/02/24/js-coding-style/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 대부분 비공개 처리했지만 나도 배운대로 똑같이 했다. HTML 태그 하나하나에 대해서 글을 쓴 적도 있었다.(..?) 아니. 하다보니 욕심이 생겨서 글 뿐만 아니라 이미지도 집어넣었고, 링크에 링크를 타고 조사를 하다가 글 하나 쓰는데 5시간 가까이 소요된 적도 있었다. 사실 지금 이 글도 1시간째 쓰고 있는 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b823n7/btsITiQiK0p/nGjsIQtB78D972kbMicQ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b823n7/btsITiQiK0p/nGjsIQtB78D972kbMicQ2K/img.png&quot; data-alt=&quot;100달러 벌었다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b823n7/btsITiQiK0p/nGjsIQtB78D972kbMicQ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb823n7%2FbtsITiQiK0p%2FnGjsIQtB78D972kbMicQ2K%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;640&quot; height=&quot;145&quot; data-origin-width=&quot;2070&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;100달러 벌었다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 꾸준히 일정한 형식으로 글을 썼더니 애드센스도 한번에 통과했고, 이왕 애드센스를 붙였으니 검색엔진 상위에 위치시켜보자 라는 생각으로 GA와 네이버 서치 어드바이저에 블로그 정보를 등록했다. 지금 생각해보면 GA와 네이버 서치 어드바이저를 등록한 것을 블로그에 기록했어야 하는데 다른 블로그 보고 따라 등록하기 바빠서 정작 이건 기록하지 않았다-_.. 어쨌든 한창 부트캠프 열풍이 불고 있던지라 알고리즘을 타서 100달러 벌었다.(물론 지금은 해당 글도 내렸다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속 뒀다면 소소하게 더 벌었겠지만 현타가 왔다. 본질에 집중해야 하는데 잿밥에 관심을 더 두는 상황이랄까..? 직장을 다니면서 야간에 개발공부를 하는데 블로그 글 하나를 2~3시간씩 쓰니 부트캠프 일정은 따라가기 어려웠고 정작 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;부트캠프 경험담에 방문자가 몰리는 상황은 아이러니했다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_예시4.png&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpllfD/btsISLSWm4n/Fb0kLhwNiXNPcRPgCkAhc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpllfD/btsISLSWm4n/Fb0kLhwNiXNPcRPgCkAhc0/img.png&quot; data-alt=&quot;출처 : https://daco2020.tistory.com/361&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpllfD/btsISLSWm4n/Fb0kLhwNiXNPcRPgCkAhc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpllfD%2FbtsISLSWm4n%2FFb0kLhwNiXNPcRPgCkAhc0%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;640&quot; height=&quot;488&quot; data-filename=&quot;edited_예시4.png&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1176&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://daco2020.tistory.com/361&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후로 대부분의 글을 비공개 처리했다. 글을 쓰다보면 '이건 너무 TMI다.' , '이건 너무 쉬운 내용인데?' 같은 경우도 있어서 퇴고를 거듭하다 중단된 경우도 있고, '노션에 썼는데 또?', '깃헙에 올려놨는데 블로그에 또 굳이?' 와 같이 여러군데 같은 내용을 의무적으로 기록하면서 허무한 경우도 있었다. 간단한 코드나 라이브러리 사용방법 등은 '요즘 GPT가 잘 대답해주는데 블로그까지 찾아와서 보는 사람이 있을까?' 같은 생각이 들어서 쓰다가 말았다. 즉, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;내 블로그는 현재 상당히 많은 글들이 비공개처리 당해 숨겨져 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&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-origin-width=&quot;1566&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BNwr9/btsITPunegp/aRyK3dMJFIkq37saQSJ5NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BNwr9/btsITPunegp/aRyK3dMJFIkq37saQSJ5NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BNwr9/btsITPunegp/aRyK3dMJFIkq37saQSJ5NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBNwr9%2FbtsITPunegp%2FaRyK3dMJFIkq37saQSJ5NK%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;540&quot; height=&quot;284&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;824&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;막말로 요즘은 모르는건 GPT한테 물어보면 바로 답을 얻을 수 있기 때문에 블로그는 GPT가 할루시네이션으로 답변하거나 최신 자료라 답변하지 못했던 기술, 한번에 답을 얻기 어려웠던 내용을 기록하는 학습 기록 카테고리를 생각했다. 여러가지 생각이나 잡답을 기록하는 &lt;/span&gt;TMI와 &lt;s&gt;TIL(을 가장한 개인 백로그)&lt;/s&gt; 그리고 일부 &lt;s&gt;자격증 공부내용을 기록&lt;/s&gt;하는 카테고리도 필요할 것 같아서 카테고리를 다시 정리했다. (백로그가 뭔가를 한 건 아니니까 TIL도 다시 수정, 자격증 공부 내용도 깃에 따로 올릴까 싶다.) 뭔가 저작권이 문제가 될 것 같은 온라인 강의나 도서 등 모든 학습에 대한 정리는 깃헙에&amp;nbsp; private로 레포를 따로 등록하고 있다. 그런데 공부하기 위해 구매 및 무료 수강 등록한 강의가 너무 많아서(인프런 기준만 약 600개..!) TIL에 다 등록하기도 힘들 지경이라 지워나가도 지워나가도 끝이 없을 것 같지만. 한편으로는 진행하면서 성취감 장난 아닐 것 같다는 기대를 한다. 공부한 이후에 개인적으로 복습하며 구현중에 일부 내용이나 코드는 기록을 남길 것 같다.&lt;/p&gt;</description>
      <category>생각정리</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/833</guid>
      <comments>https://comp-jae.tistory.com/833#entry833comment</comments>
      <pubDate>Thu, 1 Aug 2024 14:04:04 +0900</pubDate>
    </item>
    <item>
      <title>24-07-25</title>
      <link>https://comp-jae.tistory.com/828</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;할 일&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UX/UI&lt;/li&gt;
&lt;li&gt;혼공학습단(혼공스 ~ 24.0&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;8.18&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;SQL 최적화 학습(KDT 오프라인 심화과정. ~ 24.10.08)&lt;/li&gt;
&lt;li&gt;SQLD 시험(8.24 오전 10시)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수험표 출력(&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;8.09 오후 16시 이후)&lt;/span&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;li&gt;데이터 모델과 SQL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SQL 기본 및 활용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL 기본&lt;/li&gt;
&lt;li&gt;SQL 활용&lt;/li&gt;
&lt;li&gt;관리 구문&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ADSP 시험(8.10 오전 10시)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수험표 출력(7.26 오후 16시 이후)&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;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;/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;li&gt;빅데이터의 가치와 영향&lt;/li&gt;
&lt;li&gt;비즈니스 모델&lt;/li&gt;
&lt;li&gt;위기 요인과 통제 방안&lt;/li&gt;
&lt;li&gt;미래의 빅데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;가치 창조를 위한 데이터 사이언스와 전략 인사이트&lt;/span&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;/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;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;데이터분석 기획의 이해&lt;/span&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;li&gt;분석 프로젝트 관리 방안&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;분석 마스터 플랜&lt;/span&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #fbfdfd; color: #212529; text-align: center;&quot;&gt;데이터분석&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;R기초와 데이터 마트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;R기초&lt;/li&gt;
&lt;li&gt;데이터 마트&lt;/li&gt;
&lt;li&gt;결측값 처리와 이상값 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;통계분석&lt;/span&gt;&lt;/span&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;li&gt;시계열 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;정형 데이터 마이닝&lt;/span&gt;&lt;/span&gt;&lt;/span&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;분류분석(Classification)&lt;/li&gt;
&lt;li&gt;군집분석(Clustering)&lt;/li&gt;
&lt;li&gt;연관분석(Association Analysis)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프리온보딩 챌린지 git에 정리 기록하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프리온보딩 프론트엔드 7월 챌린지(10.15)&lt;/li&gt;
&lt;li&gt;프리온보딩 AI 7월 챌린지(10.15)&lt;/li&gt;
&lt;li&gt;프리온보딩 프론트엔드 챌린지 6월 챌린지(9.15)&lt;/li&gt;
&lt;li&gt;프리온보딩 백엔드 챌린지 6월 챌린지(9.15)&lt;/li&gt;
&lt;li&gt;프리온보딩 프론트엔드 챌린지 5월 챌린지(8.15)&lt;/li&gt;
&lt;li&gt;&lt;s&gt;프리온보딩 프론트엔드 4월 챌린지&amp;nbsp;&lt;/s&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;웹디자인 기능사 시험(8.30 오전 08:30)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출제기준 A
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A-1&lt;/li&gt;
&lt;li&gt;A-2&lt;/li&gt;
&lt;li&gt;A-3&lt;/li&gt;
&lt;li&gt;A-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출제기준 B
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;B-1&lt;/li&gt;
&lt;li&gt;B-2&lt;/li&gt;
&lt;li&gt;B-3&lt;/li&gt;
&lt;li&gt;B-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출제기준 C
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C-1&lt;/li&gt;
&lt;li&gt;C-2&lt;/li&gt;
&lt;li&gt;C-3&lt;/li&gt;
&lt;li&gt;C-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출제기준 D
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;D-1&lt;/li&gt;
&lt;li&gt;D-2&lt;/li&gt;
&lt;li&gt;D-3&lt;/li&gt;
&lt;li&gt;D-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출제기준 E
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;E-1&lt;/li&gt;
&lt;li&gt;E-2&lt;/li&gt;
&lt;li&gt;E-3&lt;/li&gt;
&lt;li&gt;E-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출제기준 F
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;F-1&lt;/li&gt;
&lt;li&gt;F-2&lt;/li&gt;
&lt;li&gt;F-3&lt;/li&gt;
&lt;li&gt;F-4&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;s&gt;섹션 0. Intro (1개 ∙ 12분)&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;섹션 1. 이력서를 작성하기 전에 (4개 ∙ 29분)&lt;/li&gt;
&lt;li&gt;섹션 2. 이력서 작성하기 (8개 ∙ 49분)&lt;/li&gt;
&lt;li&gt;섹션 3. 이력서 작성 후 (3개 ∙ 21분)&lt;/li&gt;
&lt;li&gt;섹션 4. 실제 이력서 개선하기 (3개 ∙ 36분)&lt;/li&gt;
&lt;li&gt;섹션 5. FAQ (2개 ∙ 13분)&lt;/li&gt;
&lt;li&gt;섹션 6. Outro&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: center;&quot;&gt;비전공자를 위한 데이터베이스 입문 - 강진영&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;섹션 1. 데이터와 데이터베이스
&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;li&gt;2. 파일 시스템과 데이터베이스 시스템&lt;/li&gt;
&lt;li&gt;3. MySQL 소개와 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;섹션 2. 좋은 데이터베이스
&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;li&gt;2. 데이터 정제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;섹션 3. 데이터베이스 지도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. ERD 표기법 이해&lt;/li&gt;
&lt;li&gt;2. ERD 그리기&lt;/li&gt;
&lt;li&gt;3. 테이블을 ERD로 변환하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;섹션 4. 데이터관리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. 데이터 처리 표준어: SQL&lt;/li&gt;
&lt;li&gt;2. MySQL 스키마&lt;/li&gt;
&lt;li&gt;3. 데이터 정의서&lt;/li&gt;
&lt;li&gt;4. 데이터 조작어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;섹션 5. 한 테이블에서 데이터 조회
&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;li&gt;2. 데이터를 필터링하는 WHERE 절&lt;/li&gt;
&lt;li&gt;3. 특정 기준으로 데이터를 정렬하는 ORDER BY&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;섹션 6. 여러 테이블에서 데이터 조회&lt;/li&gt;
&lt;li&gt;부록&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&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;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;ul style=&quot;list-style-type: disc; color: #333333; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;프롤로그.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 0. 나의 게으름 연대기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 1. 늘 내가 게으른 이유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 2. 깨어난 후부터 잠들기 전까지, 생활 패턴 바꾸기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 3. 고정 일과를 만들어야 움직인다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 4. 사람은 쉬운 일은 계속 한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 5. 변화는 옷 세 바구니를 버리면서 시작됐다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: left;&quot;&gt;LEVEL 6. 아주 오래된 감정습관 바꾸기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;</description>
      <category>TIL</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/828</guid>
      <comments>https://comp-jae.tistory.com/828#entry828comment</comments>
      <pubDate>Thu, 25 Jul 2024 16:28:13 +0900</pubDate>
    </item>
    <item>
      <title>윈도우11 캡처 도구 활용법</title>
      <link>https://comp-jae.tistory.com/779</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 동영상 캡처&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;동영상캡쳐.png&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X8PZv/btsHSZsgVSQ/oDIqGVSJ2h9ARs6lSUtFK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X8PZv/btsHSZsgVSQ/oDIqGVSJ2h9ARs6lSUtFK0/img.png&quot; data-alt=&quot;빨간색 비디오 버튼을 누르면 동영상 캡처모드가 된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X8PZv/btsHSZsgVSQ/oDIqGVSJ2h9ARs6lSUtFK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8PZv%2FbtsHSZsgVSQ%2FoDIqGVSJ2h9ARs6lSUtFK0%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; alt=&quot;동영상 캡처 버튼을 나타낸 이미지&quot; loading=&quot;lazy&quot; width=&quot;617&quot; height=&quot;319&quot; data-filename=&quot;동영상캡쳐.png&quot; data-origin-width=&quot;617&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;빨간색 비디오 버튼을 누르면 동영상 캡처모드가 된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&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;캡쳐도구 영상1.gif&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bibl5E/btsHTgURNHH/x6aa4FdWvGigsRCJkklpo0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bibl5E/btsHTgURNHH/x6aa4FdWvGigsRCJkklpo0/img.gif&quot; data-alt=&quot;동영상 캡처&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bibl5E/btsHTgURNHH/x6aa4FdWvGigsRCJkklpo0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bibl5E/btsHTgURNHH/x6aa4FdWvGigsRCJkklpo0/img.gif&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;1154&quot; height=&quot;168&quot; data-filename=&quot;캡쳐도구 영상1.gif&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동영상 캡처&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 범위를 지정하고 영상을 간단하게&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;녹화할&lt;/span&gt;&lt;/span&gt;&amp;nbsp;수 있다.&lt;br /&gt;프로젝트 후 ppt 제작시 기능을 영상으로 만들어야 할 때 편리함.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡쳐2.png&quot; data-origin-width=&quot;1829&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJKLuf/btsHUOQaZzq/Hv5d3gIHFk0XZk3MUrxukK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJKLuf/btsHUOQaZzq/Hv5d3gIHFk0XZk3MUrxukK/img.png&quot; data-alt=&quot;우측 상단에 Clipchamp에서 편집 버튼이 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJKLuf/btsHUOQaZzq/Hv5d3gIHFk0XZk3MUrxukK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJKLuf%2FbtsHUOQaZzq%2FHv5d3gIHFk0XZk3MUrxukK%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; alt=&quot;Clipchamp 버튼 위치 안내 이미지&quot; loading=&quot;lazy&quot; width=&quot;1829&quot; height=&quot;441&quot; data-filename=&quot;캡쳐2.png&quot; data-origin-width=&quot;1829&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우측 상단에 Clipchamp에서 편집 버튼이 있다.&lt;/figcaption&gt;
&lt;/figure&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;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. gif 변환&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우측 상단의 Clipchamp에서 편집 버튼을 누르면 윈도우 내장 프로그램인 Clipchamp로 연동되는데 영상 편집이나 gif로 변환 저장할 수 있다.(그런데 화질이..)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;어도비 익스프레스 convert to gif 링크&quot; href=&quot;https://new.express.adobe.com/tools/convert-to-gif&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;어도비 익스프레스&lt;/a&gt;가 무료이면서 성능이 훨씬 좋아서 그냥 어도비를 쓰고 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 이미지 캡처&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_기본형1.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btdaZ1/btsHUPuMhWh/6NokPd4b0ZyA6CurHovL3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btdaZ1/btsHUPuMhWh/6NokPd4b0ZyA6CurHovL3K/img.png&quot; data-alt=&quot;기본 결과화면. 좌측 하단부터 순서대로 볼펜, 형광펜, 지우개 아이콘이 배치되어 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btdaZ1/btsHUPuMhWh/6NokPd4b0ZyA6CurHovL3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtdaZ1%2FbtsHUPuMhWh%2F6NokPd4b0ZyA6CurHovL3K%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;500&quot; height=&quot;338&quot; data-filename=&quot;edited_기본형1.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 결과화면. 좌측 하단부터 순서대로 볼펜, 형광펜, 지우개 아이콘이 배치되어 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지는 캡처시 위와 같이 다른 결과화면이 나타난다.&lt;br /&gt;좌측 하단의 툴 아이콘으로 이미지에 바로 표기를 할 수 있다.&lt;br /&gt;그리고 &lt;b&gt;캡처도구 창에서 Ctrl + C를 누르면 클립보드에 저장&lt;/b&gt;되고,&lt;br /&gt;노션이나 캔바, 티스토리 등 웬만한 곳에서는 &lt;b&gt;Ctrl + V시 이미지 첨부버튼을 누르지 않아도 바로 붙여넣기가 된다.(!)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUYK5S/btsJbj98KRS/0Nqm89y0pRInCTTu5eTWEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUYK5S/btsJbj98KRS/0Nqm89y0pRInCTTu5eTWEK/img.png&quot; data-origin-width=&quot;384&quot; data-origin-height=&quot;156&quot; data-is-animation=&quot;false&quot; style=&quot;width: 51.8207%; margin-right: 10px;&quot; data-widthpercent=&quot;52.43&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUYK5S/btsJbj98KRS/0Nqm89y0pRInCTTu5eTWEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUYK5S%2FbtsJbj98KRS%2F0Nqm89y0pRInCTTu5eTWEK%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;384&quot; height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9t99m/btsJbffEPDo/peH1HQrW7GPKyEhOmPXlF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9t99m/btsJbffEPDo/peH1HQrW7GPKyEhOmPXlF0/img.png&quot; data-origin-width=&quot;1474&quot; data-origin-height=&quot;660&quot; data-is-animation=&quot;false&quot; width=&quot;640&quot; height=&quot;287&quot; data-widthpercent=&quot;47.57&quot; style=&quot;width: 47.0165%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9t99m/btsJbffEPDo/peH1HQrW7GPKyEhOmPXlF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9t99m%2FbtsJbffEPDo%2FpeH1HQrW7GPKyEhOmPXlF0%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;1474&quot; height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;노마드코더 챌린지 기록하던 중 활용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 README.md 작성할 때도 혹시 몰라서 Ctrl + V 하니 프로젝트 폴더 내에 파일 저장 및 경로 설정까지 알아서 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7ZLZL/btsHUqvtNOV/M8BWm3BQZR5bxqBLFq5MAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7ZLZL/btsHUqvtNOV/M8BWm3BQZR5bxqBLFq5MAK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;785&quot; data-filename=&quot;자르기.png&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7ZLZL/btsHUqvtNOV/M8BWm3BQZR5bxqBLFq5MAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7ZLZL%2FbtsHUqvtNOV%2FM8BWm3BQZR5bxqBLFq5MAK%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;1161&quot; height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsmMYs/btsHTUw2wnW/95x76c6C6WLJAkt20m6kl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsmMYs/btsHTUw2wnW/95x76c6C6WLJAkt20m6kl1/img.png&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;785&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsmMYs/btsHTUw2wnW/95x76c6C6WLJAkt20m6kl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsmMYs%2FbtsHTUw2wnW%2F95x76c6C6WLJAkt20m6kl1%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;1161&quot; height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;이미지 자르기, 그림판 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 이미지 편집&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하단에 자르기 버튼을 누르면 해당 이미지의 상하좌우 중 불필요한 부분을 잘라낼 수 있다.&amp;nbsp;&lt;br /&gt;좀 더 디테일한 편집이 필요하다면 우측 상단의 그림판 아이콘을 누른다.&lt;br /&gt;캡처한 이미지를 바로 편집할 수 있게 그림판과 연동된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. 텍스트 추출(★)&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byqsVm/btsHVaMbmyi/HAF6ar9N4uBTmrJvOClMgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byqsVm/btsHVaMbmyi/HAF6ar9N4uBTmrJvOClMgk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;785&quot; data-filename=&quot;텍스트인식.png&quot; style=&quot;width: 49.2394%; margin-right: 10px;&quot; data-widthpercent=&quot;49.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byqsVm/btsHVaMbmyi/HAF6ar9N4uBTmrJvOClMgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyqsVm%2FbtsHVaMbmyi%2FHAF6ar9N4uBTmrJvOClMgk%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;1161&quot; height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lzzVD/btsHS7XRF8W/LKyRNHFkKjbvhnGxZcSuPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lzzVD/btsHS7XRF8W/LKyRNHFkKjbvhnGxZcSuPk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;780&quot; data-filename=&quot;복사방지 블로그 추출.png&quot; style=&quot;width: 49.5978%;&quot; data-widthpercent=&quot;50.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lzzVD/btsHS7XRF8W/LKyRNHFkKjbvhnGxZcSuPk/img.png&quot; alt=&quot;텍스트 추출 버튼 위치와 결과 설명&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlzzVD%2FbtsHS7XRF8W%2FLKyRNHFkKjbvhnGxZcSuPk%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;1162&quot; height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;텍스트 추출 버튼 위치와 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 추출버튼이 캡처도구에 기본 내장되어 있다. &lt;br /&gt;OpenAI의 최대 투자자인 마이크로소프트답게 AI에 진심임.&lt;br /&gt;이미지 출처는 &lt;a title=&quot;복사방지를 해제하는 방법에 대해 복사방지를 걸어놓은 블로그 글 링크&quot; href=&quot;https://100x100.tistory.com/entry/%ED%81%AC%EB%A1%AC%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%A7%88%EC%9A%B0%EC%8A%A4-%EC%9A%B0%ED%81%B4%EB%A6%AD-%EB%93%9C%EB%9E%98%EA%B7%B8-%EB%B3%B5%EC%82%AC%EB%B0%A9%EC%A7%80-%ED%95%B4%EC%A0%9C-%EB%8B%A8%EC%B6%95%EA%B8%B0%ED%95%B4%EC%A0%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;복사방지를 해제하는 방법에 대해 복사방지를 걸어놓은 블로그 글&lt;/a&gt; 이며 해당 블로그의 텍스트를 추출해봤다.&lt;br /&gt;공부하다 보면 복사방지 글의 내용을 별도로 기록하고 싶을 때가 있는데 이 때 유용하게 사용하고 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 눈금자, 각도기&lt;/b&gt;&lt;/h3&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&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rLefU/btsHUfOsUXa/P3lxshNusR8pLmM8Ob47sk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rLefU/btsHUfOsUXa/P3lxshNusR8pLmM8Ob47sk/img.gif&quot; data-is-animation=&quot;true&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;244&quot; data-filename=&quot;자 각도기.gif&quot; style=&quot;width: 49.511%; margin-right: 10px;&quot; data-widthpercent=&quot;50.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rLefU/btsHUfOsUXa/P3lxshNusR8pLmM8Ob47sk/img.gif&quot; alt=&quot;눈금자로 밑줄을 직선으로 긋는 이미지&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrLefU%2FbtsHUfOsUXa%2FP3lxshNusR8pLmM8Ob47sk%2Fimg.gif&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;592&quot; height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F6AqC/btsHUnMg0nJ/OoekVkHhxuVTAl4z7naITk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F6AqC/btsHUnMg0nJ/OoekVkHhxuVTAl4z7naITk/img.gif&quot; data-is-animation=&quot;true&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;326&quot; data-filename=&quot;자 각도기 (1).gif&quot; style=&quot;width: 49.3262%;&quot; data-widthpercent=&quot;49.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F6AqC/btsHUnMg0nJ/OoekVkHhxuVTAl4z7naITk/img.gif&quot; alt=&quot;눈금자로 밑줄 직선으로 긋기와 각도기로 원 그리기 이미지&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF6AqC%2FbtsHUnMg0nJ%2FOoekVkHhxuVTAl4z7naITk%2Fimg.gif&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;788&quot; height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;눈금자로 밑줄 직선으로 긋기와 각도기로 원 그리기&lt;/figcaption&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;s&gt;근데 그림판에서 편집하는게 더 익숙함.&lt;/s&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. 도형(&lt;/b&gt;&lt;b&gt;★)&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0OLae/btsJasNvsO2/oXqsezgXaw7KcsExh6ZOGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0OLae/btsJasNvsO2/oXqsezgXaw7KcsExh6ZOGk/img.png&quot; width=&quot;640&quot; height=&quot;302&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;545&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.031%; margin-right: 10px;&quot; data-widthpercent=&quot;49.61&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0OLae/btsJasNvsO2/oXqsezgXaw7KcsExh6ZOGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0OLae%2FbtsJasNvsO2%2FoXqsezgXaw7KcsExh6ZOGk%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;1156&quot; height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GA5OF/btsJcjIaZr5/dG3PGwCiLexrfGY5jDtEq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GA5OF/btsJcjIaZr5/dG3PGwCiLexrfGY5jDtEq0/img.png&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;776&quot; data-is-animation=&quot;false&quot; width=&quot;640&quot; height=&quot;297&quot; style=&quot;width: 49.8062%;&quot; data-widthpercent=&quot;50.39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GA5OF/btsJcjIaZr5/dG3PGwCiLexrfGY5jDtEq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGA5OF%2FbtsJcjIaZr5%2FdG3PGwCiLexrfGY5jDtEq0%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;1672&quot; height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;캡처도구 창의 크기에 따른 아이콘 위치.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어느날 갑자기 아이콘이 생겼는데 24년 2월 정도부터 제공된 기능이라고 한다.&lt;br /&gt;아마 내 컴퓨터에 윈도우 업데이트가 제날짜에 처리가 안되면서 아이콘이 늦게 생긴 듯;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;998&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lpnan/btsJbf01Owo/shVjzd7FNlClYKKndXp8Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lpnan/btsJbf01Owo/shVjzd7FNlClYKKndXp8Jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lpnan/btsJbf01Owo/shVjzd7FNlClYKKndXp8Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLpnan%2FbtsJbf01Owo%2FshVjzd7FNlClYKKndXp8Jk%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;640&quot; height=&quot;550&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;998&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 그림판으로 이동하지 않고 바로 도형으로 강조&lt;/b&gt;하려는 부분을 표기할 수 있다.&lt;br /&gt;&lt;b&gt;가려야 하는 부분을 마스킹&lt;/b&gt;할 때도 채우기 기능을 활용할 수 있다.&lt;/p&gt;</description>
      <category>etc</category>
      <category>같은 기능의 버튼이 없다면 윈도우11이 아니거나 윈도우 스토어에서 캡처 도구 업데이트를 하지 않은 경우가 대부분이라고</category>
      <category>윈도우11</category>
      <category>캡처 도구</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/779</guid>
      <comments>https://comp-jae.tistory.com/779#entry779comment</comments>
      <pubDate>Tue, 11 Jun 2024 08:52:51 +0900</pubDate>
    </item>
    <item>
      <title>1일차</title>
      <link>https://comp-jae.tistory.com/760</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2024.05.16&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;첫째마당 기획, 첫발을 내딛다(~p.22)&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;01. IT 기획의 필수 개념 알기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;IT 기획자란?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;달성할 목적을 설정하고, 그 목적이 이루어질 수 있도록 연구하고 계획을 세우며 실행하는 사람&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기획이란?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;목적, 계획, 실행을 모두 포함하는 개념&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;단계별 개념
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;목적 - 사람들에게 필요한 서비스가 무엇인지 고민
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;필요성, 주 이용자, 시장분석, 더 나은 서비스에 대한 고민&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;계획 - 서비스 제공을 위해 필요한 것과 해야할 것을 나열해보고, 필요한 시간을 가늠
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;필요한 자원, 업무의 배분과 일정을 순서대로 정리&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;예상 출시일이나 예산에 따라 계획 변경이나 기획 재고 등 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;실행 - 계획한 것을 실행하면서 리스크 관리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기획, 디자인, 퍼블리싱, 개발, 테스트와 품질 보증 단계로 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;실행의 세부 단계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기획
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기능 정의&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;정책 정의&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;화면 설계&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;디자인, 퍼블리싱, 개발, 테스트 단계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기획 의도에 부합하는지&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;예상하지 못한 문제에 대해 대책 마련 및 기획 내용 교정&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;기능 테스트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;&amp;nbsp;IT 기획자의 구분과 역할&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;서비스 기획자&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;구축 기획자&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;운영 기획자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;서비스 기획자의 역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;필요한 서비스 구상(&lt;u&gt;&lt;b&gt;세상에 없던 서비스나 불편한 점을 개선한 서비스&lt;/b&gt;&lt;/u&gt;)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;서비스 정의&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;수익 모델 설계&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;이용 프로세스 설계&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;프로토타입 설계&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;서비스 기획서를 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;구축(SI) 기획자의 역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;서비스 분석 - 요구 사항 분석(&lt;u&gt;&lt;b&gt;의뢰자와 함께 고민하고 화면을 설계하는 업무&lt;/b&gt;&lt;/u&gt;)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;화면 설계 - 이용 프로세스 정리 및 화면 정의서 작성&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;디자인, 퍼블리싱 단계&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;개발, 테스트 단계&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;화면 정의서 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;운영(SM) 기획자
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;실제 운영에 필요한 대부분의 업무 진행(&lt;u&gt;&lt;b&gt;제작이 완료된 사이트를 개선하는 업무&lt;/b&gt;&lt;/u&gt;)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;상품 상세 화면 기획&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;이벤트 기획&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;마케팅 지원&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;사업 지원&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;운영 기획서 산출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;팀 프로젝트를 하면서 개발 이외에 기획도 같이 하게 되는데 모르고 했던 작업들이 이렇게 세세하게 분류되어 있다는 것에 놀랐다. SI와 SM의 의미에 대해서도 정확하게 알게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 현업에서도 대기업들은 이렇게 세세하게 기획자를 분류하는지, 중소기업에서는 실제 어떻게 업무가 진행되고 있는지 궁금하다.&lt;/p&gt;</description>
      <category>도서/Do it! 웹 사이트 기획 입문</category>
      <category>do it! 웹 사이트 기획 입문</category>
      <category>기획</category>
      <category>웹 기획자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/760</guid>
      <comments>https://comp-jae.tistory.com/760#entry760comment</comments>
      <pubDate>Thu, 16 May 2024 22:05:13 +0900</pubDate>
    </item>
    <item>
      <title>정적 타입 언어와 동적 타입 언어, 강타입 언어와 약타입 언어</title>
      <link>https://comp-jae.tistory.com/726</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1142&quot;&gt;&lt;a href=&quot;https://velog.io/@jee/%EA%B0%95%ED%83%80%EC%9E%85%EA%B3%BC-%EC%95%BD%ED%83%80%EC%9E%85-%ED%98%B9%EC%9D%80-%EC%A0%95%EC%A0%81%ED%83%80%EC%9E%85%EA%B3%BC-%EB%8F%99%EC%A0%81%ED%83%80%EC%9E%85&quot; target=&quot;_blank&quot; title=&quot;강타입 약타임&amp;amp;amp;#44; 동적&amp;amp;amp;#44; 정적 언어 이미지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cishgW/btsFUIYFQDJ/utO70imn3MKJ3unPBR68n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcishgW%2FbtsFUIYFQDJ%2FutO70imn3MKJ3unPBR68n1%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;640&quot; height=&quot;571&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1142&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;출처 : 이건 벨로그Jee&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정적 타입 언어(Static Typed Languages)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수가 선언될 때 타입이 결정된다.&lt;br /&gt;프로그램이 실행되기 전에, 컴파일 시간에 변수의 타입을 검사하며, 타입 에러는 주로 컴파일 시간에 발견되기 때문에, 실행 전에 많은 오류를 방지할 수 있다. &lt;br /&gt;예:&amp;nbsp;C,&amp;nbsp;C++,&amp;nbsp;Java,&amp;nbsp;Rust&amp;nbsp;등&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;동적 타입 언어(Dynamic Typed Languages)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수의 타입이 실행 시간에 결정된다.&lt;br /&gt;타입 검사가 실행 시간에 이루어지며, 변수는 여러 타입의 값들을 담을 수 있다.&lt;br /&gt;타입 에러는 프로그램이 실행될 때 발견될 수 있으며, 런타임 에러로 이어질 수 있다.&lt;br /&gt;예:&amp;nbsp;Python,&amp;nbsp;JavaScript,&amp;nbsp;Ruby&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;br /&gt;정적 타입 언어는 보통 더 안정적이고 예측 가능하지만, 더 많은 코드 작성을 요구할 수 있다. &lt;br /&gt;반면, 동적 타입 언어는 더 유연하고 개발 속도가 빠를 수 있지만, 런타임 오류의 가능성이 더 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;강타입 언어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 형끼리의 변환이 금지되어있고, 만약 변환을 하고 싶다면 명시적으로 타입을 선언해줘야한다. &lt;br /&gt;(자료형이&amp;nbsp;맞지&amp;nbsp;않을&amp;nbsp;시&amp;nbsp;에러&amp;nbsp;발생)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 : Java, Python, Ruby&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;약타입 언어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 형끼리의 변환이 가능하며, 암묵적으로 변환을 해주기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예 : C, JavaScript, PHP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;/li&gt;
&lt;li&gt;자료형의 결정 시점에 따라 정적 타입 / 동적 타입 언어&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>언어 공통</category>
      <category>강타입</category>
      <category>동적 타입</category>
      <category>약타입</category>
      <category>자료형</category>
      <category>정적 타입</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/726</guid>
      <comments>https://comp-jae.tistory.com/726#entry726comment</comments>
      <pubDate>Tue, 19 Mar 2024 09:00:34 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 10일차</title>
      <link>https://comp-jae.tistory.com/659</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwP4QN/btsC39TwHD5/bb4ZKLj0Rk3k9S7NukASu1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwP4QN/btsC39TwHD5/bb4ZKLj0Rk3k9S7NukASu1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwP4QN/btsC39TwHD5/bb4ZKLj0Rk3k9S7NukASu1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwP4QN%2FbtsC39TwHD5%2Fbb4ZKLj0Rk3k9S7NukASu1%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023-12-05&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;10장 정리&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 개발을 시작하면 일어나는 일들&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;오늘날 IT 세상에 다양한 기기들이 있지만 공통점은 컴퓨터라는 점이다. 프로그램 중 운영체제는 각 부품의 제어를 대신해준다. 이 운영체제를 기반으로 하는 개발자를 클라이언트 개발자라고 한다. 반면, 데이터를 가공, 보관, 응답 처리하는 서버 컴퓨터는 리눅스라는 운영체제를 주로 이용한다. 안정적이고 무료기 때문이다. 이 서버 컴퓨터용 운영체제를 기반으로 하는 개발자를 서버 개발자라고 한다. 이 둘은 특정한 주소와 메소드로 이루어진 API를 통해 요청과 응답을 주고 받는다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 아웃트로&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;IT의 발달은 IT 뿐만 아니라 택시, 금융, 유통 등 다른 산업군에도 영향을 미친다. 주문을 키오스크로 하는 음식점도 눈에 띄게 늘고 있다. 이는 어쩔 수 없는 시대적 흐름이다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어쩔 수 없다는게 가장 맞는 말인 것 같다. 이렇게 빨리 기술이 발전할줄 알았을까. 하지만 흐름은 멈추지 않을 것이고, 다양한 생활영역에 융화되어 삶을 변화시킬 것이다. 결정할 수 있는 것은 변화를 맞이할지 변화에 휩쓸려갈지 뿐이다.&lt;br /&gt;드디어 책을 다 읽었다. 마지막 챕터 약 4페이지 가량의 내용이 이 책 전체를 압축한 프로세스여서 만약 실수라도 맨 뒷부분을 먼저 봤다면 흥미가 떨어져서 다 못읽었을 것 같았다. 그런데 쉬운 내용이 대부분이라 이거를 글로 남기는게 맞나 싶기도..;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;없음!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/659</guid>
      <comments>https://comp-jae.tistory.com/659#entry659comment</comments>
      <pubDate>Wed, 6 Dec 2023 21:56:52 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 9일차</title>
      <link>https://comp-jae.tistory.com/658</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjaUf/btsC9nJuwrY/UgBt69nKXFzSAdf8MQCbTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjaUf/btsC9nJuwrY/UgBt69nKXFzSAdf8MQCbTk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjaUf/btsC9nJuwrY/UgBt69nKXFzSAdf8MQCbTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjaUf%2FbtsC9nJuwrY%2FUgBt69nKXFzSAdf8MQCbTk%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023-12-05&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;9장 협업, 소스관리, 디자인&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 커밋이요? 머지요? 뭐요?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;깃은 '리누스 토발즈'가 개발한 프로그램이다. 커밋(commit)은 현재까지의 개발단계를 표기해두는 것으로 메모와 함께 기록한다. 깃은 이런 기록과 기록 사이의 변화와 기록 내용, 담당자 등 모든 기록을 추척할 수 있도록 되어 있다. 추후 이전 단계로 롤백 해야하거나 여러 버전 중 하나를 선택해야 할 때 이런 기록을 토대로 코드를 옮겨 다닐 수도 있다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;깃에는 브랜치와 머지라는 기능이 있다. 예를 들어 하나의 프로젝트로 버전1, 버전2, 버전3과 같이 여러 형태로 개발할 때 브랜치를 각각 나눠서 개발을 진행하고 진행 상황을 기록할 수 있다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;머지는 작업한 결과를 합치는 것이다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;두명이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;상,하단으로 나눠서 하나의 작업물을 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;작업하는 경우.&lt;br /&gt;시&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;작은 같은 코드를 가지고 진행하더라도 두명의 결과물은 달라지게 된다. 이 때 두 결과물을 하나의 완성본으로 합치는 것이 머지다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 왜 말을 저렇게 하지? 둘이 싸웠나?(feat. 디자이너와 개발자)&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;개발자는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;디자이너가 사용하는 툴에 익숙하지 않기 때문에 디자인에 개발 가이드를 요구하게 되었다.&amp;nbsp;&lt;br /&gt;디자이너는 가이드를 만들다보니 디자인에 시간을 뺏기다보니 개발자와 갈등이 생기게 됩니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;서로 대화가 가능한 문화를 만들어야하고, 서로에 대한 공부가 필요합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;개발자와 디자이너는 이해를 통해 협업해야 합니다. 경계를 완벽히 가를 순 없습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디자인 시안을 피그마로 처음 봤을 때 각종 정보가 다 있어서 너무 신기했다. 그대로 개발하면 되니 세상 편해졌다고 생각했는데, 디자이너 입장에서는 일을 두번한다는 느낌이겠다. 하지만 개발이 제대로 안되면 어차피 또 만나서 이야기해야 하니까 지금처럼 피그마로 시안을 받는 프로스세가 맞다고 생각하고,&amp;nbsp; 요즘에는 피그마 개발자모드도 있어서 더 편해진 것 같지만..&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;협업은 항상 힘든 것 같다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;없음!&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/658</guid>
      <comments>https://comp-jae.tistory.com/658#entry658comment</comments>
      <pubDate>Tue, 5 Dec 2023 21:50:57 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 8일차</title>
      <link>https://comp-jae.tistory.com/657</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brt4BO/btsC0XFJLpu/2phkk0M4kUH5sCM6VNrjz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brt4BO/btsC0XFJLpu/2phkk0M4kUH5sCM6VNrjz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brt4BO/btsC0XFJLpu/2phkk0M4kUH5sCM6VNrjz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrt4BO%2FbtsC0XFJLpu%2F2phkk0M4kUH5sCM6VNrjz1%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023-12-04&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;8장 프레임워크와 라이브러리&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 코코아요? 그거 먹는 거잖아요. 그리고 자꾸 왜 도서관 얘기를 하는거죠?(프레임워크, 라이브러리)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;프레임워크는 개발을 더 빨리 할 수 있도록 도와주는 기본 틀과 같다. 페이스북이나 구글 같은 회사에서 만들기도 하고, 개인이 만들기도 한다. 해당 회사의 앱을 프레임워크를 통해 빨리 개발하면 그만큼 양질의 앱을 더 많이 확보할 수 있기 때문에 회사에서 프레임워크를 제공하는 측도 있다. 라이브러리는 다른사람들이 만들어 놓은 코드모음이다. 프레임워크는 그 틀을 벗어날 수 없지만, 라이브러리는 필요한 부분들을 조합해서 쓸 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예전에는 프레임워크와 라이브러리를 구분하기 힘들었는데 프레임워크가 더 큰 범주에 속한다는 걸 알게 된 후로는 더이상 헷갈리지 않는다. 사실 프론트엔드 개발에 바닐라자바스크립트 실력도 중요하겠지만, 회사입장에서는 개발기간을 단축해서 이윤을 남기는게 목표다. 따라서 빠르게 개발할 수 있는 프레임워크와 라이브러리를 잘 다루는게 중요할 수밖에 없다. 나 역시 그랬지만 처음 개발공부를 할 때 바닐라자바스크립트를 100% 공부하고 프레임워크나 라이브러리를 공부하겠다고 다짐하는 경우가 있는데 100% 공부라는 건 없으니 어느정도 자바스크립트를 공부했으면 빨리 프레임워크가 라이브러리를 공부하는게 취업에 더 유리하다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;대부분의 단원이 짧고 예시와 설명이 잘 되어있어서 사실 궁금한 내용이 거의 없다...&lt;br /&gt;독서록 양식을 바꿔야 하나 싶을 정도..ㅜㅜ&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/657</guid>
      <comments>https://comp-jae.tistory.com/657#entry657comment</comments>
      <pubDate>Mon, 4 Dec 2023 22:00:00 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 7일차</title>
      <link>https://comp-jae.tistory.com/656</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw7YSA/btsC6w0SF3z/SYF3i8TTb9MYxLpNttYMtk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw7YSA/btsC6w0SF3z/SYF3i8TTb9MYxLpNttYMtk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw7YSA/btsC6w0SF3z/SYF3i8TTb9MYxLpNttYMtk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw7YSA%2FbtsC6w0SF3z%2FSYF3i8TTb9MYxLpNttYMtk%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023-12-03&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;7장 데이터베이스와 이미지 처리&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 쇼핑몰을 생각해봅니다. 여기서 데이터는 대체 뭘까요?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쇼핑몰에서 회원정보, 아이디, 주문 상품, 가격 등 서로 관계가 이어진 텍스트를 데이터라 한다. 많은 데이터 중에서 0.001%라도 오류가 발생한다면, 이 후 누적된 오류는 걷잡을 수 없는 큰 오류와 피해를 발생시킨다. 이처럼 데이터는 단 1%의 결점도 없어야 한다. 이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;무결성&lt;/b&gt;이라 한다. 따라서 데이터를 다루는 사람들은 보수적일 수밖에 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;XL.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yq4b3/btsC4HV2Cti/lvVzHANGotMUKwV1bkyQw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yq4b3/btsC4HV2Cti/lvVzHANGotMUKwV1bkyQw0/img.jpg&quot; data-alt=&quot;출처 : 교보문고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yq4b3/btsC4HV2Cti/lvVzHANGotMUKwV1bkyQw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyq4b3%2FbtsC4HV2Cti%2FlvVzHANGotMUKwV1bkyQw0%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;246&quot; height=&quot;381&quot; data-filename=&quot;XL.jpg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 교보문고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 데이터를 관리하는 주요 방법론이 '관계형 데이터베이스'이다. 쉽게는 엑셀처럼 행렬로 관리한다고 생각하면 된다. 관계형 데이터베이스에서는 엑셀의 각 영역에 비추어 Sheet를 테이블(Table)이라고 표현하고, 엑셀 파일 자체는 스키마(Schema) 혹은 데이터베이스(Database)라고 표현한다. 관계형 데이터베이스 관리 시스템을 RDBMS라고 부르며, MSSQL, Oracle DB, MySQL, MariaDB 등 다양하게 존재한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 클라가 들고 있다는게 뭐죠?(클라에 저장돼요. 클라가 가지고 있어요)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;데이터는 클라이언트에도 저장할 수 있다. 예를 들어 알람의 경우 모든 사람들이 개별적으로 등록한 정보에 따라 동작한다. 즉, 이는 클라이언트에 있는 데이터다. 앱에 접속시 모든 사람들에게 동일하게 나타나는 정보는 서버에 있는 데이터다. 하지만, 상황에 따라 둘 다 가지고 있다던지, 여러 상황이 있을 수 있기 때문에 결과물을 확인하는 것만으로는 명확하게 구분할 수 없다. API문서를 통해서 명확한 확인이 가능하다. 이를 구분하는 이유는 정확한 요청을 정확히 담당자에게 하기 위함이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 배너 좀 바꾸려는데, 자꾸 자기한테 말하면 안 된대요(왜 자꾸 사람이 바뀌는 건데..)&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;클라이언트에 이미지를 두면 네트워크를 통하지 않아도 빠르게 확인할 수 있다. 하지만 변동성이 있는 이미지(가격 정책 등)를 클라이언트에 두면 안된다. 고객이 다운로드할 때까지 수정되지 않기 때문이다. 따라서 이미지를 서버와 클라이언트 중 어디에 둘 지는 이미지의 성격에 따라 달라진다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 뿐만 아니라 영상 같은 고용량의 데이터를 처리할 때 클라이언트와 서버 중 어디에 둘 지 고민하게 된다. 기획자나 일반인은 잘 모르는 부분이지만 이해하기 쉽게 설명이 되었고, 데이터를 다루는 사람들이 보수적인 이유도 잘 설명되었다. 그런데 이 책만 보면 DB는 절대 수정 불가하다고 생각할 수도 있을 것 같다.ㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스에 대해서 좀 더 상세한 공부가 필요하다. 형태가 엑셀과 비슷하다 정도는 알고 있는데 구축한 이후에 수정이 어렵다는게 어떤 의미인지 잘 와닿지 않는다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/656</guid>
      <comments>https://comp-jae.tistory.com/656#entry656comment</comments>
      <pubDate>Sun, 3 Dec 2023 21:43:04 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 6일차</title>
      <link>https://comp-jae.tistory.com/655</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wRNZV/btsCOBChlwn/ckzwrnsZAFXwdpfPRAYwjk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wRNZV/btsCOBChlwn/ckzwrnsZAFXwdpfPRAYwjk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wRNZV/btsCOBChlwn/ckzwrnsZAFXwdpfPRAYwjk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwRNZV%2FbtsCOBChlwn%2FckzwrnsZAFXwdpfPRAYwjk%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2023.11.30&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6장 웹&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. 웹은 어떻게 이루어져 있고, 어떻게 동작할까?&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;text-align: left;&quot;&gt;1) 웹의 기본&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;: 운영체제와 프로그램에 상관없이 일정한 형식이 언제나 동일하게 보이도록 하기 위해 HTML이 탄생했다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;정보 전달에만 초점을 맞추다보니 디자인을 입힐 수 있는 CSS가 탄생했고, 이 둘을 모두 작업하는 것을 퍼블리싱 작업이라고 한다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;최근 시맨틱 태그의 중요성이 강조되면서 HTML을 더 구조적으로 작업하는 것을 마크업 작업, 이런 작업을 주로 하는 분들을 마크업 개발자 라고 하기도 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;로그인, 회원가입, API를 통한 json 정보를 서버와 주고 받는 것은 별도의 프로그래밍 언어가 필요하며, 웹에서는 JavaScript를 이용한다. HTML과 CSS는 이 부분을 처리할 수 없기 때문에 프로그래밍 언어가 아니라는게 일반적인 관점이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;크롬의 개발자도구를 이용해 Network 탭에서 데이터 전송 속도를 바꿔서 테스트해보거나, http 상태 코드 결과에 대해 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Elements 탭에서는 작성된 HTML이나 CSS를 수정해볼 수 있는데 새로고침 하면 즉시 원상복구 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;이는 앱과 달리 웹페이지는 모두 서버의 원본 데이터를 복사해서 받아오는 사본이기 때문이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;이처럼 웹은 앱의 심사 과정이 없기 때문에 서버에 원본 데이터를 교체하면 심사 없이 변화가 반영된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;단, 유저가 업데이트 된 정보를 다운로드 해야 하는 것은 동일하나, 웹은 '새로 고침' 이나 '페이지 이동' 이 곳 새로운 다운로드를 의미하기 때문에 빠르게 반영된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;반대로 웹은 그만큼 네트워크의 영향을 많이 받기 때문에 인터넷이 느리면 급격히 이상해진다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;앱은 웹보다는 효율적으로 네트워크의 영향을 조금 받도록 만들 수 있다. 예를 들어 앱 설치 후 오프라인에서 어플을 사용하다가 온라인 상태가 되면 동기화처리하는 방식을 들 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. 웹 개발하다가 못 해 먹겠다고 말하는 이유&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;2) 브라우저&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;: 웹의 기본이 되는 HTML, CSS, JavaScript는 브라우저에서 동작한다. 대표적으로 크롬, 익스플로서, 파이어폭스, 오페라, 사파리 등이 있으며, 다운로드해 설치 후 이용한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;설치한다는 건 브라우저도 하나의 앱이라는 의미다. 사용자에 따라 버전이 다를 수 있고, 사용하는 브라우저 종류 자체가 다를 수도 있다. 이 문제를 '브라우저 버전의 파편화' 라고 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;문제 해결을 '파편화를 잡는다'고 표현한다. 해외에 'caniuse.com'이라는 사이트가 유명한데, 특정한 기술이 사용 가능한지 확인할 수 있는 사이트다. 모두를 만족시키기 보다 '점유율'에 따라, 국내 서비스라면 국내 사용자 점유율에 따라 선택하는 편이 좋다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;3) 반응형으로 코딩하면 더 비싸나요?(그게 뭔데요?)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;: 과거 웹 페이지들은 양 옆을 빈 공백으로 자르고, 가운데에 콘텐츠가 모인 형태로 디자인 되었다. 시간이 흘러 스마트폰, 태블릿 등 기술의 발전과 다양한 기기가 생겨났고, 하나의 CSS로 다 해결할 수 없는 상황이 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 불편함을 해결하기 위해 등장한 기술이 '반응형 웹'이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이름이 '반응형' 인 이유는 브라우저의 가로 넓이에 '반응'하여 구성 요소가 변하기 때문이다. 반응형 웹페이지는 브라우저의 크기를 변경했을 때 기본적인 색상은 유지하면서 레이아웃이 변한다. UI나 UX 측면에서는 좋지만, 개발하는 입장에서는 기기의 넓이에 따른 CSS를 추가로 코딩해야 하기 때문에 작업 시간과 비용이 더 많이 들어가게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;4) 애플리케이션 이야기를 하는데, 왜 자꾸 웹 개발자에게 말하라는 거죠?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;: 유명한 브라우저 중 익스플로러(현재는 엣지), 사파리의 경우 각각 마이크로소프트, 애플에서 만들었다. 브라우저의 점유율은 곧 영향력, 돈으로 연결되기 때문에 각 회사는 점유율을 높이고 싶어 한다. 그렇기 때문에 맥을 구입하면 해당 맥 운영체제에는 사파리가, 윈도우는 익스플로러(엣지)가 기본 내장되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;운영체제 안에 브라우저가 내장되자 앱의 특정 부분을 브라우저로 처리하는 혼합된 앱이 생겨난다. 운영체제에 따라 정해진 언어를 사용해 제작한 앱을 '원주민' 이라는 뜻을 가진 '네이티브' 앱이라고 하고, 이렇게 혼합형 앱을 '하이브리드 앱'이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'하이브리드 앱'의 경우 브라우저 부분의 장점인 수정의 용이성이 있지만, 네트워크가 느리면 해당 부분의 화면이 빨리 보이지 않아 UX 측면에서 좋지 않다. 반면 네티이브 앱의 경우 운영체제별로 다른 프로그래밍 언어를 통해 수정한 뒤 심사신청 하는 등, 여러 단계를 거쳐야 하며, 심사가 끝나도 사용자가 업데이트를 직접 해야 하는 불편함이 있지만, 네트워크를 최소한으로 이용하도록 코딩하면 인터넷이 느린 환경에서도 빠르게 동작한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화면만 보고 이 둘을 확실히 구분하기는 어려우나 HTML 태그의 애니메이션 효과나 API문서를 살펴보는 것으로 구분할 수 있으며, 이에 따라 적합한 개발자에게 문의해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;브라우저에 상관없이 사용자가 동일한 웹 페이지를 경험할 수 있도록 하는&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;크로스브라우징&lt;/span&gt;&amp;nbsp;이슈가 다뤄졌다. 시맨틱 태그의 중요성 때문에 예전처럼 표면적으로 큰 차이가 느껴지지는 않을 것이다. 하지만 아직 많은 회사들은 과거의 레거시 코드를 바탕으로 서비스를 제공하고 있을 것이고, 따라서 크로스브라우징 이슈는 현재 진행형이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기획자 입장에서 설명한 반응형 웹에 대해서도 인상깊었다.&amp;nbsp;최근 관계자에게 반응형 웹 수주가 개발자 입장에서는 좋지 않을 수 있다는 의견을 들었던 터였다. 비유하면&amp;nbsp;반응형 웹은 맞춤정장으로 코드의 재활용성이 떨어지고,&amp;nbsp;&lt;span style=&quot;text-align: start;&quot;&gt;일반적으로&amp;nbsp;&lt;/span&gt;기업은 처리 기간이 늘어날 경우 개발자의 숙련도를 의심하지 비용을 더 지불할 의사는 없다는 것이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/655</guid>
      <comments>https://comp-jae.tistory.com/655#entry655comment</comments>
      <pubDate>Thu, 30 Nov 2023 22:11:20 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 5일차</title>
      <link>https://comp-jae.tistory.com/654</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JHP2u/btsCSB2EX48/WDxswIJfvIzKseam3CKVfk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JHP2u/btsCSB2EX48/WDxswIJfvIzKseam3CKVfk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JHP2u/btsCSB2EX48/WDxswIJfvIzKseam3CKVfk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJHP2u%2FbtsCSB2EX48%2FWDxswIJfvIzKseam3CKVfk%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023.11.29&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;5장 애플리케이션&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 설치한 뒤 실행하는 애플리케이션의 특징&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;애플리케이션이란?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&amp;nbsp;: 설치해서 사용하는 모든 프로그램을 의미한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;시대나 사용기기에 따라 응용 프로그램, 앱, 어플리케이션 이라는 명칭으로 부르기도 하나 모두 같은 의미이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;앱은 일반적으로 버전 업데이트 이슈가 있더라도 일정기간 업데이트를 하지 않은 채로 사용할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;그런데 예를 들어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;게임의 10,000원 아이템이 11,000원으로 갱신되어야 할 때, 이런 정보가 앱 자체에 있다면?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;신규 설치자와 업데이트 하지 않은 기존 사용자간에 아이템 가격차가 발생하고, 이는 큰 문제로 이어질 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;그렇기 때문에 상황에 따라 변동 가능한 정보는 보통 앱에 바로 넣지 않고 API로 서버에서 불러와 갱신한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; letter-spacing: 0px;&quot;&gt;모바일 기준으로 앱 생태계는 '앱 마켓'을 이용해 검색하고 다운로드 하며,&amp;nbsp;&amp;nbsp;'앱스토어', '구글 플레이 스토어'가 대표적이다. 각각 애플, 구글의 룰을 따르며, 회사간 조금씩 차이가 있다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;하나의 예시로 애플의 경우 앱을 마켓에 등록하기 위한 사전 심사가 깐깐하기 때문에 심사 기간이 길 수 있다. 하지만 대부분의 앱이 정상 동작하고 깔끔하다. 구글 플레이 스토어는 반대로 상대적으로 심사가 느슨해 앱의 수는 더 많으나 일부 수준미달의 앱이 있을 수 있다.(저자 의견입니다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;하루 1장씩 읽는게 목표인데 오늘 짧아서 너무 좋다.ㅎㅎ 이전 챕터에서 논의됐던 대로 현재 앱 생태계는 구글과 애플이 주도하고 있다. 각 회사의 향후 정책 방향에 따라 사용언어를 바꾸거나 개발환경을 바꿔야 될 수도 있다는 점에서 개발자라면 관련 이슈에 항상 민감할 수밖에 없겠다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;윈도우가 독점한 운영체제 시장에서 리눅스를 만들어낸 리누스 토르발스처럼. 브라우저계에 혜성같이 등장한 구글의 크롬처럼. 모바일 앱 계에도 언젠가는 새로운 무엇인가가 등장하지 않을까? 기대해본다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/654</guid>
      <comments>https://comp-jae.tistory.com/654#entry654comment</comments>
      <pubDate>Wed, 29 Nov 2023 21:01:21 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 4일차</title>
      <link>https://comp-jae.tistory.com/653</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxd3I/btsA71bFJDo/GSHgJInbHtIFk27UwTJlh1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxd3I/btsA71bFJDo/GSHgJInbHtIFk27UwTJlh1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxd3I/btsA71bFJDo/GSHgJInbHtIFk27UwTJlh1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxd3I%2FbtsA71bFJDo%2FGSHgJInbHtIFk27UwTJlh1%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023.11.28&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;4장 API와 JSON&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. POST는 뭐고, GET은 뭐죠?(feat. 개발자의 암호문)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;클라이언트는 서버에게 요청을 보낸다. 서버는 요청이 어떤 내용인지 구분할 수 있는 체계가 필요한데 이를 API라고 한다. API는 서로 다른 프로그램에서 요청과 응답을 주고받을 수 있게 만든 체계이다. 어디로 요청을 보내는지에 따라 어떻게 응답할지 미리 정해놓아야 하는데 예를 들어 클라이언트가 서버주소/A 라는 요청을 보내면 서버에서는 내용을 확인 후 로그인처리하는 식이다. 이런 서버 주소 정의와 경로 등은 백엔드에서 주도한다. 클라이언트는 크게 CRUD(Create, Read, Update, Delete)로 요청하게 된다. 특정한 사이트에 회원 프로필 이미지를 등록하는 상황이라고 생각해 보자. 각 요청은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Create - 사진 업로드&lt;/li&gt;
&lt;li&gt;Read - 업로드 된 사진이 화면에 나타나게 읽기&lt;/li&gt;
&lt;li&gt;Update - 다른 사진으로 변경&lt;/li&gt;
&lt;li&gt;Delete - 사진 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이런 CRUD는 각각의 주소를 가지는데 잘못 구성할 경우 중복되거나 관리가 어려워지는 상황이 발생한다. 예를 들어 create라는 주소를 사진 업로드에 배정했지만 create 자체는 어떤 생성을 의미하는지 명확하지 않다. 예시로 든 사진 이외에도 메시지, 이모티콘, 신규 글, 좋아요 같은 추천 등록 등 클라이언트의 요청 중 생성의 카테고리에 들어가는 요청은 상당히 많을 것이다. 따라서 좀 더 체계적으로 API를 관리하자는 운동에 따라 RESTful API가 탄생한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;서버에서도 요청에 대해 검증하게 되는데(예를 들어 비밀번호가 틀렸다던지, 이미지를 업로드 요청했으나 확인시 다른 종류의 파일이 요청됐다던지) 각 기능을 담당하는 부서가 여러 개면 검증결과 표현도 다 다를 수 있다. 이를 특정한 세 자리 숫자로 표현하기로 하는데 이를 'http 상태 코드'라고 한다. 일반인들도 없어진 사이트나 세부 주소가 잘못 입력된 사이트로 접속 시 404 상태코드 화면이 나오는 것을 본 적 있을 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HASU8/btsA4SfBLOh/qf1MszaRIgCm6WkspMjFS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HASU8/btsA4SfBLOh/qf1MszaRIgCm6WkspMjFS0/img.png&quot; data-alt=&quot;출처 : github&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HASU8/btsA4SfBLOh/qf1MszaRIgCm6WkspMjFS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHASU8%2FbtsA4SfBLOh%2Fqf1MszaRIgCm6WkspMjFS0%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;478&quot; height=&quot;291&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : github&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;누군가 제작한 API를 이용해 특정한 기능을 구현할 수도 있는데 예를 들어 지도 API를 연동하면 따로 기능을 개발할 필요 없이 정해진 방식의 코드를 입력하면 앱에서 지도 기능이 구현되는 식이다. 이런 도구를 SDK(Software Development Kit)라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 요청과 응답을 주고 받을 때의 형식&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;클라이언트가 요청과 응답을 할 때는 정해진 양식을 사용한다. 현재 가장 유명한 형식은 JSON으로 아래처럼 중괄호 내에 콜론기호를 구분기호로 키와 값으로 구성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1701255831348&quot; class=&quot;json&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;{
  &quot;id&quot; : &quot;abc&quot;,
  &quot;pw&quot; : &quot;a123&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. API 문서 살펴보기&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;기업이나 정부에서 무료로 제공하는 API를 Open API라고 한다. 책의 API 예시는 저작권에 위배될 것 같고 네이버 오픈 API 중&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://developers.naver.com/docs/login/cafe-api/cafe-api.md&quot;&gt;네이버 카페 API 명세&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://developers.naver.com/docs/login/cafe-tutorial/cafe-tutorial.md&quot;&gt;카페 튜토리얼&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;링크를 걸어둔다. 글쓰기, 삭제 같은 기능별 코드와 변수명, 상황별 페이지 이동, 응답 코드 등 어려운 부분도 많지만 책에서 알게 된 내용도 많이 나온다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RESTful API는 REST 원리를 따르는 API를 시스템을 의미한다. REST API는&amp;nbsp; 체계적일 API 관리를 하자는 운동이다. 예를 들어 블로그 작성 시 신규 글 작성 등록은 CURD 중 Create(생성) 일 것이다. 업로드된 글이 화면에 나타나는 Read, 글을 수정 후 다시 등록 시 Update, 글 삭제 시 Delete가 되는데 이를 각각의 행동(동사)으로&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 구분하지 말고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;blog/&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;create, blog/delete처럼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;카테고리(명사)로 분류 시 좀 더 관리가 쉽다. Open API에 대해서 알고는 있었지만 API 명세를 살펴본 건 처음이었는데&amp;nbsp; 얼마 후 미니 프로젝트를 앞두고 있어서 굉장히 큰 도움이 되었다. 추후에도 여러 프로젝트 시 API명세를 작성할 때 예시로 활용하려고 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;다음 주에 프로젝트를 위한 기능 구현 회의를 할 예정인데 API 수정 하나가 불러오는 나비효과에 대해서 스스로에게 경고와 함께 대략적인 확인 프로세스를 남겨둔다..ㅎㅎ&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;Q. 협업 중인 프로젝트에서 회원 정보에 생일을 추가하기로 한다면?&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;A. 회원 가입 API와 회원 정보 조회 및 수정 API에 대한 변경이 필요하고, 회원가입 화면도 수정되어야 한다. 서버 작업은 눈으로 확인할 수 없기 때문에 API 문서를 통해 진행 상황을 예측할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자 를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/653</guid>
      <comments>https://comp-jae.tistory.com/653#entry653comment</comments>
      <pubDate>Tue, 28 Nov 2023 22:04:16 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 3일차</title>
      <link>https://comp-jae.tistory.com/652</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beTy8z/btsA25FCe9i/6eBasxNgYsF4KTNwlAkak0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beTy8z/btsA25FCe9i/6eBasxNgYsF4KTNwlAkak0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beTy8z/btsA25FCe9i/6eBasxNgYsF4KTNwlAkak0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeTy8z%2FbtsA25FCe9i%2F6eBasxNgYsF4KTNwlAkak0%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023.11.27&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3장 네트워크, 클라이언트, 서버&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 국민학교와 초등학교 시절 이야기&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터가 연결되면 서로 데이터를 주고 받을 수 있는데, 컴퓨터가 연결된 작은 지역을 LAN(Local Area Network)라고 한다. 도시의 여러 LAN을 하나로 연결해 MAN(Metropolitan Area Network)를 만들었고, 도시와 도시, 나라와 나라를 연결해 WAN(Wide Area Network)를 만들었다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 한강에서 카카오톡을 다운로드하고 실행하면 일어나는 일들&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;앱스토어에서 앱을 다운로드 하면 가까운 기지국으로 신호가 전달되고, 신호는 WAN을 따라 정해진 목적지로 이동한다. 앱스토어를 관리하는 애플은 카카오에서 미리 올려놓아 가지고 있던 설치 파일을 다시 사용자에게 전달하게 된다. IP주소는 컴퓨터가 위치한 주소를 의미하며, 인터넷에 접속하는 순간 12자리의 숫자로 구성된 고유 주소를 갖게 된다. (214.123.142.12)와 같이 이루어지는데 각 자리당 0~255의 숫자만 사용할 수 있는 한계로 최근에는 숫자 구분을 4개에서 6개로 늘린 IPv6를 함께 사용하고 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 당신은 계속 뭘 달라고 하고, 누군가는 계속 뭘 준다.&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;스마트폰도 내부적으로 CPU, 메모리, 보조기억장치, 운영체제 등으로 구성되어 있으므로 결과저긍로 소형 컴퓨터에 해당한다. 이런 스마트폰이나 컴퓨터 등으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;카카오톡 다운로드를 클릭하거나 인터넷 검색으로 웹페이지를 이동하는 등 동작을 요청하는 컴퓨터를 클라이언트라고 한다. 사용자가 직접 눈으로 보면서 동작을 확인할 수 있는 부분이기 때문에 '프론트엔드'라고 표현한다. 반대로 요청받은 파일을 주는 컴퓨터를 서버라고 하는데 서버는 기본적으로 고객의 눈에 보이지 않는 곳에서 자료를 보관 전송 등을 하는 역할을 하기 때문에 '백엔드' 라고 표현한다.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 도대체 우분투가 뭐죠?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;대부분의 서버 프로그램은 리눅스 라는 운영체제 위에서 동작한다. 우리가 웹페이지 로그인을 한다고 가정하면 서버는 입력된 정보가 실제 존재하는지, 일치하는지 등을 확인하고 그 결과를 클라이언트로 전달하게 된다. 이러한 서버 프로그램은 24시간 365일 동작하고 있어야 한다. 리눅스는 리누스 토발스 라는 사람이 만들었고, 기본적으로 무료이기 때문에 아무리 오래 사용해도 추가 비용이 발생하지 않는다. 즉, 앞서 이야기한 3개의 회사의 영향을 적게 받는다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;윈도우도 95, 98, xp, 10, 11로 다양하게 버전이 바뀌는 것처럼, 리늑스는 오픈 소스인 만큼 더 다양한 버전이 존재한다. 우분투는 리눅스의 유명 버전 중 하나다. 사실 안드로이드도 리눅스를 기반으로 모바일에 운영체제에 적합하게 개량된 OS이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;※ 오픈소스란?&lt;br /&gt;: 소스&amp;nbsp;코드를&amp;nbsp;공개해&amp;nbsp;누구나&amp;nbsp;특별한&amp;nbsp;제한&amp;nbsp;없이&amp;nbsp;그&amp;nbsp;코드를&amp;nbsp;보고&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;오픈&amp;nbsp;소스&amp;nbsp;라이선스를&amp;nbsp;만족하는&amp;nbsp;소프트웨어를&amp;nbsp;말한다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 개인 서버를 운영하면 힘든 이유&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;서버 컴퓨터는 24시간 365일 동작해야 한다. 만약 개인이 서버를 운영하면 관리자가 잠든 시간에 오류가 발생해서 동작하지 않는 사고가 생길 수도 있고, 사소한 부주의로 컴퓨터가 고장나버리면 이용자 모두에게 피해를 끼치는 리스크가 발생한다. 상당한 전기세도 발생할 것이다. 그래서 이런 관리를 대신해주는 '호스팅 업체'가 생겨났고, 오늘날 아마존의 AWS과 같은 서비스가 생겨났다. AWS는 서버 컴퓨터 대여 뿐만 아니라 여러 솔루션을 함께 제공해주고 있어서 이러한 기능만 잘 사용해도 안정적이고 효율적인 서버를 쉽게 구축할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터의 연결이 모여 WAN이 되고 WAN을 통해 클라이언트는 자료를 요청하고 백엔드는 데이터를 제공하는 흐름의 챕터였다. 과거에는 서버 컴퓨터를 회사에서 직접 구매해서 관리하는 경우가 많았는데 요즘은 아마존의 AWS, 마이크로소프트의 azure와 같은 서비스로 인해&amp;nbsp; 그런 부분이 많이 변화되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우분투는 프론트엔드 개발을 처음 배울 때 윈도우OS는 적합하지 않다고 권유받아서 설치했던 적이 있는데 설치하고나서 윈도우에서 작업하는게 그리 불편하지 않았던 터라 잘 이용할 일이 없는 것 같다. 서버쪽까지 좀 더 공부해봐야 알겠지만 요즘도 윈도우로 작업하는게 문제점으로 남아있는지 궁금하다.&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;AWS, azure와 같은 서비스로 실제 서버 컴퓨터를 구입, 관리하는 경우가 많이 줄었다. 과거 이런 추세라면 서버 개발자를 필요로 하는 곳이 점차 줄어들 것이라는 전망이 있었는데 또 주위분들에게 물어보면 여전히 서버 개발자가 귀하고 우대받는다고 하니 관련된 분에게 물어보고 싶다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영 저자 를 기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/652</guid>
      <comments>https://comp-jae.tistory.com/652#entry652comment</comments>
      <pubDate>Mon, 27 Nov 2023 22:33:06 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 2일차</title>
      <link>https://comp-jae.tistory.com/651</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3hpPk/btsA7v4mnqu/VmCvIkBplN1tUd0Zw3Oz1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3hpPk/btsA7v4mnqu/VmCvIkBplN1tUd0Zw3Oz1k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3hpPk/btsA7v4mnqu/VmCvIkBplN1tUd0Zw3Oz1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3hpPk%2FbtsA7v4mnqu%2FVmCvIkBplN1tUd0Zw3Oz1k%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;308&quot; height=&quot;424&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TIL (Today I Learned)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;2023.11.25&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 범위&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2장 프로그래밍 언어 &amp;amp; 운영체제(OS)&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;책에서 기억하고 싶은 내용&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 프로그래밍 언어가 '언어'라고?(못 알아듣겠는데..)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터는 기계어인 0과 1로 명령을 처리한다. 인간과 컴퓨터 사이에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;'컴파일러'가&lt;span&gt;&amp;nbsp;&lt;/span&gt;있어서 인간의&lt;span&gt;&amp;nbsp;&lt;/span&gt;요구(명령)를&lt;span&gt;&amp;nbsp;&lt;/span&gt;컴퓨터에게 기계어인 0과 1로 전달한다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 개발자는 앉아서 뭐 하는 거지(뭔가 치긴 치는데...)&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자는 컴퓨터에게 시킬 일을 문서로 만드는데 이를 프로그래밍 혹은 코딩이라고 한다. 개발하기 위한 모든 것들을&lt;span&gt;&amp;nbsp;&lt;/span&gt;제공해 주는&lt;span&gt;&amp;nbsp;&lt;/span&gt;환경을 IDE(통합 개발&lt;span&gt;&amp;nbsp;&lt;/span&gt;환경)이라고&lt;span&gt;&amp;nbsp;&lt;/span&gt;하며 IDE는 보통 어떤 분야에 특화되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 뭐가 이렇게 많아?(C언어, 자바, 파이썬... 등)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자들은 기존의 것을 발전시키거나 새로운 것을 만들기 좋아한다. 프로그래밍 언어는 기존의 장점과 단점에 따라 새로운 언어가 개발되고, 이 중 많은 사람이 선택한 언어만 살아남게 된다.(기존의 언어가 살아남게 되는 경우도 있다.) 언어는 '저수준' 언어와 '고수준' 언어로 구분할 수 있는데, 저수준 언어는 컴퓨터 입장에서 구체적이나 사람이 이해하기 어렵고, 고수준 언어는 인간 친화적이나 저수준 언어보다 컴퓨터가 이해하기 느리다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저수준 언어는 컴퓨터 사양을 낮추고 싶을 때 사용한다. 이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;고성능이나 다양한 기능이 필요치 않은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;세탁기, 전자레인지 같은 생활가전을 떠올릴 수 있다. 이런 기기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;몇 가지&lt;span&gt;&amp;nbsp;&lt;/span&gt;동작만 가능한 컴퓨터가 필요할 경우 가격을 낮추기 위해 저수준 언어를 최대한 활용해 부품을 탑재하는 것이다. (저수준 언어 자체가 퀄리티가 낮다는 의미가 아님에 주의)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 컴퓨터 구매해보셨나요?(컴퓨터의 구성 요소)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;'CPU'는 컴퓨터의 머리이다. CPU가 특정한 작업을 할 때 '보조기억장치'(HDD, SSD&lt;span&gt;&amp;nbsp;&lt;/span&gt;등)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;연계해서 처리가 되는데 보조기억장치는 용량이 큰 대신 CPU보다 속도가 매우&lt;span&gt;&amp;nbsp;&lt;/span&gt;느리기&lt;span&gt;&amp;nbsp;&lt;/span&gt;때문에 CPU 입장에서는 보조기억장치를 위해 속도가 하향 평준화 된다. 이런 문제로 '메모리'라는 빠른 개인 작업 공간을 만들었다. &lt;/span&gt;CPU에서 처리할 작업이 있을 때 보조기억장치는 보관하고 있던&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메모리로 넘겨주고, CPU는 메모리 위에서 빠르게 작업을 수행하게 된다. 동작하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 우린 왜 이 이야기들이 낯설까?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이런 절차들을 일반인들이 일일이 기억할 필요는 없다. 운영체제(OS)라는 소프트웨어가&lt;span&gt;&amp;nbsp;&lt;/span&gt;대신해 주기&lt;span&gt;&amp;nbsp;&lt;/span&gt;때문이다. OS는 대표적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;윈도우(마이크로소프트),&lt;span&gt;&amp;nbsp;&lt;/span&gt;맥 OS와 iOS(애플), 안드로이드(구글)가 있는데 이런 운영체제는 우리 대신 하드웨어를&lt;span&gt;&amp;nbsp;&lt;/span&gt;관리해 준다.(잔여&lt;span&gt;&amp;nbsp;&lt;/span&gt;용량, 프로그램 설치와 실행, CPU와 메모리 관리 등)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;재미있는 건 대부분의 사람들은 자의든 타의든 위의 운영체제를 이용하게 되는데, 그만큼 시장에서의 영향력은 매우 크다. 3개의 회사에서 운영체제의 보안 정책을 바꾸거나 가격을 올리거나 내리면 전 세계적인 영향을 끼치게 된다. 그만큼 이 3개 회사의 운영체제에 의존하고 있는 상황이다. 만약 이 3개 회사에서 특정한 언어만을 공식적으로 운영하겠다고 하면 개발자들은 모두 거기에 맞춰서 개발 언어를 바꿔야 할 수도 있는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 우리가 자바 최신 버전을 설치해야 하는 이유&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;과거에는 운영체제의 종류가 다양했고, 그에 따른 각기 다른 언어로 개발해야 하는 경우가 있었다. 자바는 JVM이라는 소프트웨어를 통해 각 운영체제에서 동일한 코드가 동작할 수 있는 프로세스를 만들었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;개발자는 프로그래밍 언어를 통해 특정한 운영체제 위에 동작하는 프로그램을 만드는 사람이다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;오늘 읽은 소감은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;오래전부터 프로그래밍에 관심이 있었던 만큼 옛 생각도 새록새록 나고, 또 비유를 엄청 많이 사용해서 책을 집필하셨기 때문에(특히 컴퓨터의 동작을 포토샵 실행으로 풀어서 설명하신 부분에 감탄!) 쉽게 이해하면서 읽을 수 있었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;전통적으로 컴퓨터공학과나 전산학, 과거 컴퓨터공학을 전공한 사람들은 개발에 관심이 있다 하면 C언어 공부를 추천하는데 이는 컴퓨터를 이해하는데 도움이 되기 때문일 것이다. 그러나 기획이나 디자인 쪽 협업파트의 팀원에게 C언어를&lt;span&gt;&amp;nbsp;&lt;/span&gt;추천하는 건&lt;span&gt;&amp;nbsp;&lt;/span&gt;과하다고 생각한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;나도 20대 중반에 네이버 블로그나 카페에서 엄청 추천을 받아&lt;span&gt;&amp;nbsp;&lt;/span&gt;윤성우 님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;열혈 C프로그래밍을&lt;span&gt;&amp;nbsp;&lt;/span&gt;구매하였던 기억이 나는데,&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;본격적으로 딥해지는 Part2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;포인터와 배열에서 굉장한 좌절을 하고 책을 덮었던 기억이 난다..;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이후에는 한국에서는 취업할 때 자바를&lt;span&gt;&amp;nbsp;&lt;/span&gt;공부하는 게&lt;span&gt;&amp;nbsp;&lt;/span&gt;좋다는 말에&lt;span&gt;&amp;nbsp;&lt;/span&gt;윤성우 님의&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;난 정말 JAVA를&lt;span&gt;&amp;nbsp;&lt;/span&gt;공부한 적이&lt;span&gt;&amp;nbsp;&lt;/span&gt;없다구요를&lt;span&gt;&amp;nbsp;&lt;/span&gt;구매하였고, 클래스에서 또&lt;span&gt;&amp;nbsp;&lt;/span&gt;한 번&lt;span&gt;&amp;nbsp;&lt;/span&gt;좌절하게 된다.(당시에는 봐도 무슨 말인지 진짜 이해가&lt;span&gt;&amp;nbsp;&lt;/span&gt;안 됐다..)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;또 몇 년 전에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;프론트엔드가&lt;span&gt;&amp;nbsp;&lt;/span&gt;코딩테스트를 볼 때 파이썬이 짧은 구문으로 구현이&lt;span&gt;&amp;nbsp;&lt;/span&gt;잘돼서&lt;span&gt;&amp;nbsp;&lt;/span&gt;병행 공부하는 유행이 있었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;그때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;책은&lt;span&gt;&amp;nbsp;&lt;/span&gt;안 샀지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;파이썬과 자바스크립트를 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;공부해 봤는데&lt;span&gt;&amp;nbsp;&lt;/span&gt;둘 다 애매하게 수박 겉핥기가 되었고, 또&lt;span&gt;&amp;nbsp;&lt;/span&gt;프론트엔드&lt;span&gt;&amp;nbsp;&lt;/span&gt;개발자로 취업한 사람이 자바스크립트로는 코드구현 실력이 형편 없더라는 이야기가 돌기 시작하면서 최근 프론트엔드 코테는 자바스크립트로 치게 고정된 것 같다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;운영체제를 소유하고 있는 3개 회사(마이크로소프트, 애플, 구글)는 시장에서의 영향력이 매우 크고 돈도 많이 벌어들인다는 문구에 불현듯 무료이지만 굉장히 널리 쓰이고 있는 리눅스 OS를 만드신 분은 지금&lt;span&gt;&amp;nbsp;&lt;/span&gt;뭐하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;사시나? 라는&lt;span&gt;&amp;nbsp;&lt;/span&gt;궁금증이 들었다. 리누스&lt;span&gt;&amp;nbsp;&lt;/span&gt;토르발스라는&lt;span&gt;&amp;nbsp;&lt;/span&gt;분으로 심지어 Git도 이분이 개발했다(!!) 궁금해서 관련한 정보를 찾다가 마침 밀리의 서재에 '리누스 토발즈, 재미있고 위대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;공유'라는&lt;span&gt;&amp;nbsp;&lt;/span&gt;약 3~40 페이지 분량의 짧은 전기(&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;특정한 인물의 남다른 경험이나 업적에 대하여 그 인물이 겪은 실제 사실을 바탕으로 기록한 글)가 있어서 집에 가는 길에&lt;span&gt;&amp;nbsp;&lt;/span&gt;완독 해버렸다!&lt;span&gt;&amp;nbsp;&lt;/span&gt;심지어 21살에 리눅스 첫 버전을 발표! 추후 따로 정리해서 글을 쓸 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식 - 최원영&lt;span&gt;&amp;nbsp;&lt;/span&gt;저자 를&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 출처로 개인적인 공부내용을 요약한 것입니다.&lt;/p&gt;</description>
      <category>도서/비전공자를 위한 이해할 수 있는 IT 지식</category>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/651</guid>
      <comments>https://comp-jae.tistory.com/651#entry651comment</comments>
      <pubDate>Sat, 25 Nov 2023 22:22:21 +0900</pubDate>
    </item>
    <item>
      <title>비전공자를 위한 이해할 수 있는 IT 지식 1일차</title>
      <link>https://comp-jae.tistory.com/650</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cover.jpeg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uGciU/btsARg8q8R8/ZOO6nlyFO9X2TxjPqYsZ7K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uGciU/btsARg8q8R8/ZOO6nlyFO9X2TxjPqYsZ7K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uGciU/btsARg8q8R8/ZOO6nlyFO9X2TxjPqYsZ7K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuGciU%2FbtsARg8q8R8%2FZOO6nlyFO9X2TxjPqYsZ7K%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;308&quot; height=&quot;424&quot; data-filename=&quot;cover.jpeg&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;TIL (Today I Learned)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;2023.11.24&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 범위&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #333333;&quot;&gt;1장 오리엔테이션&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;책에서 기억하고 싶은 내용&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 왜 자꾸 파이썬(Python)을 배우라고 하는 거죠?(feat. C 언어, 자바(JAVA)를 배워봐)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 분야의 지식이 없는 사람과 협업을 하게 될 때 전문용어를 사용하면 서로 소통하기 어렵다. 그렇다고 공부해서 상대방의 수준까지 올라가서 협업한다는 것은&lt;span&gt;&amp;nbsp;&lt;/span&gt;단시간 내에,&lt;span&gt;&amp;nbsp;&lt;/span&gt;어쩌면 영원히 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 가장 먼저 알아야 할 지식은 '프로그래밍 언어'가 아닙니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;하나의 서비스를 위해서 기획자, 디자이너, 퍼블리셔, 개발자(프론트엔드, 백엔드, 앱, 서버, DB 등)와 같이 다양한 직군에서 협업을 하게 되는데&lt;span&gt;&amp;nbsp;&lt;/span&gt;이때&lt;span&gt;&amp;nbsp;&lt;/span&gt;필요한 것은 모든 구성원과 원활하게 대화할 수 있는 '커뮤니케이션' 능력이다. 해당 직군의 기술을&lt;span&gt;&amp;nbsp;&lt;/span&gt;일일이&lt;span&gt;&amp;nbsp;&lt;/span&gt;습득해서 협업을 하는 것은 불가능하다. 이 책은 그러한 커뮤니케이션을 위해 용어를 카테고리고 분류(상위 카테고리, 직군에 따른 분류) 설명할 예정이다.&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;오늘 읽은 소감은?&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;노마드코더 IT 5분 잡학사전의 북클럽 챌린지 완주에 자신감을 얻어 집에 있는 책들을 하나하나 완독하고 글을 남기려는 도전을 시작하게 되었다. 그리고 최종적인 목적은 Ebook 이외에 종이책들은 이제 중고로 팔거나 버리고 서재를 없애는 것이다.(...?) 노트북을 사고 yes24 크레마클럽이라는 구독형 독서 이용권을 받았는데 거기서 15년도 전후쯤 출간됐던 HTML 서적을 보다가 깨달았다.(그 책의 최종 과제는 HTML과 CSS로 홈페이지 만들기다. 근데 JS는&lt;span&gt;&amp;nbsp;&lt;/span&gt;안 곁들인...-_?)&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;궁금한 내용이나 잘 이해되지 않는 내용은?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번 챕터는 오리엔테이션 구간은 크게 새로운 내용&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 건&lt;span&gt;&amp;nbsp;&lt;/span&gt;없고 협업. 즉 업무 커뮤니케이션을 위해 이 책을 집필했다는 저자분의 의도를 알 수 있는 구간이었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;깃을&lt;span&gt;&amp;nbsp;&lt;/span&gt;패러디하신&lt;span&gt;&amp;nbsp;&lt;/span&gt;듯 깊(&lt;a href=&quot;https://gipp.co.kr/&quot;&gt;https://gipp.co.kr/&lt;/a&gt;)이라는 사이트를 통해 직강을&lt;span&gt;&amp;nbsp;&lt;/span&gt;운영 중이시다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;금전적으로 여유가 있는 분들은 저자 직강(유료)을 봐도 좋을 것 같다(하지만..)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;그리고 유튜브(&lt;a href=&quot;https://www.youtube.com/@_wy_choi&quot;&gt;https://www.youtube.com/@_wy_choi&lt;/a&gt;)도&lt;span&gt;&amp;nbsp;&lt;/span&gt;운영 중이신데&lt;span&gt;&amp;nbsp;&lt;/span&gt;최근 비전공자를 위한 이해할 수 있는 파이썬을 출판하셨고 관련 내용과&lt;span&gt;&amp;nbsp;&lt;/span&gt;몇 가지&lt;span&gt;&amp;nbsp;&lt;/span&gt;인사이트 영상을 올리셨다. 인사이트는 강의를 완강했다는 전제 하에 정리내용을 올리신 것으로 완독 후 복습하면서 보면 좋을 것 같다.&lt;/span&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ 이 글은 비전공자를 위한 이해할 수 있는 IT 지식(최원영&lt;span&gt;&amp;nbsp;&lt;/span&gt;저자)을&lt;span&gt;&amp;nbsp;&lt;/span&gt;기본 출처로 개인적인 공부내용을 요약한 것입니다. 문제가 있을 시&lt;span&gt;&amp;nbsp;&lt;/span&gt;연락 주시면&lt;span&gt;&amp;nbsp;&lt;/span&gt;조치하겠습니다.&lt;/p&gt;</description>
      <category>IT 지식</category>
      <category>비전공자를 위한</category>
      <category>이해할 수 있는</category>
      <category>최원영 저자</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/650</guid>
      <comments>https://comp-jae.tistory.com/650#entry650comment</comments>
      <pubDate>Fri, 24 Nov 2023 23:54:45 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 10장 객체 리터럴</title>
      <link>https://comp-jae.tistory.com/648</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciub7l/btsAuehORgO/qKadqGd9tPkv42HhgrbhMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciub7l/btsAuehORgO/qKadqGd9tPkv42HhgrbhMk/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciub7l/btsAuehORgO/qKadqGd9tPkv42HhgrbhMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fciub7l%2FbtsAuehORgO%2FqKadqGd9tPkv42HhgrbhMk%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;10장 객체 리터럴&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;10.1 객체란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트는 객체(object) 기반의 프로그래밍 언어이며, 원시 값을 제외한 자바스크립트를 구성하는 거의 모든 것 (함수, 배열, 정규 표현식 등) 이 객체다. 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조(data structure)다. 원시 값은 변경 불가능한 값(immutable value)이지만 객체 타입의 값은 변경 가능(mutable value)하다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. 이는 콜론( : )으로 구분한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949837&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var human = {
  name: 'Lee',
  age: 30
  sayHello : function () {
    console.log`Hello! My name is ${this.name}.`);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다. 프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메서드라 부른다. 위의 코드에서 human.sayHello()가 메서드다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;객체는 프로퍼티와 메서드로 구성된 집합체로 위의 코드에서 name과 age는 프로퍼티에 해당한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이처럼 상태와 동작을 하나의 단위로 구조화할 수 있어 유용하다. 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임을 객체지향 프로그래밍(OOP, Object Oriented Programming)이라 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;일급 객체란&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: 객체가 함수의 변수로 활용이 가능하거나 인자로 넘길 수 있거나, 변수에 할당할 수 있는 등, 연산을 지원할 때 일급객체라 한다. 일반적으로 객체 내에 자바스크립트의 함수는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;표현식으로 할당되는데 표현식이 결과가 값으로 반환되는 것과 마찬가지라 볼 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;※&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체와 함수의 연관관계란?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: 자바스크립트의 객체는 함수와 밀접한 관계를 가진다. 함수로 객체를 생성할 수도 있고, 함수 자체가 객체이기도 하기 때문에 함수와 객체는 분리해서 생각할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.2 객체 리터럴에 의한 객체 생성&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스기반 객체지향 언어는 new 연산자와 함께 생성자(Constructor)를 호출하여 인스턴스를 생성하는 방식으로 객체를 생성한다. 하지만 자바스크립트는 프로토타입 기반 객체지향 언어로 다양한 객체 생성 방법을 지원한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;인스턴스란&lt;/span&gt;?&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: 클래스는 인스턴스를 생성하기 위한 템플릿 역할을 하며 이 템플릿을 통해 메모리에 저장된 실체를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;인스턴스라 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;프로토타입이란&lt;/span&gt;&lt;/span&gt;?&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: 모든 기능을 내려받아 이용할 수 있는 모체 같은 것이다. 자바스크립트에서는 기본적으로 클래스가 없는 대신 객체의 원형을 이루는 프로토타입이라는 것이 존재한다. 최근 자바스크립트에 클래스 문법이 추가되었다.&lt;/span&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;Object 생성자 함수&lt;/li&gt;
&lt;li&gt;생성자 함수&lt;/li&gt;
&lt;li&gt;Object.create 메서드&lt;/li&gt;
&lt;li&gt;클래스(ES6)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1700132949840&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var person = {
  name: 'Lee',
  sayHello: function () {
    console.log(`Hello! My name is ${this.name}.`);
  }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가장 일반적이고 간단한 방법은 위와 같이 객체 리터럴을 사용하는 방법으로 중괄호 내에 0개이상의 프로퍼티를 정의해서 생성한다. 중괄호 내에 프로퍼티를 정의하지 않으면 빈 객체가 생성된다. 코드 블록은 중괄호를 닫을 때 세미콜론을 붙이지 않는다. 하지만 객체 리터럴은 중괄호가 코드 블록을 의미하지 않는다. 값으로 평가되는 하나의 표현식으로 평가하기 때문에 블록 끝에 세미콜론을 붙인다. 클래스 정의와 new 연산자를 통한 생성자 호출이 필요 없기 때문에 자바스크립트의 유연함과 강력함을 대표하는 생성 방식이다. 그 이외에 생성 방식은 모두 함수를 사용한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.3 프로퍼티&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;프로퍼티 키 : 빈 문자열을 포함한 모든 문자열 또는 심벌 값&lt;/li&gt;
&lt;li&gt;프로퍼티 값 : 자바스크립트에서 사용할 수 있는 모든 값&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로퍼티 키는 문자열이므로 따옴표( '...' 또는 &quot;...&quot; )로 묶어야 한다. 식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표를 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949841&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var person = {
  firstName : 'Dong-won',
  'last-name' : 'Kang',
  '': '',
  0:0,
  'last-name' : 'Kim'
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;네이밍 규칙을 준수하는 경우 따옴표를 생략할 수 있으나, 예를 들어 last-name은 식별자 네이밍 규칙을 준수하지 않기 때문에 따옴표를 생략할 수 없다.( -를 연산자가 있는 표현식으로 해석한다.) 빈 문자열도 프로퍼티 키로 사용할 수 있으나 의미를 갖지 못하므로 권장하지 않는다. 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환을 통해 문자열이 된다. 프로퍼티 키를 중복 선언하면 먼저 선언한 프로퍼티를 덮어쓰고 나중에 선언한 프로퍼티가 적용된다. 이때 에러가 발생하지 않는다는 것에 주의해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;※&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;네이밍 규칙이란&lt;/span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: 카멜케이스(&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;myVariable&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;calculateTotal), 파스칼케이스(&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;MyClass&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;CalculateTotal),&amp;nbsp; 스네이크케이스(&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;my_variable&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;calculate_total&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;)와 같이 식별자의 네이밍을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0f0f0f; text-align: left;&quot;&gt;일정한 형식으로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;하는 것을 의미한다.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.4 메서드&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로퍼티의 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라 부른다. 즉, 메서드는 객체에 묶여 있는 함수를 의미한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949842&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var user = {
  str: 20,
  int: 20,

  attack: function() {
    console.log(&quot;공격하였습니다.&quot;)
    return this.str*2; // 40
  }
}

  console.log(user.attack.call()); // NaN
  
  window.str = 20;
  
  console.log(user.attack.call()); // 40&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;메서드 내부에서 사용한 this 키워드는 객체 자신(위 예제에서는 user 객체)을 가리키는 참조변수다. 메서드 외부에서 사용한 this는 window 객체를 가리키게 되고 window내에 str은 &quot;&quot;로 선언될 것이기 때문에 call()함수로 호출 시 NaN이 출력된다. window 객체의 str에 20을 따로 할당하면 동일한 결과가 나오는 것으로 this가 호출위치에 따라 달라짐을 알 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.5 프로퍼티 접근&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;마침표 프로퍼티 접근 연산자(.)를 사용하는 마침표 표기법(dot notation)&lt;/li&gt;
&lt;li&gt;대괄호 프로퍼티 접근 연산자([...])를 사용하는 대괄표 효기법(bracket notation)&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;대괄호 프로퍼티 접근 연산자 내부에서 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다. 네이밍 규칙을 준수하지 않는 이름은 반드시 대괄호 표기법을 사용해야 하며, 객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다. 이때 ReferenceError가 발생하지 않는데 주의해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700132949844&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var key = 'age';
var person = {};

person[key] = 30;

console.log(person.age); // 30&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;위의 코드는 빈 person 객체에 새로운 프로퍼티를 추가하고 있다. 이 때 key라는 프로퍼티 키가 person 객체 내부에 없기 때문에 변수 key를 가져오게 되고, person['age']와 같은 결과가 된다. 즉, person['age'] = 30으로 age 키에 30 값을 할당한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.6 프로퍼티 값 갱신&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미 존재하는 프로퍼티에 값을 재할당하면 프로퍼티 값이 갱신된다. 이는 단점이 더 큰데 기존에 동일한 프로퍼티가 있다는 어떠한 메세지도 나타나지 않기 때문이다. 타입스크립트가 나온 여러 이유 중 하나이기도 하다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.7 프로퍼티 동적 생성&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;존재하지 않는 프로퍼티에 대해 값을 할당하면 프로퍼티가 동적으로 생성 및 추가되고 값이 할당된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949845&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var human = {
  name: 'Lee'
  };
  
human.age = 30;

console.log(human); // {name: 'Lee', age: 30}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.8 프로퍼티 삭제&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;delete 연산자는 객체의 프로퍼티를 삭제한다. delete 연산자의 피연산자는 프로퍼티 값에 접근할 수 있는 표현식이어야 한다. 주의할 것은 존재하지 않는 프로퍼티를 삭제하더라도 에러가 발생하지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949845&quot; class=&quot;pgsql&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var person = {
    name : 'Lee',
    age : 20
}

delete person[&quot;a&quot;+&quot;ge&quot;] // true

console.log(person) // {name: 'Lee'}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.9 ES6에서 추가된 객체 리터럴의 확장 기능&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.9.1 프로퍼티 축약 표현&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로퍼티 값은 변수에 할당된 값, 즉 식별자 표현식일 수도 있다. 프로퍼티의 값으로 전역객체에 있는 변수를 값으로 할당할 수 있다는 뜻이다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949846&quot; class=&quot;dart&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var num = 20;

var obj = {
  output : num
};

console.log(obj.output); // 20&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키를 생략할 수 있다. 이때 프로퍼티 키는 변수 이름으로 자동 생성된다. 즉 아래와 같이 객체를 리터럴로 생성하면서 프로퍼티 키만 기재하면 동일한 변수명이 있다면 해당 변수의 할당된 값이 프로퍼티 값으로 자동 할당된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949846&quot; class=&quot;yaml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let x = 1, y = 2;

const obj = { x, y };

console.log(obj); // { x: 1, y: 2 }&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;10.9.3 메서드 축약 표현&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ES6에서는 메서드를 정의할 때 function 키워드를 생략한 축약 표현을 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700132949847&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;const obj = {
  name: 'Lee',

  sayHi() {
    console.log('Hi! ' + this.name);
  }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적인 function 형태로 메서드를 생성 시 new 생성자를 통해 인스턴스를 생성할 수 있다. 그런데 축약형으로 메서드를 생성하면 해당 메서드 자체에 생성자(constructor)가 없는 형태로 생성되기 때문에 new 생성자 함수로 인스턴스 생성이 되지 않는다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오래전에 자바책을 먼저 접했었는데 클래스를 기반으로 한 new 생성자로 객체와 인스턴스 챕터를 보면서 절망했던 기억이 난다. 객체와 인스턴스는 많은 교재에서 설명할 때 자동차나 붕어빵을 전&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;통적으로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;선호하는 것 같다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;물론 그 설명도 좋지만 나는 인강 중에 객체와 인스턴스를 게임 신규 캐릭터 생성으로 설명해 주신 강의로 확실히 개념을 잡았다. 그리고 자바스크립트에서는 객체 리터럴로 간단히 객체가 생성되는 것을 보니 신세계였다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;객체 프로퍼티 접근 시에는 마침표와 대괄호 둘 다 접근이 가능한데 json 파일에서 반복해서 프로퍼티를 가져와야 할 때 json파일 자체에 네이밍 규칙을 준수하지 않는 데이터가 종종 있어서 대괄호 접근 연산자를 좀 더 선호하게 되는 것 같다. 여담으로 과거 부트캠프 수강 시 강사님이 '둘 다 똑같은데 반복문 쓸 때는 대괄호로 하세요'라고 해서 한동안 이유도 모르고 대괄호로 썼다...; ES6의 축약형 같은 경우 추후 나올 객체 구조분해할당과 일맥상통하는 부분이 있어서 알고 넘어가면 리액트 공부시 도움이 된다.&lt;/p&gt;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/648</guid>
      <comments>https://comp-jae.tistory.com/648#entry648comment</comments>
      <pubDate>Tue, 14 Nov 2023 21:59:18 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 9장 타입 변환과 단축 평가</title>
      <link>https://comp-jae.tistory.com/647</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rzNXe/btsAr4fB0Aq/SSnwnre40kd6g9AYQXlhj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rzNXe/btsAr4fB0Aq/SSnwnre40kd6g9AYQXlhj0/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rzNXe/btsAr4fB0Aq/SSnwnre40kd6g9AYQXlhj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrzNXe%2FbtsAr4fB0Aq%2FSSnwnre40kd6g9AYQXlhj0%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;9장 타입 변환과 단축 평가&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;9.1.1 타입 변환이란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트의 모든 값은 타입이 있다. 개발자가 의도적으로 타입을 변환하는 것을 '명시적 타입 변환' 또는 '타입 캐스팅'이라 한다. 아래 코드 예시는 숫자 11을 문자열 11로 명시적 타입 변환한 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781174&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x = 11;

var str = x.toString();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동변환 되기도 하는데 이를 '암묵적 타입 변환' 또는 '타입 강제 변환'이라 한다. 아래 코드 예시는 숫자와 문자열을 연산하여 문자열로 강제 형 변환한 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781174&quot; class=&quot;ebnf&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var str = 1 + '';&lt;/code&gt;&lt;/pre&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 형 변환이 기존 원시값을 직접 변경하는 것은 아니다. 타입 변환이란 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것이다. 즉, 암묵적 타입 변환은 기존 변수 값을 재할당하여 변경하는 것이 아니라 타입 변환해 새로운 타입의 값을 만들어 단 한 번 사용하고 버린다. 타입 변환 결과를 예측하지 못하거나 예측이 결과와 일치하지 않는다면 오류를 생산할 가능성이 높아진다. 중요한 것은 코드를 예측할 수 있어야 한다는 것이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.2 암묵적 타입 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;암묵적 타입 변환이 발생하면 문자열, 숫자, 불리언과 같은 원시 타입 중 하나로 타입을 자동 변환한다. Symbol 타입은 아래와 같이 타입 에러가 발생한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700127781175&quot; class=&quot;dart&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(Symbol()) + '' // TypeError: cannot convert a symbol value to a string&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.2.1 문자열 타입으로 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;+ 연산자는 피연산자 중 하나 이상이 문자열일 때 문자열 연결 연산자로 동작하고, 모든 피연산자는 문맥상 문자열타입으로 암묵적 타입 변환되어 문자열 값을 반환한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781175&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;1 + '2' // '12'

`1 + 1 = ${1 + 1}` // &quot;1 + 1 = 2&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;템플릿 리터럴의 표현식 삽입은 표현식의 평가 결과를 문자열 타입으로 암묵적 타입 변환한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.2.2 숫자 타입으로 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;+를 제외한 산순 연산자는 숫자 값을 만드는 것이 목표다. 따라서 코드 문맥상 모두 숫자 타입으로 강제 형 변환하여 평가 후 결과를 반환한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1700127781176&quot; class=&quot;basic&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;1 - '1' // 0
1 * 'one' // NaN&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비교 연산자의 역할은 불리언 값을 만드는 것으로 숫자 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다. 빈 문자열( '' ), 빈 배열( []), null, false는 0으로, true는 1로 변환되고, 객체와 빈 배열이 아닌 그 외 배열, undefined는 반환되지 않아 NaN이 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781177&quot; class=&quot;actionscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;+'' // 0
+null // 0
+[] // 0
+false // 0&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.2.3 불리언 타입으로 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트 엔진은 불리언 타입이 아닌 값을 Truthy 값(참으로 평가되는 값) 또는 Falsy 값(거짓으로 평가되는 값)으로 구분한다. 불리언 값으로 평가되어야 할 문맥에서 Truthy 값은 true로, Falsy 값은 false로 암묵적 타입 변환된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Falsy 값이란?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: Boolean 문맥에서 false 로 평가되는 값이다. false, undefined, null, 0, -0, NaN, ''(빈 문자열)&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.3 명시적 타입 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;명시적 타입 변환의 방법에는 표준 빌트인 생성자 함수(String, Number, Boolean)를 new 연산자 없이 호출하는 방법과 빌트인 메서드를 사용하는 방법, 암묵적 타입 변환 방법이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;표준 빌트인 생성자 함수와 빌트인 메서드란?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;:자바스크립트에서 기본 제공하는 함수로, 표진 빌트인 생성자 함수는 객체를 생성하기 위한 함수이며 new 연산자와 함께 호출한다. 표준 빌트인 메서드는 String, Number와 같은 new 연산자 없이 사용하는 메서드로 빌트인은 '미리 만들어진'을 의미한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.3.1 문자열 타입으로 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;문자열 타입으로 변환하는 방법은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;String 생성자 함수를 new 연산자 없이 호출하는 방법&lt;/li&gt;
&lt;li&gt;toString 메서드를 사용하는 방법&lt;/li&gt;
&lt;li&gt;문자열 연결 연산자를 이용하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1700127781178&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;1. String 생성자 함수를 new 연산자 없이 호출하는 방법
String(126);

2. toString 메서드를 사용하는 방법
(126).toString();

3. 문자열 연결 연산자를 이용하는 방법
126 + '';&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.3.2 숫자 타입으로 변환&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;숫자타입으로 변환하는 방법은 아래와 같다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Number 생성자 함수를 new 연산자 없이 호출하는 방법&lt;/li&gt;
&lt;li&gt;parseInt.parseFloat 함수를 사용하는 방법(문자열만 가능)&lt;/li&gt;
&lt;li&gt;+ 단항 산술 연산자를 이용하는 방법&lt;/li&gt;
&lt;li&gt;* 산술 연산자를 이용하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1700127781179&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. Number 생성자 함수를 new 연산자 없이 호출하는 방법
Number('10.51'); // 10.53

2. parseInt.parseFloat 함수를 사용하는 방법(문자열만 가능)
parseInt('-1'); // -1

3. + 단항 산술 연산자를 이용하는 방법
+ '0'; // 0

4. * 산술 연산자를 이용하는 방법
true * 1; // 1&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.3.3 불리언 타입으로 변환&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Boolean 생성자 함수를 new 연산자 없이 호출하는 방법&lt;/li&gt;
&lt;li&gt;! 부정 논리 연산자를 두 번 사용하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1700127781180&quot; class=&quot;arcade&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;1. Boolean 생성자 함수를 new 연산자 없이 호출하는 방법
Boolean('x'); // true

2. ! 부정 논리 연산자를 두 번 사용하는 방법
!!null; // false&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;그런데 불리언 타입은 굳이 이렇게 쓸 상황이 생길까 싶다..;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.4.1 논리 연산자를 사용한 단축 평가&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;논리합( || ) 또는 논리곱( &amp;amp;&amp;amp; ) 연산자 표현식은 언제나 2개의 피연산자 중 한쪽으로 평가된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781181&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'Cat' &amp;amp;&amp;amp; 'Dog' // &quot;Dog&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이 두 개의 피연산자가 모두 true로 평가될 때 true를 반환한다. 좌항에서 우항으로 평가가 진행되는데 'Cat'은 Truthy 값이므로 true로 평가되되는데 앞서 이야기한 대로 &amp;amp;&amp;amp;은 두 개의 피연산자가 모두 평가되어야 표현식의 평가 결과가 결정되기 때문에 'Dog'도 평가되고, 'Dog'도 마찬가지로 true로 평가된다. 이때 둘 다 true라면 최종 평가된 'Dog'가 반환된다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781181&quot; class=&quot;awk&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;'Cat' || 'Dog' // &quot;Cat&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;논리합 경우 두 개의 피연산자 중 true가 나오면 그 이후 피연산자는 평가하지 않아도 표현식을 평가할 수 있다. 그래서 'Cat'이 그대로 반환되고 'Dog'는 평가하지 않게 된다. 이처럼 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는데 이를 단축 평가라 한다. 단축평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다. 아래 두 if문을 보면 첫 번째 if문은 우항이 평가되지 않아 (num+=15)가 평가되지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781181&quot; class=&quot;maxima&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let num = 1;

if((4 &amp;gt; 0) || (num += 15)) {
  console.log(num)
}

if((num +=1) || (4 &amp;gt; 0)) {
  console.log(num)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;단축 평가를 사용하면 if 문을 대체할 수 있는데 React에서 if문을 쓸 일이 잘 없기 때문에 삼항연산자를 많이 사용하듯이 단축 평가도 자주 사용하게 되니 잘 익혀두어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700127781182&quot; class=&quot;delphi&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var left = true;

var message ='';

message = left &amp;amp;&amp;amp; '완료'

console.log(message); // 완료&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.4.1 함수 매개변수에 기본 값을 설정할 때&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;함수를 호출할 때 인수를 전달하지 않으면 매개변수에는 undefined가 할당된다. 이 때 단축평가를 사용해 기본값을 설정하면 undefined로 인해 발생할 수 있는 에러를 방지할 수 있다. 아래의 두 코드는 동일한 결과를 반환하는데 두 번째 코드는 ES6의 문법으로 매개변수에 초기값을 아예 할당할 수 있다는 장점이 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781183&quot; class=&quot;scilab&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function getStringLength(str) {
  str = str || '';
  return str.length;
}

function getSTringLength(str = ''){
  return str.length;
}

getSTringLength(); // 0
getSTringLength('hi'); // 2&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;9.4.2 옵셔널 체이닝 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ES11에서 도입된 옵셔널 체이닝 연산자 ?. 는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면( 피연산자라 Falsy 값이라도 ) 우항의 프로퍼티 참조를 이어간다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #313130; text-align: start;&quot;&gt;선언이 완료된 변수를 대상으로만 동작한다. 예를 들어 어떤 게임에 캐릭터 객체가 있는데 이 객체에 지력, 힘, 체력, 마력 등 여러 프로퍼티가 있다고 치자. 그런데 여러 캐릭터 중 '천사' 캐릭터는 '마력'이라는 프로퍼티가 어울리지 않아서 '천사' 캐릭터 객체를 만든 적이 있다면 이 '마력' 프로퍼티를 삭제해주고 싶은 거다. 아래 코드와 같이 표현할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700127781184&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;let 천사 = {
  힘 : 20,
  지력 : 20,
  마력 : 250
}

delete 천사?.마력 // 힘, 지력 프로퍼티만 남게 된다.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;챗 GPT에게 옵셔널 체이닝에 대해 물어보고 추가적인 예시 코드를 받았다. 객체의 속성이나 메서드에 안전하게 접근하기 위한 기술 중 하나로,&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;아래와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;중첩된 객체에서 하위 객체가 존재하지 않을 수 있는 상황에서 유용하게 활용할 수 있다고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781184&quot; class=&quot;cs&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 객체 A가 중첩된 상황을 가정
const objectA = {
  // 객체 B가 존재하지 않을 수 있음
  objectB: {
    // 객체 C가 존재하지 않을 수 있음
    objectC: {
      // 실제 값
      value: &quot;Hello, Optional Chaining!&quot;,
    },
  },
};

// 옵셔널 체이닝을 사용하여 안전하게 속성에 접근
const result = objectA?.objectB?.objectC?.value;

console.log(result); // 만약 어느 하나라도 존재하지 않으면 undefined 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;null 또는 undefined 인지 판단할 때 삼항 연산자의 축약형같은 느낌으로 사용할 수도 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1700127781185&quot; class=&quot;go&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var go = &quot;&quot;;

var result = go?.length; // 0

변수 go 가 null이나 undefined인지 판별시도후
둘 다 아니기 때문에 0이 할당된다.&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;역시 악명높은 자바스크립트답게 타입변환에 대해서도 예외사항이 많아 어떤 형식이 반환되거나 타입에러가 나타나는지 다 외우기는 어려울 것 같다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;일단 코테에서 많이 사용하니까 기본적으로 문자열, 숫자열 형 변환은 알고 있다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;옵셔널 체이닝 연산자는 책만 봐서는 감이 안잡혀서 Chat GPT 선생님의 도움을 추가로 구했다. 세상이 좋아져서 기한을 주고 프론트엔드 개발자 공부 커리큘럼을 짜달라고 하니까 커리큘럼도 짜준다.;; 아직 9장인데 단원별로 깊은 내용들이 있어서 좀 무서워지고 있는데 Chat GPT 선생님과 함께 진행해야겠다.&lt;/p&gt;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/647</guid>
      <comments>https://comp-jae.tistory.com/647#entry647comment</comments>
      <pubDate>Mon, 13 Nov 2023 21:57:17 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 8장 제어문</title>
      <link>https://comp-jae.tistory.com/645</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etE8cm/btsz5nGD8JE/KgWmD9DLRBIEcCFgABKXBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etE8cm/btsz5nGD8JE/KgWmD9DLRBIEcCFgABKXBK/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etE8cm/btsz5nGD8JE/KgWmD9DLRBIEcCFgABKXBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetE8cm%2Fbtsz5nGD8JE%2FKgWmD9DLRBIEcCFgABKXBK%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8장 제어문&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;8.1 블록문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;블록문은 0개 이상의 문을 중괄호로 묶은 것으로 자바스크립트는 블록문을 하나의 실행 단위로 취급한다.&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;블록문의 끝에는 세미콜론을 붙이지 않는다.(블록문 자체가 하나의 종결을 의미하기 때문) 블록 내에 일반적인 구문을 넣으면 블록이 종료되면서 undefined를 반환하고 종료되나 key와 value를 넣게 되면 자바스크립트 엔진은 해당 블록은 객체라고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;판단하고 해당 객체를 반환하는 기현상이 발생한다..;&lt;/p&gt;
&lt;pre id=&quot;code_1699618775383&quot; class=&quot;angelscript&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;{ let num = 10; } // undefined

{ a : 1 } // {a:1}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.2 조건문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건문은 주어진 조건시의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정한다. 조건은 불리언 값으로 평가될 수 있는 표현식이다. 자바스크립트는 if ... else 문과 switch 문으로&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;두 가지 조건문을 제공한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.2.1 if ... else 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;if문의 조건식이 불리언 값이 아닐 경우 불리언 값으로 강제 변환되어 실행할 코드 블록을 결정한다. 대부분의 if ... else 문은 삼항 조건 연산자로 바꿔 쓸 수 있다. 삼항 조건 연산자 표현식은 값처럼 사용할 수 있기 때문에 변수에 할당할 수 있어 유용하다. if ... else 문 자체는 값으로 사용할 수 없기 때문에 변수에 할당할 수 없다.&lt;/p&gt;
&lt;pre id=&quot;code_1699584187588&quot; class=&quot;dart&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;경우의 수가 3가지인 삼항 조건 연산자

var num = 0;
var kind = num ? ( num &amp;gt; 0 ? '양수' : '음수') : '영';
console.log(kind); // '영'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건에 따라 단순히 값을 결정하여 변수에 할당하는 경우 삼항 조건 연산자를 사용하는 편이 가독성이 좋다. 하지만 여러 줄의 문이 필요하다면 if ... else 문을 사용하는 편이 가독성이 좋다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.2.2 switch 문&lt;/h3&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;break 문이 없다면 case문의 표현식과 일치하지 않더라도 실행 흐름이 다음 case 문으로 연이어 이동하기 때문에 default를 제외한 각 case에는 break 문을 기입하는 것이 일반적이다.&amp;nbsp;default문은 가장 하단에 위치해야 한다. 아래와 같이 조건에 해당하지 않는 경우 가장 마지막 case인 'February'가 반환된다..; 다른 위치에 default문을 위치시킬 거라면 break 문을 같이 둬야 하는데 굳이..&lt;/p&gt;
&lt;pre id=&quot;code_1699619470425&quot; class=&quot;processing&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var month = 13;

switch (month) {
  default: monthName = 'Invalid month';
  case 1: monthName = 'January'; 
  case 2: monthName = 'February'; 
  
} // 'February'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;break 문을 생략한 폴스루가 유용한 경우도 있는데 if ... else 문으로 해결할 수 있다면 if ... else 문을 사용하는 편이 좋고, 가독성이 더 좋다면 switch 문을 사용하는 편이 좋다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ 폴스루(fall-through)란?&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;하나의 case 절에서 break 문을 사용하지 않고 다음 case 절로 코드 흐름이 이어지는 것&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.3 반복문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건이 거짓일 때까지 반복해서 코드 블록을 실행하는 것이다. for, while, do ... while문을 기본 제공한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.3.1 for 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;for문의 변수 선언문, 조건식, 증감식은 모두 옵션이므로 반드시 사용할 필요는 없다. 단, 셋 다 선언하지 않고 사용하면 무한루프가 되니 주의해야 한다. for 문 내에 for 문을 중첩해 사용할 수 있는데 이를 중첩 for 문이라 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.3.2 while 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;for문은 반복 횟수가 명확할 때 주로 사용하고 while 문은 반복 횟수가 불명확할 때 주로 사용한다. 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 강제 변환하여 실행한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699620450811&quot; class=&quot;lasso&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;while (true) { ... }&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;정재남 님이 redux-saga 라이브러리가 위와 같은 무한루프 방식으로 이벤트를 탐지해서 처리한다고 하는데 속도 부하를 어떻게 처리하는지 나중에 공부해야겠다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;redux-saga란?&lt;br /&gt;&amp;nbsp;: react/redux의 순수하지 않은 동작(개인적으로는 이상동작이라고 생각한다)을 감지해서 제어할 수 있는 라이브러리다. 예를 들어 사용자가 동일한 api를 여러 번 호출할 경우, 가장 마지막 호출의 response만 받아오도록 제어한다거나 특정 액션이 발생하면 그에 따라 다른 함수나 자바스크립트 코드가 동작하는 식이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.4 break 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;break문은 코드 블록을 탈출하는 역할을 하는데 반복문을 더 이상 진행하지 않아도 될 때 불필요한 반복을 피할 수 있어 유용하다. 일반적으로 레이블 문, 반복문, 또는 switch 문의 코드 블록을 탈출한다. 이 외에 문에서 break 문을 사용하면 SyntaxError(문법 에러)가 발생한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.4 label 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;프로그램의 실행 순서를 제어할 때 사용한다. 예를 들어 이중 for 문의 경우 두 for문의 조건식을 모두 만족해야 종료가 되지만, label 문을 사용하면 특정한 조건일 때 for문 전체를 빠져나온다. 대박..&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699620802494&quot; class=&quot;matlab&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;outer : for (let i = 0; i &amp;lt; 5 ; i++) {
  for (let j = 0; j &amp;lt; 2; j++) {
    if (i + j === 5) break outer;
    console.log(`inner [${i}, ${j}]`);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 가독성이 나쁘니 쓰지 말라는 게 정재남 님과 이응모 님의 공통의견. ㅎㅎ 사실 아래와 같이 해도 결과는 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1699620958338&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 0; i &amp;lt; 5 ; i++) {
  for (let j = 0; j &amp;lt; 2; j++) {
    if (i + j === 5) break;
    console.log(`inner [${i}, ${j}]`);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또는 아래와 같이 레이블문으로 된 코드를 여러 개 만들어 따로따로 제어하는 것도 가능하겠지만 마찬가지로 가독성이 나쁘고 의도치 않은 결과가 나올 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1699621182181&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;inner : for (let a = 0; a &amp;lt; 5 ; a++) {
  for (let b = 0; b &amp;lt; 2; b++) {
    console.log(`inner [${a}, ${b}]`);
    if (a + b === 3) break inner;
  }
}

outer : for (let i = 0; i &amp;lt; 5 ; i++) {
  for (let j = 0; j &amp;lt; 2; j++) {
    console.log(`inner [${i}, ${j}]`);

    if (i + j === 5) break outer;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;8.5 continue 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;반복문의 코드 블록 실행을 현 지점에서 중단하고, 반복문의 증감식으로 실행 흐름을 이동시킨다. break 문처럼 반복문을 탈출하지는 않는다. 실행해야 할 코드가 한 줄이라면 if문을 그대로 사용하는 것도 좋지만 그렇지 않는 경우 continue를 사용하면 추가적인 들여 쓰기 및 중괄호를 생략할 수 있어 가독성이 더 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699877767109&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var string = 'Hello ahahaha'
var search = 'h';
var count = 0;

for(var i = 0; i &amp;lt; string.length; i++){
  if (string[i] !== search) continue;
  
  count++;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;프로그래밍 언어를 판단하는 한 가지 기준으로 제어문을 이야기한다. 그렇기 때문에 HTML이나 CSS가 프로그래밍 언어가 아니라고 강력하게 주장하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSQIKX/btsz5qwykbd/YKlKrjNm59yNwYKHK3iZq1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSQIKX/btsz5qwykbd/YKlKrjNm59yNwYKHK3iZq1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSQIKX/btsz5qwykbd/YKlKrjNm59yNwYKHK3iZq1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSQIKX%2Fbtsz5qwykbd%2FYKlKrjNm59yNwYKHK3iZq1%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;400&quot; height=&quot;434&quot; data-filename=&quot;img.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;제어문까지만 공부해도 기본적인 코딩은 가능하다는 이야기가 있기 때문에 이 부분까지를 가장 기본적인 단계라 볼 수 있지 않을까. 코딩테스트 문제 풀 때도 프로그래머스 level0, 1 정도는 for문으로 대부분 해결 가능했던 것 같다. 물론 실행속도까지 조건에 들어가 버리면 배열 고차함수(forEach, map, filter, reduce 등) 없이 안되기는 하더라만..&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6장 정도부터 책 정리하면서는 코드나 이미지를 첨부하지 않고 깔끔하게 작성하리라 다짐했는데 코드 입력 없이 말로만 기록하는 것은 한계가 있는 것 같다. 능력 부족인가 싶기도..; 어쨌든 '결과가 불리언으로 강제변환', '표현식이다'.라는 문구들이 쉽게 간과할 수 있는 부분이지만, 출력 형태를 의미하기 때문에 결과값이 달라진다는 뜻이거나, 표현식이라는 건 다른 곳에 할당할 수 있다는 의미라는 것을 생각하면서 꼼꼼히 봐야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;물론 이론과 실제는 항상 괴리가 있어서 코딩은 별개의 문제다..ㅜㅜ.. 코딩하러 가야겠다..&lt;/p&gt;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/645</guid>
      <comments>https://comp-jae.tistory.com/645#entry645comment</comments>
      <pubDate>Fri, 10 Nov 2023 20:43:14 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 7장 연산자</title>
      <link>https://comp-jae.tistory.com/644</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FMI8o/btsz2nsqdbe/7fHhtbH6FgIpZqkFB7SMS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FMI8o/btsz2nsqdbe/7fHhtbH6FgIpZqkFB7SMS1/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FMI8o/btsz2nsqdbe/7fHhtbH6FgIpZqkFB7SMS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFMI8o%2Fbtsz2nsqdbe%2F7fHhtbH6FgIpZqkFB7SMS1%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7장 연산자&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;연산자는 하나 이상의 표현식을 대상으로 연산을 수행해 하나의 값을 만든다. 이때 연산의 대상을 피대상자라 한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;7.1 산술 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;수학적 계산을 수행해 새로운 숫자 값을 만들고 연산이 불가능할 경우, NaN을 반환한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.1.1 이항 산술 연산자( +, -, / )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이항 산술 연산자는 2개의 피연산자를 연산하여 새로운 값을 만든다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.1.2 단항 산술 연산자( ++, -- )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단항 산술 연산자는 1개의 피연산자를 산술 하여 값을 만드는데 피연산자의 값을 변경하는 부수 효과가 있다. 1개의 피연산자를 대상으로 연산하는 것이니 결괏값을 해당 피연산자에 암묵적 할당(재할당) 할 수밖에 없다. 증가/감소(++/--) 연산자는&amp;nbsp; 피연산자 앞이나 뒤에 붙일 수 있고, 이 위치에 따라 피연자의 값을 연산하는 시점이 달라진다. &lt;br /&gt;숫자 타입이 아닌 피연산자에 +나 - 단항 연산자를 사용하면 숫자 타입으로 변환한 값을 생성해서 반환한다. 재할당 되는 것은 아니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.1.3 문자열 연결 연산자( '1' + 1 )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;+ 연산자는 피연산자 중 하나 이상이 문자열인 경우 결과를 문자열로 반환한다. 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 하는데 1 + true의 경우 true를 숫자 타입인 1로 강제 변환 후 연산을 수행한다. 이를 암묵적 타입변환 또는 타입 강제 변환이라고 한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.2 할당 연산자( =, +=, /=, *= )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;할당연산자는 대입연산자( = ) 기호가 포함된 모든 연산자를 말한다. 피연산자의 평가(실행) 결과를 좌항에 있는 변수에 할당하며, 결과적으로 값이 기존 변수에 재할당 된다. 할당문도 '할당된 값'이라는 결과값이 해당 변수를 통해 평가(실행)되기 때문에 표현식이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.3 비교 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;좌항과 우항의 피연산자를 비교해 결과를 불리언 값으로 반환한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.3.1 동등/일치 비교 연산자( ==, ===, !=, !== )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;동등 비교 연산자( ==, != )는 좌항에 대해 우항을 암묵적 타입 변환을 통해 타입을 강제로 일치시킨 후 값을 비교한다. 일치 비교 연산자( ===, !== )는 좌항과 우항의 피연산자가 타입도 같고 값도 같은지 비교하기 때문에 조건문에서 값을 비교할 때는 일치 비교 연산자를 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;NaN은 자신과 일치하지 않는 유일한 값으로 Number.isNaN 함수를 사용해서 확인해야 한다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-size: 0.87em;&quot;&gt;※ isNaN vs Number.isNaN ?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;isNaN은 undefined나 빈 객체 {} 도 true를 반환하는 문제가 있다. ES6부터 도입된 Number.isNaN이나 Object.is 함수를 통해 정확한 확인이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.3.2 대소 관계 비교 연산자( &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;= )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;피연산자 간 크기를 비교하여 불리언 값을 반환한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.4 삼항 조건 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;조건문의 한 가지 형태로 React는 if문 사용이 안되기 때문에 삼항 연산자를 필수로 활용할 수 있어야 한다. 조건식의 평가(실행) 결과가 불리언(true나 false)이 아니면 불리언 값으로 암묵적 타입 변환한다. if ... else 문은 조건문으로 표현식이 아니다. 따라서 조건식 부분에 if .. else 같은 조건문을 넣을 수 없다. 삼항 연산자는 조건식의 결과로 값이 반환되기 때문에 이 자체로 표현식인 문이다(!) 따라서 값을 할당할 수 있는 곳에는 삼항 연산자를 할당할 수 있어 매우 유용하다. 단, 조건에 따라 수행해야 할 문이 여러개라면 if ... else 문의 가독성이 더 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699441357111&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;조건식 ? 참일 경우 반환할 값 : false일 때 반환할 값

console.log( (3 &amp;lt; 0) ? &quot;0이 크다&quot; : &quot;3이 크다&quot; )&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.5 논리 연산자( ||, &amp;amp;&amp;amp;, ! )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;논리 연산자는 좌항과 우항의 피연산자를 비교해 불리언 값을 반환한다. 논리 부정 연산자( ! )의 경우 피연산자가 불리언 값이 아니면 falsy 값은 false, 그 외에는 true인 불리언 타입으로 암묵적 타입 변환 후 값을 반환한다. 논리합( || ) 또는 논리곱( &amp;amp;&amp;amp; )은 결과값이 불리언 값이 아닐 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699445358031&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;논리곱( &amp;amp;&amp;amp; ) 연산자는 두 항이 모두 true일 때만 true를 반환한다.
true &amp;amp;&amp;amp; true;

논리합( || ) 연산자는 두 항 중 하나라도 true일 때 true를 반환한다.
true || false;
false || true;

논리 부정( ! ) 연산자는 불리언값을 반대로 반환한다.
!false;

!&quot;good&quot; // false

'Cat' &amp;amp;&amp;amp; 'Dog'; // 'Dog'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※ falsy 값이란?&lt;br /&gt;&lt;/span&gt;&amp;nbsp;: 자바스크립트에서 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;문맥상 false로 평가하는 값이다.&lt;/span&gt; null, undefined, false, NaN, &quot;&quot;, 0, -0, 0n 등이 있다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※ 드모르간의 법칙이란?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;nbsp;: !( x || y ) === ( !x &amp;amp;&amp;amp; !y ) 양쪽이 같다는 법칙으로 벤다이어그램을 직접 그려가며 해보면 눈으로도 확인할 수 있다.&lt;br /&gt;&lt;/span&gt;&amp;nbsp; 논리 부정( ! ) 연산자가 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;괄호 밖으로&lt;span&gt; 나오면 괄호 내 각 항에서는 제거되고 피연산자 사이 논리곱( &amp;amp;&amp;amp; )이나 논리합( || )이 반대가 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.6 쉼표 연산자( , )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;피연산자를 왼쪽부터 차례대로 평가하고 결과는 마지막 피연산자에 대해서만 반환한다. 정재남 님이 스터디 영상에서 좋지 않은 코드니까 쓰지 말라셨다ㅋㅋ 여러 변수를 할당하는 목적으로 쓸 수도 있겠지만 특별한 사항이 아니면 변수는 선언과 동시에 할당하는 게 가장 좋고, 마지막 변수를 반환할 거면 굳이 이렇게 쓸 이유가 없다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699446767300&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x, y, z;

x = 1, y = 2, z = 3; // 3&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.7 그룹 연산자( ( ) )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;연산자 중 우선순위가 가장 높다. 나눗셈, 곱셈에서 괄호를 쓰냐 안 쓰냐에 따라 결과가 다른 것처럼 먼저 연산해야 할 부분은 괄호로 묶어 주면 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.8 typeof 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;데이터 타입을 문자열로 반환한다. null 값의 경우 object를 반환하는 오류가 있다. null이 할당된 변수와 비교 시 일치 연산자( === )를 사용해야 한다. 배열도 object를 반환하기 때문에 Array.isArray()를 통해 타입을 확인하는 게 정확하다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.9 지수 연산자( ** )&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ES7에서 도입된 것으로 거듭제곱을 계산할 때 기존에는 Math.pow(값, 지수)의 형태로 사용했던 것을 간단하게 표현할 수 있어 가독성이 좋다. 음수의 경우는 기호와 값을 괄호로 묶어서 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699447863917&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;5 ** 2
(-5) ** 2

// 25&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.10 그 외의 연산자&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;?. 옵셔널 체이닝 연산자. 9장에서 상세하게 나오는데 React에서 자주 사용한다. delete 연산자. 10장에서 소개된다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.11 연산자의 부수 효과&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;할당 연산자( = ) , 증가/감소 연산자( ++ / -- ), delete 연산자는 피연산자의 값을 변경하거나 객체의 프로퍼티를 삭제하는 등 변수나 객체의 값에 영향을 준다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;7.12 연산자 우선순위&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;여러 개의 연산자로 이뤄진 문이 실행될 때 연산자가 실행 되는 순서가 있는데 우선적으로 연산해야 할 부분을 괄호()로 묶는 것을 권장한다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정재남 님이 스터디 영상에서 for 문의 증감식에 단항 산술 연산자 ++i 와 i++ 를 대입해 보시는데 관습적으로 i++를 사용하다 보니 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;깊게 생각해 본 적이 없어서 그런가 둘 다 같은 결과인 게 좀 신기했다.&lt;span&gt; 변수에 따로 연산해서 콘솔로 결과를 보여줄 때는 위치에 따라 다르다 보니 당연히 for문에서도 결과가 달라진다고 생각했다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;삼항연산자는 과거 javascript를 처음 배울 때 가독성이 좋지 않으니 쓰지 말라고 강사 선생님이 말씀하셨는데 지금 React를 공부하다 보니 삼항연산자만큼 중요한 게 없다;; 아마 단계에 따라 추가적으로 알려주시려고 하지 않았나 싶긴 한데 당시에 뭣도 모르고 삼항연산자는 가독성이 안 좋으니 쓰지 말라고 블로깅 했던 걸 생각하면...&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;그 외 isNaN과 Number.isNaN이 별개의 함수로 기억해둬야 할 것 같고, 옵셔널 체이닝이 등장하는데 마찬가지 React에서 많이 쓰이기 때문에 9장에서 집중해서 봐야 할 것 같다.&lt;/span&gt;&lt;/span&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;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/644</guid>
      <comments>https://comp-jae.tistory.com/644#entry644comment</comments>
      <pubDate>Thu, 9 Nov 2023 22:07:30 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 6장 데이터 타입</title>
      <link>https://comp-jae.tistory.com/643</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWCthQ/btszWIrfHy4/cJbrkMtyCiQpZ00y4Utgx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWCthQ/btszWIrfHy4/cJbrkMtyCiQpZ00y4Utgx1/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWCthQ/btszWIrfHy4/cJbrkMtyCiQpZ00y4Utgx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWCthQ%2FbtszWIrfHy4%2FcJbrkMtyCiQpZ00y4Utgx1%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6장 데이터 타입&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트의 모든 값은 데이터 타입을 갖는다. 데이터 타입은 6가지의 기본형과 1가지의 참조형으로 분류할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px; text-align: center;&quot;&gt;데이터 타입&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 50%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 120px; text-align: center;&quot; rowspan=&quot;6&quot;&gt;원시 타입&lt;br /&gt;( 기본형 )&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;숫자 타입&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 50%;&quot;&gt;정수와 실수 구분 없이 하나의 숫자 타입만 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;문자열 타입&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;불리언 타입&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;참과 거짓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;undefined 타입&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;선언시 암묵적으로 자동할당 되는 빈 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;null 타입&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;의도적으로 할당하여 명시하는 빈 값&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;심벌 타입&lt;/td&gt;
&lt;td style=&quot;width: 30%; height: 20px;&quot;&gt;ES6에서 추가된 7번째 타입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 20px; text-align: center;&quot; colspan=&quot;2&quot;&gt;객체 타입 ( 참조형 )&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 20px;&quot;&gt;객체, 함수, 배열 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES11부터 새로운 원시값인 Bigint가 추가되었다.&lt;/p&gt;
&lt;pre id=&quot;code_1699418459445&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 정수를 표현할 수 있는 새로운 값으로 리터럴 뒤에 n을 붙이거나 Bigint 함수를 호출해 생성할 수 있다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6.1 숫자 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;Infinity : 양의 무한대&lt;/li&gt;
&lt;li&gt;-Infinity : 음의 무한대&lt;/li&gt;
&lt;li&gt;NaN : not a number의 산술 연산 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트 엔진은 대소문자를 구분하기 때문에 NaN과 nan은 다른 값이니 주의가 필요하다. NaN은 좀 더 쉬운 예를 들면 문자열과 수를 곱하면 숫자 간의 연산이 아니라서 연산이 불가하다는 의미로 NaN이 반환된다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.2 문자열 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문자열 타입은 텍스트 데이터를 나타낸다. 작은따옴표( ' ' ) 나 큰 따옴표 ( &quot; &quot; ) 또는 백틱 ( ` ` ) 으로 텍스트를 감싸서 표현한다. 문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다. 일반적으로 작은따옴표를 사용한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.3 템플릿 리터럴&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ES6부터 템플릿 리터럴 이라고 하는 새로운 문자열 표기법이 도입되었다. 이는 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다. 템플릿 리터럴은 백틱( ` ` )을 사용해 입력한 그대로, 또는 변수에 할당된 그대로 표현할 수 있는 방식이다.&lt;/p&gt;
&lt;pre id=&quot;code_1699419077333&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let name = &quot;강동원&quot;
let feel = &quot;행복&quot;
}

function tag(str, ...args) {
  console.log(str[0], args[0], str[1], args[1], str[2])
 }
 
 tag `안녕하세요 ${name}입니다. 반갑습니다. ${feel}하세요`
  
 // 안녕하세요  강동원 입니다. 반갑습니다.  행복 하세요

/*
str = ['안녕하세요', '입니다.', '반갑습니다', '하세요']
arg = [${name}, ${feel}] 
 */&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-size: 0.87em; letter-spacing: 0px;&quot;&gt;※ 태그드 템플릿이란?&lt;br /&gt;&lt;/span&gt;: 위의 코드 예시처럼 함수를 괄호()가 아닌 백틱( ` ` )으로 호출하는 템플릿 리터럴 방식이다. 함수 호출 시 tag의 백틱 부분은 주석으로 기재한 배열과 같이 매개변수별로 분류되어 함수 내부의 배치 순서대로 호출된다. MDN을 보면서도 이해하기까지 상당히 오래 걸렸다..&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.3.1 멀티라인 문자열&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;따옴표로 감싼 일반 문자열은 줄바꿈이 불가하다. 또한 문자열을 따옴표로 감싸서 표현하기 때문에 문자열 내에 따옴표를 쓰고자 할 경우에도 문제가 발생한다. 이때 전통적(?)으로는 백슬래시 ( \ )로 시작하는 이스케이프 시퀀스를 사용하는 방식을 이용한다. 하지만 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄 바꿈이나 따옴표 등이 모두 표현 가능하다는 장점이 있다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.3.2 표현식 삽입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이전에는 여러 문자열을 하나로 연결할 때 띄워쓰기까지 계산한 문자열과 더하기 연산자를 사용했다.&lt;/p&gt;
&lt;pre id=&quot;code_1699420815387&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var first = 'Dong-won'
var last = 'kang'

console.log('My name is ' + first + ' ' + last + '.');
console.log(`My name is ${first} ${last}.`);

// My name is Dong-won Kang.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;템플릿 리터럴은 ( ${} ) 기호를 통해 표현식으로 문자열을 간단히 삽입할 수 있다. 이때 문자열로 타입이 강제로 변환되어 삽입된다. 위의 예시 코드의 두 console.log는 같은 결과값을 반환한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.4 불리언 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;불리언 타입은 참(true), 거짓(false)을 나타낸다. 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 자주 사용한다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.5 undefined 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;undefined는 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값으로 자동할당되는 값이다. 변수에 값이 없다는 것을 명시하고 싶을 때는 null을 할당해야 하고, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;의도적으로 undefined를 할당한다면 혼란을 줄 수 있다.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;undefined는 직역하면 '정의되지 않은' 으로 선언과 정의는 실제로 메모리 주소를 할당하는가로 구분한다. 하지만 자바스크립트 엔진의 경우 변수를 선언하면 암묵적으로 정의가 이뤄진다. ECMAScript에서 변수는 '선언한다'라고 표현하고, 함수는 '정의한다'라고 표현하고 있으므로 이에 따라 표현하도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.6 null 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;null은 변수에 값이 없다는 것을 의도적으로 명시하는 것으로 대소문자에 주의해야 한다. 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 이에 따라 기존 참조값에 대해 자바스크립트 엔진은 가비지 콜렉션을 수행할 것이다. 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699437042384&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let element = document.querySelector('.myClass')
console.log(element) // null&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.7 심벌 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;심벌은 ES6에서 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다. Symbol 함수를 호출해 생성하며, 이 때 생성된 값은 외부에 노출되지 않고, 다른 값과 절대 중복되지 않는 유일무이한 값이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699437232621&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Symbol('abc') === Symbol('abc') // false&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.8 객체 타입&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것은 객체이다. 6가지 원시타입 이외의 값은 모두 객체타입이다. 11장에서 상세 설명.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.9.1 데이터 타입에 의한 메모리 공간의 확보와 참조&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;메모리에 값을 저장할 때 메모리 공간의 크기를 결정해야 하고, 낭비와 손실 없이 값을 저장할 수 있는지를 판단해야 한다. 자바스크립트 엔진은 값의 데이터 타입에 따라 메모리 공간의 크기가 결정된다. 컴퓨터는 한 번에 읽어 들여야 할 메모리 셀의 크기를 변수에 할당된 데이터 타입으로 인식(해석)한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;※&lt;span&gt; &lt;/span&gt;&lt;/span&gt;메모리 공간 확보 원리란?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;변수를 선언하면 각 변수는 각각의 메모리 주소를 가지게 된다. 만약 동일한 값을 할당할 경우 하나의 메모리 주소를 같이 참조해서 사용하고, 재할당으로 변수의 값이 서로 달라지면 그때 새로운 값의 메모리 주소를 생성하는 방식으로 메모리를 관리한다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-size: 0.87em;&quot;&gt;※&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; font-size: 0.87em;&quot;&gt;&amp;nbsp;심벌 테이블이란?&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;컴파일러 또는 인터프리터는 심벌 테이블이라 부르는 자료 구조를 통해 식별자를 키로 하여, 바인딩 된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리한다. 즉 키 : 값으로 구성된 해시 테이블의 형태로, 심볼을 위한 큰 심볼 테이블, 스코프에 따른 계층구조의 심볼 테이블 등으로 구성된다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.9.2 데이터 타입에 의한 값의 해석&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;정리해서 데이터 타입이 필요한 이유는 다음과 같다.&lt;/span&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;읽은 메모리의 2진수를 어떻게 해석할지 결정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.10.1 동적 타입 언어와 정적 타입 언어&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;C나 자바 같은 정적 타입의 언어는 변수를 선언할 때 데이터 타입도 사전에 선언한다. 이를 명시적 타입 선언이라 한다. 정적 타입 언어는 선언한 타입에 맞는 값만 변수에 할당할 수 있고, 타입을 변경할 수 없다. 컴파일 시점에 타입과 값이 일치하는지 타입 체크를 수행하고, 만약 통과하지 못하면 에러가 발생한다. 안정적인 코드의 구현을 통해 에러를 줄인다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1699438364192&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;자바에서 num 변수에 정수 9를 할당하는 방식. 
정수(integer)라는 뜻의 int를 변수명 앞에 기재한다.
int num = 9;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;자바스크립트는 var, let, const와 같은 키워드를 사용해 변수를 선언한다. 어떠한 데이터 값이라도 자유롭게 할당할 수 있고, 재할당시에도 타입체크를 하지 않는다. typeof 연산자로 변수를 연산하면 할당된 값의 데이터 타입을 반환한다. 즉, 자바스크립트의 변수는 선언이 아닌 할당에 의해. 정확히는 할당된 값에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든 동적으로 변할 수 있는데 이를 동적 타이핑이라 하며, 자바스크립트는 동적 타입 언어이다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.10.1 동적 타입 언어와 정적 타입 언어&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;표현식인 문과 표현식이 아닌 문을 구별한느 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다. 표현식인 문은 결과가 값이기 때문에 변수에 할당할 수 있으나 표현식이 아닌 문은 에러가 발생한다. 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력하는데 이를 완료 값이라 한다. 완료 값은 표현식의 평가 결과가 아니다. 따라서 변수에 할당할 수 없고 참조할 수도 없다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;6.10.2 동적 타입 언어와 변수&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;동적 타입 언어는 데이터 타입에 대해 무감각해질 정도로 편리하다는 장점이 있다. 하지만 복잡한 프로그램에서는 변화하는 변수 값을 추적하기 어려울 수 있는 구조적 문제가 있다. 의도적인 값 변경으로 언제든 타입이 바뀔 수 있고, 자바스크립트 엔진에 의해 암묵적으로 자동변환 될 수도 있다. 결국 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다. 안정적인 프로그래밍을 위해 변수를 사용시 일반적인 주의사항은 다음과 같다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&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;li&gt;상수를 사용해 값의 변경을 억제한다.&lt;/li&gt;
&lt;li&gt;변수 이름은 목적이나 의미를 파악할 수 있도록 짓는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 동작하는 것만이 아니라 개발자를 위한 문서의 목적도 있다. 따라서 가독성이 좋은 코드가 좋은 코드다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;템플릿 리터럴은 문자열 표현을 정말 편하게 만들어주고, 표현식도 할당할 수 있어서 함수의 결과를 문자열로 표현할 때도 많이 이용했다. 템플릿 리터럴 쵝오!. 태그드 리터럴은 MDN을 보고도 이해가 안돼서 엄청 검색해 봤는데 직접적으로 사용하기에는 무리가 있을 것 같다. 해당 코드를 사용 시 협업에 오히려 문제가 생기지 않을까..?;; 그런데 React 작업 시 CSS를 styled 라이브러리로 조작할 수 있는데 이때 사용하는 백틱이 태그드 리터럴을 이용한 방식이라고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1699441322413&quot; class=&quot;properties&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;styled 라이브러리 사용 예시

export const BtSlideNext = styled.button`
  position: absolute;
  top: 50%;
  width: 50px;
`&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어떠한 메서드나 라이브러리 등을 만드는데 분명히 장점인 부분이 있다는 것이리라. 그리고 데이터 타입 상관없이 변수에 할당할 수 있다는 것은 알고 있었지만, 그게 변수 할당시 데이터 타입이 결정된다는 이야기나 마찬가지일 줄이야..; 여러모로 알고 있는 동작에 대해 세부적으로 몰랐던 원리를 알아가는 것 같다.&lt;/p&gt;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/643</guid>
      <comments>https://comp-jae.tistory.com/643#entry643comment</comments>
      <pubDate>Wed, 8 Nov 2023 20:23:50 +0900</pubDate>
    </item>
    <item>
      <title>모던 자바스크립트 Deep Dive 5장 표현식과 문</title>
      <link>https://comp-jae.tistory.com/642</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sYlH5/btszSLaNKWR/zISBnAJ7U68kTkmAL5zwG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sYlH5/btszSLaNKWR/zISBnAJ7U68kTkmAL5zwG0/img.png&quot; data-alt=&quot;출처 : 예스24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sYlH5/btszSLaNKWR/zISBnAJ7U68kTkmAL5zwG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsYlH5%2FbtszSLaNKWR%2FzISBnAJ7U68kTkmAL5zwG0%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;600&quot; height=&quot;732&quot; data-filename=&quot;edited_모던 자바스크립트 표지 - 출처 예스24.jfif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 예스24&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스터디를 진행하면서 책을 읽고 내용과 떠오르는 생각, 용어들을 정리하고 있습니다.&lt;br /&gt;문제 되는 부분이나 틀린 부분이 있다면 편하게 말씀해 주세요.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5장 표현식과 문&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5.1 값&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;용어의 의미를 정확히 설명할 수 없다면 개념을 제대로 이해하지 못한 경우가 많다. 값(value)은 식(표현식)이 평가(evaluate)되어 생성된 결과를 말한다. 모든 값은 데이터 타입을 가지며, 이에 따라 다르게 해석될 수 있다. 예를 들어 이진수 01000001은 숫자 65에 해당하지만 문자 'A'로도 해석할 수 있다. 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간, 또는 해당 공간을 식별하기 위해 붙인 이름이다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1699356356120&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var sum = 10 + 20;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;10 + 20은 30으로 sum이라는 변수에 최종 할당되는 값은 30이다. 10 + 20은 할당 이전에 평가되어 값을 생성해야 한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5.2 리터럴&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법이다. 자바스크립트 엔진은 코드가 실행되는 런타임 시점에 리터럴을 평가해 값을 생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 약속한 표기법이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5.3 표현식&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;표현식은 값으로 평가할 수 있는 문(statement)이다. 즉, 표현식이 평가(실행)되면 새로운 값을 생성하거나 기존 값을 참조한다. 표현식은 리터럴, 식별자(변수, 함수), 연산자, 함수 호출 등의 조합으로 다양하게 이뤄질 수 있다. 즉, 값으로 평가(실행)될 수 있는 문은 모두 표현식이다.&lt;/p&gt;
&lt;pre id=&quot;code_1699356356122&quot; class=&quot;maxima&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var num = 1;
if( 2 === ( num + 1 ) ) {
  console.log(&quot;똑같다&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-size: 0.87em; letter-spacing: 0px;&quot;&gt;※ 표현식을 값 대신?&lt;br /&gt;&lt;/span&gt;: 표현식은 문법적으로 값이 위치할 수 있는 자리에 위치할 수 있고, 다른 표현식의 일부가 되어 새로운 값을 만들어낼 수도 있다.&lt;br /&gt;&amp;nbsp; &amp;nbsp;위의 예시에서 if 문 내에서 숫자 2와 ( num + 1 )을 동등 비교하고 있는데 ( num + 1 ) 은 표현식으로 값 2로 평가되기 때문에 정상동작한다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5.4 문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다. 문은 여러 토큰으로 구성되며, 이는 컴퓨터에 내리는 명령이 되기 때문에 문을 명령문이라고도 부른다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-size: 0.87em; letter-spacing: 0px;&quot;&gt;※ 토근이란?&lt;br /&gt;&lt;/span&gt;: 문법적인 의미를 가지며, 문법적으로 더이상 나눌 수 없는 코드의 기본 요소를 의미한다. 즉, 기호 하나, 연산자 하나하나가 모두 토큰이다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5.5 세미콜론과&amp;nbsp;세미콜론&amp;nbsp;자동&amp;nbsp;삽입&amp;nbsp;기능&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;세미콜론(;)은 문의 종료를 나타내고 대부분의 프로그래밍 언어는 반드시 코드 끝에 붙여야 한다. 하지만 자바스크립트 엔진은 세미콜론 자동 삽입 기능이 암묵적으로 수행되기 때문에 세미콜론을 옵션으로 보고 생략해도 된다. 원칙적으로 if문, for문, 함수 등의 0개 이상의 문을 중괄호로 묶은 코드 블록은 해당 코드블록 하나하나가 자체 종결성을 갖는다고 보기 때문에 세미콜론을 붙이지 않는다. 하지만 동작을 제대로 예측하지 못해 오류가 발생할 수 있으므로 세미콜론을 가급적 사용하도록 권장하는 분위기다.&lt;/p&gt;
&lt;pre id=&quot;code_1699356356124&quot; class=&quot;ada&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function foo () {
  return
  {}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-size: 0.87em; letter-spacing: 0px;&quot;&gt;※ 자바스크립트 엔진의 암묵적인 동작(1)?&lt;br /&gt;&lt;/span&gt;: 위의 코드는 중괄호 내의 내용을 반환하는 return {} 으로 고려했으나, 실제 동작은 return;으로 return 이후의 중괄호는 실행되지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5.6 표현식인&amp;nbsp;문과&amp;nbsp;표현식이&amp;nbsp;아닌&amp;nbsp;문&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;표현식인 문과 표현식이 아닌 문을 구별한느 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다. 표현식인 문은 결과가 값이기 때문에 변수에 할당할 수 있으나 표현식이 아닌 문은 에러가 발생한다. 크롬 개발자 도구에서 표현식이 아닌 문을 실행하면 언제나 undefined를 출력하는데 이를 완료 값이라 한다. 완료 값은 표현식의 평가 결과가 아니다. 따라서 변수에 할당할 수 없고 참조할 수도 없다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정리&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;표현식과 값의 관계에 대해서 명확하게 알 수 있었고, 값 대신 표현식을 변수에 할당하거나 조건문에 피연산자로 할당하는 것처럼 좀 더 자유도 있게 사용할 수 있다는 것을 배웠다. 이번 챕터는 큰 맥락을 관통하는 것은 아니지만 챕터 초반에 나온 것처럼 각 용어를 명확히 정의하여 세부적인 동작에 관해 파악하도록 돕는 챕터라 생각한다.&lt;/p&gt;</description>
      <category>도서/모던 자바스크립트 Deep Dive</category>
      <category>javascript</category>
      <category>js</category>
      <category>공부를 가장한 일기일지도</category>
      <category>모던 자바스크립트 deep dive</category>
      <category>자바스크립트</category>
      <category>톺아보기</category>
      <author>클라우드아실</author>
      <guid isPermaLink="true">https://comp-jae.tistory.com/642</guid>
      <comments>https://comp-jae.tistory.com/642#entry642comment</comments>
      <pubDate>Tue, 7 Nov 2023 20:18:41 +0900</pubDate>
    </item>
  </channel>
</rss>