<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>IT★개발자</title>
    <link>https://itdeveloper.tistory.com/</link>
    <description>IT개발자들을 위한 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 08:09:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>IT-개발자</managingEditor>
    <image>
      <title>IT★개발자</title>
      <url>https://tistory1.daumcdn.net/tistory/2921340/attach/8476f3752f044313b4831ebd9e569de2</url>
      <link>https://itdeveloper.tistory.com</link>
    </image>
    <item>
      <title>안드로이드 앱/어플 개발 세번째 출시 후기_메모리얼 카메라(MemorialCamera)</title>
      <link>https://itdeveloper.tistory.com/71</link>
      <description>&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;24년도 10월 16일에 구글 play스토어를 통해 내 인생의 세번째로&lt;b&gt; &quot;메모리얼 카메라(MemorialCamera)&quot; &lt;/b&gt;앱을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인 개발을 진행하였고 매년 어플 1개를 출시를 목표로 하고있습니다. 23년도를 시작으로 24년도에는 2개를 출시하게 되었습니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;매년 1개 출시를 목표였는데, 2개를 출시하게되어 엄청 뿌듯합니다. 이번 출시는 기다림의 시간이 길었습니다. 10월에 개발 완료하였으나 구글의 정책을 모두 처리하는데 많은 시간을 소요하였습니다ㅠㅠ 그래도 또 한번 출시에 성공하였습니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;많은 다운 부탁드립니다!!!&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 1084px;&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;height: 20px;&quot;&gt;&lt;b&gt;앱 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;메모리얼&amp;nbsp;카메라(MemorialCamera)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;앱 소개&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;갤러리에서 사진을 불러와서 투명도 조절을 통해 현재 Carame Preview의 배경으로 두고 비슷한 사진을 찍어보세요. (과거의 구도와 동일하게 찍을 수 있습니다.)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;앱 기능&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;[기능&amp;nbsp;설명]&lt;/b&gt;&lt;br /&gt;1. &quot;사진 가져오기&quot; - 갤러리에서 사진을 불러와 카메라의 미리보기 화면에 뒷 배경으로 사용할 수 있습니다. &lt;br /&gt;2. &quot;사진 찍기&quot; - 카메라를 찍어 갤러리에 보관합니다. &lt;br /&gt;3. &quot;카메라 전환&quot; - 카메라 전/후면 전환합니다. &lt;br /&gt;4. &quot;사진 회전&quot; - 사진 가져오기를 통해 불러온 사진을 90도 회전합니다. &lt;br /&gt;5. &quot;투명도 조절&quot; - 사진 가져오기를 통해 불러온 사진을 불투명도 조절합니다. &lt;br /&gt;6. &quot;licenseNotice&quot; - 현재 사용된 기술의 라이선스를 표시합니다. &lt;br /&gt;7. &quot;3:4&quot;, &quot;9:16&quot;, &quot;1:1&quot; - 불러온 사진의 비율을 조절합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;다운 받는 곳&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #5f6368;&quot;&gt;&lt;b&gt;&amp;lt;URL 검색&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.memorialCamera.memorialCamera&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.memorialCamera.memorialCamera&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;구글 플레이 검색&amp;gt;&lt;br /&gt;&lt;/b&gt; 메모리얼&amp;nbsp;카메라(MemorialCamera) &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;관련 이미지&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpk4RV/btsKDCH45f7/tuYdMEtND8LFGaG7xkqCl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpk4RV/btsKDCH45f7/tuYdMEtND8LFGaG7xkqCl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpk4RV/btsKDCH45f7/tuYdMEtND8LFGaG7xkqCl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpk4RV%2FbtsKDCH45f7%2FtuYdMEtND8LFGaG7xkqCl1%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;950&quot; height=&quot;1163&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;메인&lt;br /&gt;화면&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uvXqh/btsKEF4TA2a/oLJLybFC0weUw01BFhLro0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uvXqh/btsKEF4TA2a/oLJLybFC0weUw01BFhLro0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uvXqh/btsKEF4TA2a/oLJLybFC0weUw01BFhLro0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuvXqh%2FbtsKEF4TA2a%2FoLJLybFC0weUw01BFhLro0%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;358&quot; height=&quot;639&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;비율선택&lt;br /&gt;화면&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgUZfb/btsKDYcVPRX/aaj2w0WSsSlW90EukCevk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgUZfb/btsKDYcVPRX/aaj2w0WSsSlW90EukCevk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgUZfb/btsKDYcVPRX/aaj2w0WSsSlW90EukCevk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgUZfb%2FbtsKDYcVPRX%2Faaj2w0WSsSlW90EukCevk0%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;631&quot; data-origin-width=&quot;355&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 앱은 사용자가 과거에 찍었던 사진을 불러와, 그 사진의 구도와 배경을 그대로 재현할 수 있는 기능을 제공합니다. 즉, 사용자는 과거의 사진을 참조한 후, 그 사진과 똑같은 위치에서 현재 카메라를 사용해 촬영할 수 있습니다. 하지만 이 앱의 가장 큰 차별점은 단순히 사진을 찍는 것을 넘어, 실제로 카메라 화면에 과거의 배경을 반영해 실시간으로 보여준다는 점입니다. 더욱이, 이 배경은 흑백으로 처리되어 과거의 느낌을 더욱 선명하게 전달할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 가지 기술적 과제를 해결하기 위해, 앱의 전반적인 구조와 흐름을 면밀히 분석하였고, 그 결과 이 아이디어는 실현 가능하다는 결론을 내렸습니다. 특히 중요한 점은, 화면 비율이 다른 기기에서도 동일한 경험을 제공할 수 있도록 유연하게 대응해야 한다는 것이었습니다. 이를 해결하기 위해 다양한 화면 비율을 자동으로 감지하고, 사용자에게 최적화된 화면을 제공하는 로직을 구현했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발과 구현&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 개발 과정에서 다양한 안드로이드 기술을 활용했습니다. 특히 화면 전환, 다중 화면 처리, 커스텀 다이얼로그(Custom Dialog), 그리고 광고 시스템인 AdMob을 적절히 결합하여 매우 효율적이고 빠른 개발을 진행할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 개발 과정에서 가장 큰 어려움은 흑백 처리와 관련된 문제였습니다. 처음에는 외부 모듈을 활용하려 했으나, 그 모듈을 적용한 후에는 예상대로 동작하지 않는 문제가 발생했습니다. 이에 따라 OpenCV를 사용하기로 결정을 내렸고, 이 과정에서 시간이 조금 소요되었지만, 결국 문제가 해결되었고, 앱의 핵심 기능인 실시간 흑백 배경 처리 기능을 성공적으로 구현할 수 있었습니다.&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;앱의 사용자 인터페이스(UI)는 직관적으로 디자인하여, 사용자가 과거의 사진을 손쉽게 불러올 수 있고, 그 사진을 바탕으로 현재의 사진을 찍을 수 있는 흐름을 간편하게 만들었습니다. 또한, 다양한 기능을 제공하여 사진 촬영 후에는 쉽게 비교할 수 있도록 하여, 과거와 현재를 비교하며 추억을 떠올릴 수 있는 소중한 경험을 제공합니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2d2c2d; text-align: start;&quot;&gt;첫 출시 이후 시간이 많이 지나서 출시 과정을 잊어버리는 등 시간은 소비되었지만 재활용 요소가 많아서 나름 빠르게 진행했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #2d2c2d; text-align: start;&quot;&gt;혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다!&amp;nbsp; &lt;/span&gt;앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; 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;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #2d2c2d; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Android Studio/App 출시</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/71</guid>
      <comments>https://itdeveloper.tistory.com/71#entry71comment</comments>
      <pubDate>Tue, 12 Nov 2024 00:35:02 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 앱/어플 개발 두번째 출시 후기_Math Puzzle(수학 퍼즐)</title>
      <link>https://itdeveloper.tistory.com/70</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24년도 1월 3일에 구글 play스토어를 통해 내 인생의 두번째로 &quot;&lt;b&gt;Math&amp;nbsp;Puzzle(수학&amp;nbsp;퍼즐)&quot; 어플&lt;/b&gt;을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인 개발을 진행하였고 매년 어플 1개를 출시를 목표로 하고있습니다. 또 이렇게 목표를 이루니 기분이 좋네요!! 개인적으로 일정을 수립하여 개발을 진행했는데 계속 일정이 뒤쳐졌지만, 결국 또 한번 출시에 성공하였습니다. 혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;많은 다운 부탁드립니다!!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 1084px;&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;height: 20px;&quot;&gt;&lt;b&gt;앱 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;Math&amp;nbsp;Puzzle(수학&amp;nbsp;퍼즐)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;앱 소개&lt;/td&gt;
&lt;td style=&quot;height: 60px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;수학&amp;nbsp;연산으로&amp;nbsp;결과값에&amp;nbsp;맞게&amp;nbsp;퍼즐을&amp;nbsp;조합하여&amp;nbsp;맞춤&lt;br /&gt;- 퍼즐의 가로 세로의 연산을 맞추어 정답을 맞추면 점수를 획득하는데, 이를 위해 타일을 연산에 맞게 움직여야합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;앱 기능&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;color: #5f6368;&quot;&gt;정답을 맞출 경우 1점을 획득하고 10점이 되면 level이 증가하고 총 level1~level3까지 존재합니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;다운 받는 곳&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #5f6368;&quot;&gt; &lt;b&gt;&amp;lt;URL 검색&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=myapp.mathpuzzle&quot;&gt;https://play.google.com/store/apps/details?id=myapp.mathpuzzle&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;구글 플레이 검색&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;Math Puzzle(수학 퍼즐)&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;관련 이미지&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;1319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nYxom/btsC2BvoJD3/ta9buT0gFuw9eSnFKKYCSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nYxom/btsC2BvoJD3/ta9buT0gFuw9eSnFKKYCSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nYxom/btsC2BvoJD3/ta9buT0gFuw9eSnFKKYCSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnYxom%2FbtsC2BvoJD3%2Fta9buT0gFuw9eSnFKKYCSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;547&quot; height=&quot;770&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;1319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;레이아웃1&lt;br /&gt;(메인화면)&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;메인화면: 게임을 start하는 메인 페이지&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvKMeB/btsC7mqbLYt/8EVBvFKSQfg1XnRPJfZjDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvKMeB/btsC7mqbLYt/8EVBvFKSQfg1XnRPJfZjDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvKMeB/btsC7mqbLYt/8EVBvFKSQfg1XnRPJfZjDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvKMeB%2FbtsC7mqbLYt%2F8EVBvFKSQfg1XnRPJfZjDk%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;168&quot; height=&quot;312&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;레이아웃2&lt;br /&gt;(게임화면)&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;게임화면: 터치하여 타일을 움직이는 게임 페이지&lt;br /&gt;(보라색의 타일의 연산을 맞춰 분홍색 답을 맞추는 게임입니다.)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZXyVN/btsC53dzfv7/Q4ra2gAAsCOMH5uNWInDhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZXyVN/btsC53dzfv7/Q4ra2gAAsCOMH5uNWInDhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZXyVN/btsC53dzfv7/Q4ra2gAAsCOMH5uNWInDhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZXyVN%2FbtsC53dzfv7%2FQ4ra2gAAsCOMH5uNWInDhk%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;168&quot; height=&quot;314&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;일정 관리는 엑셀로 하루 단위로 세분화하여 수립하였고 기획은 많이 걸리지 않았습니다. 예전부터 퍼즐 게임을 만들고 싶었는데 너무 단순해서 아무도 사용하지 않을 것 같아서 아이디어로 연산 기능을 넣게 되었습니다. 교육용으로 좋을 것 같아요. 퍼플 타일을 움직여서 1+2=3 처럼 순서를 맞춰야하는 기획을 진행했습니다. 설명이 부족하여 게임 진행에 힘들이 있을 수도 있으나 사용자께서 개발자의 의도를 잘 파악해주셨으면 합니다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;첫 어플(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;&quot;칭찬 전화&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;) 출시 때&lt;/span&gt;&amp;nbsp; 안드로이드 화면전환, 다중화면, custom dialog, admob 등을 많이 활용하여 정말 빠르게 앱 개발을 진행했습니다. 처음이 정말 어려웠지 두번째는 그래도 속도가 조금 향상된 느낌이네요. 첫 출시 이후 시간이 많이 지나서 출시 과정을 잊어버리는 등 시간은 소비되었지만 재활용 요소가 많아서 나름 빠르게 진행했습니다.&lt;br /&gt;혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디자인:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피그마를 기본적으로 사용하였습니다. 먼저, 개발을 프로토타입으로 진행했어요. 개발자분들은 아실거에요....디자인은 미적 감각을 타고 나지않으면...망....... 아닙니다. 할수있어요! 피그마와 함께라면요. 피그마로 디자인을 먼저하고 안드로이드 스튜디오의 xml을 하나씩 수정하여 디자인을 많이 수정했어요. 지금도 디자인을 보면 눈물나네요ㅠㅠ 이뿌게 만들고 싶었는데 흑.. 다음에는 더욱 더 노력해야겠어요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 출시 때 또 글로 찾아뵐게요. 글 읽어 주셔서 감사합니다!&lt;br /&gt;많이 다운 부탁드립니다!!&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/4rDRV/btsCZjCfpH9/l0EmpapdrwZPnoOl0SG111/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;aswift_2_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Android Studio/App 출시</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/70</guid>
      <comments>https://itdeveloper.tistory.com/70#entry70comment</comments>
      <pubDate>Fri, 5 Jan 2024 00:31:16 +0900</pubDate>
    </item>
    <item>
      <title>01. yfinance를 이용한 주식 차트 불러오기</title>
      <link>https://itdeveloper.tistory.com/69</link>
      <description>&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;yfinance&lt;/b&gt;는 파이썬에서 사용할 수 있는 금융 데이터 수집 라이브러리 중 하나입니다. 이 라이브러리를 사용하면 주식, 지수, 환율 등 다양한 금융 데이터를 쉽게 가져올 수 있습니다. yfinance는 Yahoo Finance에서 제공하는 데이터에 액세스할 수 있는 간단하고 편리한 방법을 제공합니다. 일반적으로 yfinance를 사용하여 특정 주식의 가격, 거래량, 주가지수 등을 가져오거나, 특정 기간 동안의 주식 차트를 생성하는 데 사용됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드는 애플(AAPL) 주식의 2022년 데이터를 가져와 출력합니다. yfinance를 사용하면 여러 가지 옵션을 통해 데이터를 원하는 형식으로 가져올 수 있습니다. yfinance는 주로 금융 분석 및 데이터 시각화를 위해 사용되며, 데이터 분석, 머신러닝 등 다양한 응용 분야에서 활용될 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;소스코드&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;AAPL이라는 애플의 주식 코드를 가지고 와서 시작일 2023.10-01 부터 끝나는 지점 2023-11-27 까지 데이터를 가져오는 코드입니다.&lt;span style=&quot;color: #c586c0;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mplfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pandas_datareader&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pdr&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;pdr_override&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;() &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pdr&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;get_data_yahoo&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;AAPL&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;2023-10-01&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;2023-12-31&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# mpf.plot(data, type= &quot;candle&quot;) &amp;nbsp; # mpf.plot(data, type= [line, candle])&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mc&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;make_marketcolors&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;up&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;down&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;make_mpf_style&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;base_mpf_style&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'starsandstripes'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;marketcolors&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mc&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;plot&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'candle'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;volume&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mav&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #374151; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과값&amp;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;795&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqSwB6/btsCN0wd87v/9bbQd99n4sUslFG2VamAeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqSwB6/btsCN0wd87v/9bbQd99n4sUslFG2VamAeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqSwB6/btsCN0wd87v/9bbQd99n4sUslFG2VamAeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqSwB6%2FbtsCN0wd87v%2F9bbQd99n4sUslFG2VamAeK%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;795&quot; height=&quot;635&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면 국내 주식의 코드를 살펴보도록 하겠습니다. 구글 금융이나 네이버 증권을 들어가서 국내 주식의 코드를 가져오겠습니다. 예를 들어 삼성전자의 경우 코드는 &quot; &lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start;&quot;&gt;005930&quot; 가 되고 위의 파이썬 코드에 국내이므로 &quot;AAPL&quot; 대신에 &quot;005930.KS&quot; 을 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.google.com/finance/quote/005930:KRX?sa=X&amp;amp;ved=2ahUKEwiJw7OKk7uDAxVec_UHHU-nCTwQ3ecFegQIVhAX&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.google.com/finance/quote/005930:KRX?sa=X&amp;amp;ved=2ahUKEwiJw7OKk7uDAxVec_UHHU-nCTwQ3ecFegQIVhAX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd4cwp/btsCX6A6JX7/dAkTpeoyf0quY4Yez7YIT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd4cwp/btsCX6A6JX7/dAkTpeoyf0quY4Yez7YIT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd4cwp/btsCX6A6JX7/dAkTpeoyf0quY4Yez7YIT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd4cwp%2FbtsCX6A6JX7%2FdAkTpeoyf0quY4Yez7YIT0%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;1426&quot; height=&quot;774&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;소스코드&amp;gt;&lt;/b&gt;&lt;br /&gt;코드만 변경하였습니다. &lt;span style=&quot;background-color: #1f1f1f; color: #ce9178; text-align: start;&quot;&gt;005930.KS&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1f1f1f; color: #cccccc;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mplfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pandas_datareader&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pdr&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yfinance&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #c586c0;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;yf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;pdr_override&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;() &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;pdr&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;get_data_yahoo&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;005930.KS&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;start&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;2023-10-01&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;2023-12-31&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #6a9955;&quot;&gt;# mpf.plot(data, type= &quot;candle&quot;) &amp;nbsp; # mpf.plot(data, type= [line, candle])&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mc&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;make_marketcolors&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;up&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;down&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;make_mpf_style&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;base_mpf_style&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'starsandstripes'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;marketcolors&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mc&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;mpf&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #dcdcaa;&quot;&gt;plot&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;'candle'&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;volume&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #569cd6;&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;mav&lt;/span&gt;&lt;span style=&quot;color: #d4d4d4;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #b5cea8;&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;color: #cccccc;&quot;&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;결과값&amp;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;797&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vbjfN/btsCSzEjhtt/ZOzBkuB4ZffjF9T2mdfOmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vbjfN/btsCSzEjhtt/ZOzBkuB4ZffjF9T2mdfOmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vbjfN/btsCSzEjhtt/ZOzBkuB4ZffjF9T2mdfOmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvbjfN%2FbtsCSzEjhtt%2FZOzBkuB4ZffjF9T2mdfOmk%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;797&quot; height=&quot;634&quot; data-origin-width=&quot;797&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;그러면 이제 국내 주식의 코드를 알기 위해 상장법인목록 파일에서 종목을 찾아서 코드+KS를 입력하여 주식차트를 그릴 수 있습니다. 종목코드를 확인하고 코드를 이용해 주식 차트를 그려보시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cTiMI1/btsCOBCPInF/voMfjxmwTXc2gs2SDME5N0/%EC%83%81%EC%9E%A5%EB%B2%95%EC%9D%B8%EB%AA%A9%EB%A1%9D.xls?attach=1&amp;amp;knm=tfile.xls&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;상장법인목록.xls&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.31MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p 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;1793&quot; data-origin-height=&quot;1133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tVYfQ/btsCVFRiYcO/Wz9klRGJKQKWa484iVvdtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tVYfQ/btsCVFRiYcO/Wz9klRGJKQKWa484iVvdtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tVYfQ/btsCVFRiYcO/Wz9klRGJKQKWa484iVvdtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtVYfQ%2FbtsCVFRiYcO%2FWz9klRGJKQKWa484iVvdtK%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;1793&quot; height=&quot;1133&quot; data-origin-width=&quot;1793&quot; data-origin-height=&quot;1133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYKPHJ/btsCVHuN9Vn/m7YCWDitHZcqUAm3yvkSQK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYKPHJ/btsCVHuN9Vn/m7YCWDitHZcqUAm3yvkSQK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYKPHJ/btsCVHuN9Vn/m7YCWDitHZcqUAm3yvkSQK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cYKPHJ/btsCVHuN9Vn/m7YCWDitHZcqUAm3yvkSQK/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #2d2c2d; text-align: center;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;aswift_6_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python/주식 차트 분석</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/69</guid>
      <comments>https://itdeveloper.tistory.com/69#entry69comment</comments>
      <pubDate>Sun, 24 Dec 2023 13:23:05 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 앱/어플 개발 첫 출시 후기_칭찬 전화(Compliment Call)</title>
      <link>https://itdeveloper.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;23년도 3월 구글 play스토어를 통해 내 인생의 처음으로 &quot;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;칭찬 전화(Compliment Call)&lt;/span&gt;&quot; 어플&lt;/b&gt;을 출시했습니다. 독학으로 안드로이드 스튜디오를 공부를 하고 기획/개발/디자인 등 1인개발을 진행하였고 올해 목표 중 하나인 어플 출시를 이루게 되어 정말 기쁘네요. 개인적으로 일정을 수립하여 개발을 진행했는데 계속 일정이 뒤쳐졌지만, 결국 출시하였습니다. 혹시, 어플에 버그나 개선사항이 있다면 언제든지 블로그 댓글 및 구글 play스토어의 댓글을 부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;많은 다운 부탁드립니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 개발 후기를 시작하기전 어플 소개부터 간단히 표로 정리했습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 1375px;&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: 14.8837%; height: 20px;&quot;&gt;&lt;b&gt;앱 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;칭찬 전화(Compliment Call)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 40px;&quot;&gt;앱 소개&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 40px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;칭찬 전화는 가짜 전화를 통해 기본 설정된 영상, 내 갤러리의 동영상, 유튜브 url을 통한 영상을 영상전화 처럼 보여주는 앱입니다.&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 100px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 100px;&quot;&gt;앱 기능&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 100px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 가짜 전화 ui로 기본영상, 갤러리 영상, 유튜브 영상을 표시&lt;br /&gt;&lt;/span&gt;- 설정 창을 통해 전화목록을 개인이 설정 가능&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 기본 영상 4개 지원하여 가짜 전화로 지정 가능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 본인 갤러리 내 영상을 가짜 전화로 지정 가능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #5f6368;&quot;&gt;- 유튜브 링크를 통해 가짜 전화로 지정 가능&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 20px;&quot;&gt;다운 받는 곳&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 20px;&quot;&gt;&lt;b&gt;&amp;lt;URL 검색&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=project.complimentcall.complimentcall&amp;amp;pli=1&quot;&gt;https://play.google.com/store/apps/details?id=project.complimentcall.complimentcall&amp;amp;pli=1&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;구글 플레이 검색&amp;gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mc8AI/btr6rx4Y9J3/Pfx7Kqju8ysxQwZBKTg5fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mc8AI/btr6rx4Y9J3/Pfx7Kqju8ysxQwZBKTg5fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mc8AI/btr6rx4Y9J3/Pfx7Kqju8ysxQwZBKTg5fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMc8AI%2Fbtr6rx4Y9J3%2FPfx7Kqju8ysxQwZBKTg5fK%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;473&quot; height=&quot;217&quot; data-origin-width=&quot;473&quot; data-origin-height=&quot;217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 569px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 569px;&quot;&gt;관련 이미지&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 569px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1519&quot; data-origin-height=&quot;1133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpW5qv/btr5Tnn2kXb/rx9WLIq4KZZN4esn0PL05K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpW5qv/btr5Tnn2kXb/rx9WLIq4KZZN4esn0PL05K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpW5qv/btr5Tnn2kXb/rx9WLIq4KZZN4esn0PL05K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpW5qv%2Fbtr5Tnn2kXb%2Frx9WLIq4KZZN4esn0PL05K%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;1519&quot; height=&quot;1133&quot; data-origin-width=&quot;1519&quot; data-origin-height=&quot;1133&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 20px;&quot;&gt;레이아웃1&lt;br /&gt;(메인화면)&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 20px;&quot;&gt;&lt;span&gt;&lt;span&gt;메인화면: 세팅한 전화목록을 선택하면 전화 창으로 이동/ 전화목록 세팅창 이동/ 추가/ 삭제&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dfhtm/btr5OyLpuOe/QhFMZAaqc5I2vD0D6NkkI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dfhtm/btr5OyLpuOe/QhFMZAaqc5I2vD0D6NkkI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dfhtm/btr5OyLpuOe/QhFMZAaqc5I2vD0D6NkkI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDfhtm%2Fbtr5OyLpuOe%2FQhFMZAaqc5I2vD0D6NkkI0%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;249&quot; height=&quot;521&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 549px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 549px;&quot;&gt;레이아웃2&lt;br /&gt;(설정화면)&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 549px;&quot;&gt;&lt;span&gt;&lt;span&gt;세팅화면: 원하는 미디어를 선택하여 전화목록을 세팅하는 화면으로 기본으로 제공하는 영상/ 내가 소장한 영상 / 유튜브 영상으로 3가지 버전으로 설정 가능&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;1023&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4M8C8/btr5NxNhCbm/SEjDd4PePZu3kmI7fKaW71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4M8C8/btr5NxNhCbm/SEjDd4PePZu3kmI7fKaW71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4M8C8/btr5NxNhCbm/SEjDd4PePZu3kmI7fKaW71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4M8C8%2Fbtr5NxNhCbm%2FSEjDd4PePZu3kmI7fKaW71%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;256&quot; height=&quot;529&quot; data-origin-width=&quot;495&quot; data-origin-height=&quot;1023&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 20px;&quot;&gt;레이아웃3&lt;br /&gt;(전화대기)&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 20px;&quot;&gt;전화대기화면으로 전화 연결/ 전화 종료 가능&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;971&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3qF8V/btr5N9d1uOP/lpsHSd16HWENkW1Ezdkiak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3qF8V/btr5N9d1uOP/lpsHSd16HWENkW1Ezdkiak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3qF8V/btr5N9d1uOP/lpsHSd16HWENkW1Ezdkiak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3qF8V%2Fbtr5N9d1uOP%2FlpsHSd16HWENkW1Ezdkiak%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;252&quot; height=&quot;497&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;971&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 14.8837%; height: 20px;&quot;&gt;레이아웃4&lt;br /&gt;(전화 중 화면)&lt;/td&gt;
&lt;td style=&quot;width: 85.1163%; height: 20px;&quot;&gt;기본영상/ 내 갤러리의 영상/ 유튜브 영상에 따라 화면이 다르게 출력되고 기본적으로 카메라뷰를 보여줌&lt;br /&gt;(권한은 허용해야 카메라에 접근이 가능합니다.)&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eext4p/btr5Qz3OOb8/py4LxCFFqrdFFNrgHnVqRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eext4p/btr5Qz3OOb8/py4LxCFFqrdFFNrgHnVqRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eext4p/btr5Qz3OOb8/py4LxCFFqrdFFNrgHnVqRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feext4p%2Fbtr5Qz3OOb8%2Fpy4LxCFFqrdFFNrgHnVqRK%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;246&quot; height=&quot;516&quot; data-origin-width=&quot;491&quot; data-origin-height=&quot;1029&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;우선 아이디어가 먼저 세우고 어떤 기능이 있으면 좋을지 리스트화 하였습니다. 그게 22년도 9월 처음 시작했고 목표는 3개월 후인 22년도 12월 31일. 역시.. 처음 기획과는 다르게 기획부터 출시까지 모든 단계가 처음이여서 많이 지연되고 3개월 후인 23년 3월에 출시가 되었네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정 관리는 엑셀로 하루 단위로 세분화하여 수립하였고 기획은 많이 걸리지 않았습니다. 기획은 개발 중간중간 지속적으로 수정하는 방안으로 진행했어요. 다음에는 일정을 더 잘지킬 수 있도록 다짐하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개발: &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 구글에는 없는게 없네요. 여러분 모르는 기술은 모두 구글에 있습니다. 개발은 &quot;구&quot; 선생과 같이 하는거에요 ^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 화면전환, 다중화면, custom dialog, videoview, youtubevideoview, admob 등 정말 많이 배웠습니다. 다음 앱 개발은 조금 더 빨리 진행할 수 있을거에요. 혹시, 저와 같이 앱을 출시하고 싶고 시작 단계에 있는 개발자분들 정말 포기하지 마시고 좋은 결과있으시길 바랍니다!&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;b&gt;디자인: &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피그마를 기본적으로 사용하였습니다. 먼저, 개발을 프로토타입으로 진행했어요. 개발자분들은 아실거에요....디자인은 미적 감각을 타고 나지않으면...망....... 아닙니다. 할수있어요! 피그마와 함께라면요. 피그마로 디자인을 먼저하고 안드로이드 스튜디오의 xml을 하나씩 수정하여 디자인을 많이 수정했어요. 지금도 디자인을 보면 눈물나네요ㅠㅠ 이뿌게 만들고 싶었는데 흑.. 다음에는 더 노력해야겠어요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 개발하시는 분, 시작하시는 분 꼭 기획하신 앱이 있다면 출시하시기 바라며 응원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 출시 때 또 글로 찾아뵐게요. 글 읽어 주셔서 감사합니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byqlRD/btr5PRp9TdH/w3SwE8gvgQASA73QsaxV7k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byqlRD/btr5PRp9TdH/w3SwE8gvgQASA73QsaxV7k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byqlRD/btr5PRp9TdH/w3SwE8gvgQASA73QsaxV7k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/byqlRD/btr5PRp9TdH/w3SwE8gvgQASA73QsaxV7k/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&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;</description>
      <category>Android Studio/App 출시</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/68</guid>
      <comments>https://itdeveloper.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 24 Mar 2023 23:21:22 +0900</pubDate>
    </item>
    <item>
      <title>javascript setTimeout, setInterval</title>
      <link>https://itdeveloper.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d;&quot;&gt;자바스크립트에서 일정 시간을 두고 실행하는 메서드가 있습니다. 바로 setTimeout, setInterval 2개입니다.&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;setTimeout 은 지연 메소드로 ms(millisecond) 단위 뒤에 한번만 콜백 실행&lt;/li&gt;
&lt;li&gt;setInterval 은 반복 메소드로 ms(millisecond) 단위로 반복해서 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습(setTimeout&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;):&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;setTimeout&lt;span&gt; 에 대해 실습해보도록 하겠습니다. 처음 script를 실행하면서 00:22:34 에서 3초 뒤 실행되어 00:22:37에 시작되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습(setTimeout&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;):&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;setTimeout&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 대해 실습해보도록 하겠습니다. 처음 script를 실행하고 3,5 초뒤&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;setTimeout 지연함수를 실행되고 init 에서 00:29:36 실행 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;00:29:39,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;00:29:41 에 실행되었습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 224px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 224px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 224px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;init: &quot;+new Date())&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setTimeout(() =&amp;gt; console.log(&quot;3초 후 실행&quot;+new Date()),&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3000)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 224px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R4bQu/btrZhTISDYG/20ZbDcmZhd2Ip7LkJX4a9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R4bQu/btrZhTISDYG/20ZbDcmZhd2Ip7LkJX4a9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R4bQu/btrZhTISDYG/20ZbDcmZhd2Ip7LkJX4a9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR4bQu%2FbtrZhTISDYG%2F20ZbDcmZhd2Ip7LkJX4a9K%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;324&quot; height=&quot;167&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;init: &quot;+new Date())&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter3 = () =&amp;gt; (setTimeout(() =&amp;gt; console.log(&quot;3초 후&amp;nbsp; 실행&quot;+new Date()), 3000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter5 = () =&amp;gt; (setTimeout(() =&amp;gt; console.log(&quot;5초 후&amp;nbsp; 실행&quot;+new Date()), 5000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer3and5 = () =&amp;gt; (timerafter3(), timerafter5())&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer3and5(); //시작 후 3, 5초 후 실행&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0uPCj/btrZlqLTaIr/zXoWGD7A3ThrKMqHBNKAMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0uPCj/btrZlqLTaIr/zXoWGD7A3ThrKMqHBNKAMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0uPCj/btrZlqLTaIr/zXoWGD7A3ThrKMqHBNKAMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0uPCj%2FbtrZlqLTaIr%2FzXoWGD7A3ThrKMqHBNKAMK%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;323&quot; height=&quot;206&quot; data-origin-width=&quot;323&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습(&lt;span style=&quot;color: #000000;&quot;&gt;clearTimeout&lt;/span&gt;):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇다면 이 지연 함수를 어떻게 제거할까요? 실행 중에 중지해야하는 일이 생긴다면 변수에&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;setTimeout을 매핑하고 clearTimeout을 하여 중지합니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;init: &quot;+new Date())&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter3 = (setTimeout(() =&amp;gt; console.log(&quot;3초 후 실&amp;nbsp; &amp;nbsp; &amp;nbsp; 행&quot;+new Date()), 3000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter5 = (setTimeout(() =&amp;gt; console.log(&quot;5초 후 실&amp;nbsp; &amp;nbsp; &amp;nbsp; 행&quot;+new Date()), 5000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerstop4 = (clearTimeout(timerafter5))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CP4ca/btrZewtDDxT/7zh7YAgvsnc4FGkbIoFebK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CP4ca/btrZewtDDxT/7zh7YAgvsnc4FGkbIoFebK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CP4ca/btrZewtDDxT/7zh7YAgvsnc4FGkbIoFebK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCP4ca%2FbtrZewtDDxT%2F7zh7YAgvsnc4FGkbIoFebK%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;324&quot; height=&quot;174&quot; data-origin-width=&quot;324&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실습(setInterval):&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;setInterval&lt;/span&gt;에 대해 실습해보도록 하겠습니다. 처음 script를 실행하면서 00:37:13 에서 3초 마다 계속 반복 실행됩니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 270px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 270px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 270px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;init: &quot;+new Date())&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter3 = (setInterval(() =&amp;gt; console.log(&quot;3초 후 반복실행&quot;+new Date()), 3000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 270px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCGYhn/btrZhTa7R8P/O7v9hSBnoz9pItSH7CWUV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCGYhn/btrZhTa7R8P/O7v9hSBnoz9pItSH7CWUV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCGYhn/btrZhTa7R8P/O7v9hSBnoz9pItSH7CWUV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCGYhn%2FbtrZhTa7R8P%2FO7v9hSBnoz9pItSH7CWUV0%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;326&quot; height=&quot;267&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;실습(clear&lt;/span&gt;Interval&lt;span style=&quot;background-color: #ffffff;&quot;&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;그렇다면 어떻게 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;setInterval을 중지할까요? 위의 코드에서 7초 뒤 한번만 실행하는 setTimeout을 실행하면 3초마다 실행되는 &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;setInterval은 2번만 실행되고 중지되겠죠. 아래의 콘솔을 확인하면 init 이후 2번만 실행되고 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Interval 된 것을 확인 할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;init: &quot;+new Date())&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerafter3 = (setInterval(() =&amp;gt; console.log(&quot;3초 후 반복실행&quot;+new Date()), 3000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timerstop3 = (setTimeout(() =&amp;gt; clearInterval(timerafter3),7000))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/40y5D/btrZkRwba7b/Wrd4gQ66iYFWLlkkoKikm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/40y5D/btrZkRwba7b/Wrd4gQ66iYFWLlkkoKikm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/40y5D/btrZkRwba7b/Wrd4gQ66iYFWLlkkoKikm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F40y5D%2FbtrZkRwba7b%2FWrd4gQ66iYFWLlkkoKikm1%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;327&quot; height=&quot;200&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d;&quot;&gt;여기서 중요한 것은 시간함수는 남발해서 사용하면 메모리 누수 현상이 일어날 수 있습니다. 그러므로 꼭 미사용시에는 &lt;span style=&quot;color: #000000;&quot;&gt;clearTimeout, &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;clear&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Interval 등을 통해 타이머를 삭제하도록 합니다. 만약, &lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;setInterval 1초마다 실행되는 함수가 있다면 성능 저하는 피할 수 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEKlWB/btrZkzbiBg1/kLGuVshUKwxOToNURnmsZ0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEKlWB/btrZkzbiBg1/kLGuVshUKwxOToNURnmsZ0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEKlWB/btrZkzbiBg1/kLGuVshUKwxOToNURnmsZ0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cEKlWB/btrZkzbiBg1/kLGuVshUKwxOToNURnmsZ0/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw4EXm/btrZeiG2PaV/0OpbiWNkLncVi52lzVtVj0/img.gif&quot; data-lightbox=&quot;lightbox&quot;&gt;&lt;/span&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>javascript/기본</category>
      <category>javascript</category>
      <category>setInterval</category>
      <category>setTimeout</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/66</guid>
      <comments>https://itdeveloper.tistory.com/66#entry66comment</comments>
      <pubDate>Wed, 15 Feb 2023 00:44:41 +0900</pubDate>
    </item>
    <item>
      <title>javascript Promise Async/Await</title>
      <link>https://itdeveloper.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2d2c2d;&quot;&gt;자바스크립트에서 비동기 처리를 위한 콜백함수 사용 시 콜백 지옥을 해결할 수 있는 것이 Promise입니다. Async/Await 는 비동기 처리 문법으로 가장 최근에 나온 문법으로 ES8에 해당하며 Promise를 쉽게 사용할 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Async는 함수 앞에 선언되며 Async의 결과는 Promise 객체로 return 됩니다.&lt;/li&gt;
&lt;li&gt;Await는 Async와 쌍을 이루어 사용하여 Await를 사용하면 함수앞에 Async를 작성해야 한다.&lt;/li&gt;
&lt;li&gt;Promise와 차이점은 기존 함수에 Async를 작성하는 것처럼 구성되어 간결하다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;async 를 함수 test앞에 작성하고 &lt;span style=&quot;color: #000000;&quot;&gt;console&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;result_promise &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;result_promise&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;); 를 확인하면 Object 는 Promise 임을 알 수 있습니다. 그리고 then 함수는 Promise에서 사용하는 것으로 &lt;span style=&quot;color: #000000;&quot;&gt;async 는 Promise 객체를 반환하는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; async function test(value) {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; let result_promise = test();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;result_promise &quot;+result_promise);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; test(1).then((value) =&amp;gt; console.log(&quot;value:&quot;+value));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&lt;/span&gt;&lt;span style=&quot;color: #808080;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TODUs/btrY7MwlY5g/gOwARfwQJMd043kqJd57JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TODUs/btrY7MwlY5g/gOwARfwQJMd043kqJd57JK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TODUs/btrY7MwlY5g/gOwARfwQJMd043kqJd57JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTODUs%2FbtrY7MwlY5g%2FgOwARfwQJMd043kqJd57JK%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;451&quot; height=&quot;135&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const f = async (value) =&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return value+1;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; f(3).then((value) =&amp;gt; console.log(value))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mn3Pi/btrZewysoDy/f2vHKXUhxb0ZbMF5SUUlVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mn3Pi/btrZewysoDy/f2vHKXUhxb0ZbMF5SUUlVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mn3Pi/btrZewysoDy/f2vHKXUhxb0ZbMF5SUUlVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmn3Pi%2FbtrZewysoDy%2Ff2vHKXUhxb0ZbMF5SUUlVK%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;449&quot; height=&quot;123&quot; data-origin-width=&quot;449&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;color: #000000;&quot;&gt;await 는 비동기 처리에서 동기 형태의 로직을 사용할 수 있게 하는 것으로 해당 로직을 기다리게 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const timer = () =&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new Promise(resolve =&amp;gt; setTimeout(resolve, 1000));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; async function wait(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; await timer();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;wait&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;async function test(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const waitstr = awaitwait();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return waitstr;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test().then(console.log)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boV7ct/btrZcmpBqY1/WHvlqKhkpYZMNbMFIxgQjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boV7ct/btrZcmpBqY1/WHvlqKhkpYZMNbMFIxgQjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boV7ct/btrZcmpBqY1/WHvlqKhkpYZMNbMFIxgQjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboV7ct%2FbtrZcmpBqY1%2FWHvlqKhkpYZMNbMFIxgQjk%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;329&quot; height=&quot;134&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;134&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 442px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 442px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 442px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const timer = () =&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new Promise(resolve =&amp;gt; setTimeout(resolve, 1000));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; async function wait(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timer();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;wait&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;async function test(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const waitstr = wait();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return waitstr;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;test().then(console.log)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 442px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;325&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/efjbdp/btrZag4YEht/xhdbvXVC9HZQUpIwDcK151/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/efjbdp/btrZag4YEht/xhdbvXVC9HZQUpIwDcK151/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/efjbdp/btrZag4YEht/xhdbvXVC9HZQUpIwDcK151/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fefjbdp%2FbtrZag4YEht%2FxhdbvXVC9HZQUpIwDcK151%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;325&quot; height=&quot;112&quot; data-origin-width=&quot;325&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw4EXm/btrZeiG2PaV/0OpbiWNkLncVi52lzVtVj0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw4EXm/btrZeiG2PaV/0OpbiWNkLncVi52lzVtVj0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw4EXm/btrZeiG2PaV/0OpbiWNkLncVi52lzVtVj0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cw4EXm/btrZeiG2PaV/0OpbiWNkLncVi52lzVtVj0/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HLbif/btrY5lDYqV2/ci7enhFRDNCyAnPIBEv3L1/img.gif&quot; data-lightbox=&quot;lightbox&quot;&gt;&lt;/span&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>javascript/기본</category>
      <category>async</category>
      <category>await</category>
      <category>javascript</category>
      <category>Promise</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/65</guid>
      <comments>https://itdeveloper.tistory.com/65#entry65comment</comments>
      <pubDate>Tue, 14 Feb 2023 02:35:57 +0900</pubDate>
    </item>
    <item>
      <title>javascript Promise</title>
      <link>https://itdeveloper.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 비동기 처리를 위한 콜백함수 사용 시 콜백 지옥을 해결할 수 있는 것이 Promise입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 동기(&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Synchronous&lt;/span&gt;)와 비동기(&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Asynchronous&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;동기(&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Synchronous&lt;/span&gt;):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 동시에 일어난다는 의미로 직렬적으로 로직을 처리함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 직렬적으로 일을 처리하므로 앞의 결과가 처리될 때 까지 뒤에 로직은 대기 후 순차적으로 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 설계가 직관적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비동기(&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Asynchronous&lt;/span&gt;):&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 동시에 일어나지 않은다는 의미로 병렬적으로 로직을 처리함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 병렬적으로 로직을 처리하므로 앞의 로직이 끝나지 않더라도 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 설계가 복잡함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서&amp;nbsp; 비동기처리를 위해 Promise를 많이 사용하는데, 콜백 함수를 사전에 살펴보고 Promise의 내용을 확인하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;callback 함수:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 함수의 실행이 끝난 뒤 호출되어 사용되는 함수를 의미합니다. 아래의 표를 확인하면 call(&quot;test&quot;, callback) 함수를 호출하고 call 함수를 처리 후 callback 함수를 처리하는 형태입니다. 주로 자바스크립트에서는 ajax에 success값에 많이 사용됩니다. 이 callback함수가 많아지고 남발되면 코드 관리가 어렵고 콜백지옥에 빠지기 쉽습니다. 이를 해결하기 위해 Promise가 나온 이유입니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt; &lt;br /&gt;&amp;lt;html&amp;nbsp;lang=&quot;en&quot;&amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&quot;UTF-8&quot;&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;function callback(){ &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;콜백1&quot;); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;function call(name, callback){ &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;name: &quot;+name) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; callback(); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;call(&quot;test&quot;, callback); &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPUDfQ/btrY5kLQzmm/6GQYPG1fkHgkUXRxlIXgU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPUDfQ/btrY5kLQzmm/6GQYPG1fkHgkUXRxlIXgU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPUDfQ/btrY5kLQzmm/6GQYPG1fkHgkUXRxlIXgU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPUDfQ%2FbtrY5kLQzmm%2F6GQYPG1fkHgkUXRxlIXgU1%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;388&quot; height=&quot;144&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;144&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Promise&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 그림을 보면 Promise는 pending, fulfilled,reject의 상태를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고: &lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OYqpZ/btrYT8FXqmO/y9VHlKeUEKkrkpuLMKzDc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OYqpZ/btrYT8FXqmO/y9VHlKeUEKkrkpuLMKzDc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OYqpZ/btrYT8FXqmO/y9VHlKeUEKkrkpuLMKzDc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOYqpZ%2FbtrYT8FXqmO%2Fy9VHlKeUEKkrkpuLMKzDc1%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;734&quot; height=&quot;270&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;270&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;Pending(대기중)&lt;br /&gt;Promise 객체의 기본상태를 의미하며 비동기 결과가 나오지 않는 초기 상태를 의미합니다.&lt;/li&gt;
&lt;li&gt;Fullfilled(이행 완료됨)&lt;br /&gt;비동기 처리가 완료된 상태를 의미합니다.&lt;/li&gt;
&lt;li&gt;Reject(거부됨)&lt;br /&gt;비동기 처리가 완료는 되었지만 연산에 실패함을 의미합니다.&amp;nbsp;&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;minusTest 함수를 호출하며 num 3을 입력합니다. 그 이후 setTimeout 1초(1000millisecond) 후 실행하라는 지연함수를 싱행하고 then 함수를 순서대로 호출하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;then은 primise 작업이 성공했을때,&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; function minusTest(num){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new Promise((resolve, reject) =&amp;gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setTimeout(function(){&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; num-=1;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(num&amp;gt;=0)resolve(num);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else reject(num);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }, 1000);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; minusTest(3).then((num)=&amp;gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;then2: &quot;+num);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return minusTest(num)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }).then((num)=&amp;gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;then1: &quot;+num);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return minusTest(num)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }).then((num)=&amp;gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;then0: &quot;+num);&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return minusTest(num)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }).catch((err) =&amp;gt; console.log(&quot;err:&quot;+err));&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beIZjG/btrYY7fcMN3/TQ6JvnlV3zByUMQ4pfyBB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beIZjG/btrYY7fcMN3/TQ6JvnlV3zByUMQ4pfyBB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beIZjG/btrYY7fcMN3/TQ6JvnlV3zByUMQ4pfyBB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeIZjG%2FbtrYY7fcMN3%2FTQ6JvnlV3zByUMQ4pfyBB0%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;397&quot; height=&quot;201&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HLbif/btrY5lDYqV2/ci7enhFRDNCyAnPIBEv3L1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HLbif/btrY5lDYqV2/ci7enhFRDNCyAnPIBEv3L1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HLbif/btrY5lDYqV2/ci7enhFRDNCyAnPIBEv3L1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/HLbif/btrY5lDYqV2/ci7enhFRDNCyAnPIBEv3L1/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE7ApH/btrYRQF4pfm/OEjbdk2SmYvCmhmez5GDCK/img.gif&quot; data-lightbox=&quot;lightbox&quot;&gt;&lt;/span&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>javascript/기본</category>
      <category>javascript</category>
      <category>Promise</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/64</guid>
      <comments>https://itdeveloper.tistory.com/64#entry64comment</comments>
      <pubDate>Mon, 13 Feb 2023 01:11:01 +0900</pubDate>
    </item>
    <item>
      <title>javascript 연산자 기초</title>
      <link>https://itdeveloper.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 시간에는 javascript의 기본 연산자에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 연산자에는 산술, 비교, 논리, 삼항, 비트 연산자가 있으며 실무에서 많이 사용하는 산술 연산자, 비교 연산자, 삼항 연산자를 중점으로 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 산술연산자&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;a href=&quot;https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;표 참고: https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;더하기&lt;/td&gt;
&lt;td&gt;두 개의 숫자를 더합니다.&lt;/td&gt;
&lt;td&gt;6 + 9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;빼기&lt;/td&gt;
&lt;td&gt;왼쪽에 있는 수를 오른쪽 수로 뺍니다.&lt;/td&gt;
&lt;td&gt;20 - 15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;곱하기&lt;/td&gt;
&lt;td&gt;두 개의 숫자를 곱합니다.&lt;/td&gt;
&lt;td&gt;3 * 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;나누기&lt;/td&gt;
&lt;td&gt;왼쪽의 숫자를 오른쪽 숫자로 나눠서 몫을 구합니다.&lt;/td&gt;
&lt;td&gt;10 / 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;나머지 (또는 모듈로)&lt;/td&gt;
&lt;td&gt;왼쪽의 숫자를 오른쪽 숫자로 나눠서 나머지를 구합니다.&lt;/td&gt;
&lt;td&gt;8 % 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;( 2를 반환합니다, 8을 3으로 나눴을 때 몫이 2이기 때문입니다.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;**&lt;/td&gt;
&lt;td&gt;지수&lt;/td&gt;
&lt;td&gt;왼쪽의 숫자를 오른쪽 숫자만큼 제곱합니다.&lt;/td&gt;
&lt;td&gt;5 ** 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;( 5의 제곱이기 때문에 25를 반환합니다.)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 표를 실습해보도록 하겠습니다. 우선 왼쪽 표와 같이 html 파일을 하나 생성하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 html 파일을 열어 개발자 도구를 이용하여 콘솔을 확인하게 되면 연산자를 이용한 값이 매핑되어있습니다.&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;왼쪽 표의 코드를 보면 console.log에 6+9에 괄호를 추가하여 &lt;span&gt;(6+9)&lt;span&gt;&amp;nbsp; 형태로 되어있&lt;/span&gt;&lt;/span&gt;습니다. 만약 console.log(&quot;6+9: &quot;+6+9); 를 하게된다면 제일 아래의 결과값으로 69인 string 형태로 나오게 되니 type과 관계가 있으니 참고하시기 바랍니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 17px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt; &lt;br /&gt;&amp;lt;html&amp;nbsp;lang=&quot;en&quot;&amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&quot;UTF-8&quot;&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&quot;6+9:&amp;nbsp;&quot;+(6+9)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;20-15: &quot;+(20-15)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;3*7: &quot;+(3*7)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;10/5: &quot;+(10/5)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;8%3: &quot;+(8%3)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;5**2: &quot;+(5**2)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgn97d/btrYSj85T3d/VFxqQ2tXTJNffVka3kpq5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgn97d/btrYSj85T3d/VFxqQ2tXTJNffVka3kpq5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgn97d/btrYSj85T3d/VFxqQ2tXTJNffVka3kpq5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcgn97d%2FbtrYSj85T3d%2FVFxqQ2tXTJNffVka3kpq5K%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;354&quot; height=&quot;252&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 비교 연산자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 연산자는 두개의 값을 비교하여 if문에 비교문으로 많이 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math&quot;&gt;표 참고: &lt;/a&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math&quot;&gt;https://developer.mozilla.org/ko/docs/Learn/JavaScript/First_steps/Math&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;===&lt;/td&gt;
&lt;td&gt;일치 연산자&lt;/td&gt;
&lt;td&gt;왼쪽과 오른쪽의 값이 완전히 동일한지 테스트합니다.(타입, 값 포함)&lt;/td&gt;
&lt;td&gt;5 === 2 + 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!==&lt;/td&gt;
&lt;td&gt;불일치 연산자&lt;/td&gt;
&lt;td&gt;왼쪽과 오른쪽 값이 서로 동일하지 않은지 테스트합니다.(타입, 값 포함)&lt;br /&gt;-&amp;gt; 값과 타입이 하나라도 같지 않으면 false 반환합니다.&lt;/td&gt;
&lt;td&gt;5 !== 2 + 3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;==&lt;/td&gt;
&lt;td&gt;일치 연산자&lt;/td&gt;
&lt;td&gt;왼쪽과 오른쪽의 값이 완전히 동일한지 테스트합니다.&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!=&lt;/td&gt;
&lt;td&gt;불일치 연산자&lt;/td&gt;
&lt;td&gt;왼쪽과 오른쪽 값이 서로 동일하지 않은지 테스트합니다.&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;&lt;/td&gt;
&lt;td&gt;~보다 작음&lt;/td&gt;
&lt;td&gt;왼쪽 값이 오른쪽 값보다 작은지 테스트합니다.&lt;/td&gt;
&lt;td&gt;10 &amp;lt; 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;~보다 큼&lt;/td&gt;
&lt;td&gt;왼쪽 값이 오른쪽 값보다 큰지 테스트합니다.&lt;/td&gt;
&lt;td&gt;10 &amp;gt; 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;=&lt;/td&gt;
&lt;td&gt;~보다 작거나 같음&lt;/td&gt;
&lt;td&gt;왼쪽 값이 오른쪽 값보다 작거나 같은지 여부를 테스트합니다.&lt;/td&gt;
&lt;td&gt;3 &amp;lt;= 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;=&lt;/td&gt;
&lt;td&gt;~보다 크거나 같음&lt;/td&gt;
&lt;td&gt;왼쪽 값이 오른쪽 값보다 크거나 같은지 여부를 테스트합니다.&lt;/td&gt;
&lt;td&gt;5 &amp;gt;= 4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;span&gt; 우선 왼쪽 표와 같이 html 파일을 하나 생성하도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 html 파일을 열어 개발자 도구를 이용하여 콘솔을 확인하게 되면 연산자를 이용한 값이 매핑되어있습니다.&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;5 === 2 + 4 : 5===6이므로 타입은 숫자 형태로 같지만 값이 다르므로 false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5 !== 2 + 3 : 5와 5는 서로 동일하여 조건에 부합하므로 false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10&amp;lt;6 : 10은 6보다 작은값이 아니므로 false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10&amp;gt;20: 10은 20보다 크지 않아 false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3&amp;lt;=2 : 3은 2초과이므로 false&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5&amp;gt;=4: 5는 4보다 크므로 true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 연산자는 실무에서 정말 많이 사용하니 참고하시기 바랍니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt; &lt;br /&gt;&amp;lt;html&amp;nbsp;lang=&quot;en&quot;&amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&quot;UTF-8&quot;&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&quot;5&amp;nbsp;===&amp;nbsp;2&amp;nbsp;+&amp;nbsp;4:&amp;nbsp;&quot;+(5&amp;nbsp;===&amp;nbsp;2&amp;nbsp;+&amp;nbsp;4)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;5 !== 2 + 3: &quot;+(5 !== 2 + 3)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;10 &amp;lt; 6: &quot;+(10 &amp;lt; 6)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;10 &amp;gt; 20: &quot;+(10 &amp;gt; 20)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;3 &amp;lt;= 2: &quot;+(3 &amp;lt;= 2)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(&quot;5 &amp;gt;= 4: &quot;+(5 &amp;gt;= 4)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxDABS/btrYUuIt1E6/uckKHvgiqUNd9Swq16vlpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxDABS/btrYUuIt1E6/uckKHvgiqUNd9Swq16vlpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxDABS/btrYUuIt1E6/uckKHvgiqUNd9Swq16vlpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxDABS%2FbtrYUuIt1E6%2FuckKHvgiqUNd9Swq16vlpk%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;381&quot; height=&quot;246&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 삼항연산자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문 if를 대신하여 쉽게 비교하여 사용하는 연산자입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 삼항연산자의 값을 조건식을 작성하여 조건이 true이면 true에 해당하는 함수의 결과가 값이 되고, 조건이 false이면 false에 해당하는 함수의 결과가 값이 됩니다. 실습을 통해 확인하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;상항연산자 값 = 조건식 ? f(true) : f(false)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습:&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a값은 2는 1보다 크므로 참인 결과값이 2:1 중 2가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;d값은 b는 c보다 작으므로 거짓 값인 ffalse 값인 5가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e값은 c는 b보다 크기 때문에 참인 값인 ftrue 값인 4가 됩니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;lt;!DOCTYPE&amp;nbsp;html&amp;gt; &lt;br /&gt;&amp;lt;html&amp;nbsp;lang=&quot;en&quot;&amp;gt; &lt;br /&gt;&amp;lt;head&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;meta&amp;nbsp;charset=&quot;UTF-8&quot;&amp;gt; &lt;br /&gt;&amp;lt;/head&amp;gt; &lt;br /&gt;&amp;lt;body&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var a = (2&amp;gt;1)? 2:1 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;console.log(&quot;a: &quot;+a) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var b = 2; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var c = 3; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;function ftrue(){ &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//함수 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return 4; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;function ffalse(){ &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//함수 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return 5; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var d = (b&amp;gt;c)? ftrue():ffalse() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var e = (b&amp;lt;c)? ftrue():ffalse() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;console.log(&quot;d: &quot;+d) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;console.log(&quot;e: &quot;+e) &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Cfz2/btrYVgQNDGi/KUDtKU1kay5qykNuc57gn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Cfz2/btrYVgQNDGi/KUDtKU1kay5qykNuc57gn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Cfz2/btrYVgQNDGi/KUDtKU1kay5qykNuc57gn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Cfz2%2FbtrYVgQNDGi%2FKUDtKU1kay5qykNuc57gn1%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;436&quot; height=&quot;170&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE7ApH/btrYRQF4pfm/OEjbdk2SmYvCmhmez5GDCK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE7ApH/btrYRQF4pfm/OEjbdk2SmYvCmhmez5GDCK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE7ApH/btrYRQF4pfm/OEjbdk2SmYvCmhmez5GDCK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bE7ApH/btrYRQF4pfm/OEjbdk2SmYvCmhmez5GDCK/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPPEL8/btrWllzJ0ZK/J44wEV0Byu3XnL6TcUCBF0/img.gif&quot; data-lightbox=&quot;lightbox&quot;&gt;&lt;/span&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>javascript/기본</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/63</guid>
      <comments>https://itdeveloper.tistory.com/63#entry63comment</comments>
      <pubDate>Sun, 12 Feb 2023 01:44:03 +0900</pubDate>
    </item>
    <item>
      <title>01. openCV 이미지 출력 및 색상 변경</title>
      <link>https://itdeveloper.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번 시간에는 openCV에서 가자 기본인 이미지를 출력해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;openCV를 이용하여 기존 이미지를 출력함과 동시에 아래 이미지를 흑백으로 보여주도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;dog.png&quot; data-origin-width=&quot;1497&quot; data-origin-height=&quot;1920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dddxs6/btrWc2aZqPv/ry2N4FKqTltRauJj3BK77k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dddxs6/btrWc2aZqPv/ry2N4FKqTltRauJj3BK77k/img.png&quot; data-alt=&quot;https://pixabay.com/illustrations/dog-sitting-mascot-tamed-brown-5188108/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dddxs6/btrWc2aZqPv/ry2N4FKqTltRauJj3BK77k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdddxs6%2FbtrWc2aZqPv%2Fry2N4FKqTltRauJj3BK77k%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;140&quot; height=&quot;1920&quot; data-filename=&quot;dog.png&quot; data-origin-width=&quot;1497&quot; data-origin-height=&quot;1920&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://pixabay.com/illustrations/dog-sitting-mascot-tamed-brown-5188108/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;이미지 및 흑백 보여주기&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import sys&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import cv2&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;img = cv2.imread('dog.png', cv2.IMREAD_COLOR)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gray_img = &amp;nbsp;cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.imwrite('dog_gray.png',img)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;if img is None:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; print('Image load failed!')&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; sys.exit() &amp;nbsp; &amp;nbsp;#이미지가 없는 경우 프로그램을 종료&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.namedWindow('basic_dog', cv2.WINDOW_NORMAL)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.namedWindow('gray_dog', cv2.WINDOW_NORMAL)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.resizeWindow('basic_dog', 500, 500)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.resizeWindow('gray_dog', 500, 500)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.imshow('basic_dog',img) # basic_dog 라는 제목으로 이미지 화면에 보여주기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.imshow('gray_dog',gray_img) # gray_dog 라는 제목으로 이미지 화면에 보여주기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.waitKey(0) #어떤 키가 입력될때까지 대기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.destroyAllWindows() #모든 창 닫기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm7Ljn/btrWd1CETaa/3m8jde1cj039thK0EqaCo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm7Ljn/btrWd1CETaa/3m8jde1cj039thK0EqaCo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm7Ljn/btrWd1CETaa/3m8jde1cj039thK0EqaCo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm7Ljn%2FbtrWd1CETaa%2F3m8jde1cj039thK0EqaCo0%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;501&quot; height=&quot;528&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VfIKG/btrWeHYf0m2/gUbCltYoas7vqRgufJctKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VfIKG/btrWeHYf0m2/gUbCltYoas7vqRgufJctKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VfIKG/btrWeHYf0m2/gUbCltYoas7vqRgufJctKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVfIKG%2FbtrWeHYf0m2%2FgUbCltYoas7vqRgufJctKK%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;528&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;이미지 색상 변경&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 332px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 332px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 332px;&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import sys&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import cv2&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;img = cv2.imread('dog.png')&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gray_dog1 = &amp;nbsp;cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gray_dog2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;if img is None:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; print('Image load failed!')&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; sys.exit() &amp;nbsp; &amp;nbsp;#이미지가 없는 경우 프로그램을 종료&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.namedWindow('gray_dog1', cv2.WINDOW_NORMAL)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.namedWindow('gray_dog2', cv2.WINDOW_NORMAL)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.resizeWindow('gray_dog1', 500, 500)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.resizeWindow('gray_dog2', 500, 500)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.imshow('gray_dog1',gray_dog1) &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.imshow('gray_dog2',gray_dog2) &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.waitKey(0) #어떤 키가 입력될때까지 대기&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.destroyAllWindows() #모든 창 닫기&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDa2f/btrWeYewLOT/BvQ40MXUw9l3NqKidKpO60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDa2f/btrWeYewLOT/BvQ40MXUw9l3NqKidKpO60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDa2f/btrWeYewLOT/BvQ40MXUw9l3NqKidKpO60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDa2f%2FbtrWeYewLOT%2FBvQ40MXUw9l3NqKidKpO60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;499&quot; height=&quot;523&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lANuE/btrWcJ3HYH0/nPdSpzyxJj3rP0YEcFuxi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lANuE/btrWcJ3HYH0/nPdSpzyxJj3rP0YEcFuxi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lANuE/btrWcJ3HYH0/nPdSpzyxJj3rP0YEcFuxi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlANuE%2FbtrWcJ3HYH0%2FnPdSpzyxJj3rP0YEcFuxi0%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;498&quot; height=&quot;526&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 각 함수를 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cv2.IMREAD_COLOR&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;br /&gt;cv2.IMREAD_GRAYSCALE&amp;nbsp;:&amp;nbsp;이미지를&amp;nbsp;Grayscale로&amp;nbsp;읽는다 &lt;br /&gt;cv2.IMREAD_UNCHANGED&amp;nbsp;:&amp;nbsp;투명도인&amp;nbsp;Alpha&amp;nbsp;채널을&amp;nbsp;포함하여&amp;nbsp;읽는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cvtColor 는 색상을 바꾸는 것으로&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.&lt;/span&gt;&lt;span style=&quot;color: #9cdcfe;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;COLOR_BGR2GRAY는 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #fafafa; color: #000000;&quot;&gt;색상 이미지를 회색조 이미지로 변환합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #fafafa; color: #000000;&quot;&gt;다음은 실제 카메라를 연결하고 색상을 바꿔 보도록 하겠습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;letter-spacing: 0px; background-color: #fafafa; color: #000000;&quot;&gt;&amp;lt;카메라 연결을 통한 색상 변경&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import numpy as np&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;import cv2&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cap = cv2.VideoCapture(0) #video 연결된 디바이스 중 첫번째를 가지고 온다. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;while(True):&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; ret, frame = cap.read() &amp;nbsp; &amp;nbsp; # &amp;nbsp; 비디오 값이 정상적이면 ret은 True/ cap.read을 통해 frame을 연속적으로 읽는다.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; cv2.imshow('video', frame) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# &amp;nbsp; 연속적으로 frame을 출력하여 보여준다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; cv2.imshow('gray', gray) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# &amp;nbsp; 기본 영상을 gray로 변환.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; if cv2.waitKey() == ord('q'): &amp;nbsp; # &amp;nbsp; 키보드 q가 나오면 종료.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cap.release() &amp;nbsp; # 종료이므로 video 객체 cap을 없앤다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cv2.destroyAllWindows() # 종료&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;881&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTqqAE/btrWggFYBDa/zNUjw0BLvPM5ZelzSTFNl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTqqAE/btrWggFYBDa/zNUjw0BLvPM5ZelzSTFNl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTqqAE/btrWggFYBDa/zNUjw0BLvPM5ZelzSTFNl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTqqAE%2FbtrWggFYBDa%2FzNUjw0BLvPM5ZelzSTFNl0%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;1188&quot; height=&quot;881&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;881&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPPEL8/btrWllzJ0ZK/J44wEV0Byu3XnL6TcUCBF0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPPEL8/btrWllzJ0ZK/J44wEV0Byu3XnL6TcUCBF0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPPEL8/btrWllzJ0ZK/J44wEV0Byu3XnL6TcUCBF0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cPPEL8/btrWllzJ0ZK/J44wEV0Byu3XnL6TcUCBF0/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&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;</description>
      <category>OpenCV/기본</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/61</guid>
      <comments>https://itdeveloper.tistory.com/61#entry61comment</comments>
      <pubDate>Sun, 15 Jan 2023 15:45:15 +0900</pubDate>
    </item>
    <item>
      <title>layout- LinearLayout(안드로이드)</title>
      <link>https://itdeveloper.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;레이아웃 종류는 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중에서도 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;LinearLayout&lt;/span&gt;을 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;LinearLayout&lt;/span&gt;은 여러 View(Button, imageView 등) 컴포넌트들을 수직적(Vertical), 수평적(Horizontal)으로 컴포넌트를 레이아웃 위에 정렬하여 배치할 수 있습니다.&amp;nbsp; 그래서 수직, 수평적으로 사용하기 때문에 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;LinearLayout&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;그러면 &lt;span style=&quot;background-color: #ffffff;&quot;&gt;LinearLayout에 대해 &lt;/span&gt;실습을 해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이미지 082.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8VHmg/btrVzzVb32V/9bs62Jr5UDJsgedEHSn7Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8VHmg/btrVzzVb32V/9bs62Jr5UDJsgedEHSn7Ik/img.png&quot; data-alt=&quot;1. 새로운 Project를 만들겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8VHmg/btrVzzVb32V/9bs62Jr5UDJsgedEHSn7Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8VHmg%2FbtrVzzVb32V%2F9bs62Jr5UDJsgedEHSn7Ik%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;648&quot; data-filename=&quot;이미지 082.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1. 새로운 Project를 만들겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLb4cV/btrVA1JVH1v/fQw0HaNnVyEDF82JUtcCy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLb4cV/btrVA1JVH1v/fQw0HaNnVyEDF82JUtcCy0/img.png&quot; data-alt=&quot;2. 처음 생성한 프로젝트의 activity_main.xml 화면에서 Component Tree 는 앞의 시간에 확인하였듯이 ConstraintLaytou으로 지정되어 있으나 오른쪽 마우스를 클릭해서 Convert View를 통해 View를 LinearLayout으로 변경하도록 하겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLb4cV/btrVA1JVH1v/fQw0HaNnVyEDF82JUtcCy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLb4cV%2FbtrVA1JVH1v%2FfQw0HaNnVyEDF82JUtcCy0%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;492&quot; height=&quot;657&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2. 처음 생성한 프로젝트의 activity_main.xml 화면에서 Component Tree 는 앞의 시간에 확인하였듯이 ConstraintLaytou으로 지정되어 있으나 오른쪽 마우스를 클릭해서 Convert View를 통해 View를 LinearLayout으로 변경하도록 하겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OnGK8/btrVDidjr6m/K3sjRwIifkbVieCO05olVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OnGK8/btrVDidjr6m/K3sjRwIifkbVieCO05olVK/img.png&quot; data-alt=&quot;3. LinearLayout으로 변경하기 위해 해당 레이아웃을 클릭한 후 Apply를 클릭하도록 하겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OnGK8/btrVDidjr6m/K3sjRwIifkbVieCO05olVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOnGK8%2FbtrVDidjr6m%2FK3sjRwIifkbVieCO05olVK%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;397&quot; height=&quot;363&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3. LinearLayout으로 변경하기 위해 해당 레이아웃을 클릭한 후 Apply를 클릭하도록 하겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;1046&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mazae/btrVzVRhbOO/YGnHkbKcynKBp7U50BADi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mazae/btrVzVRhbOO/YGnHkbKcynKBp7U50BADi0/img.png&quot; data-alt=&quot;4. 레이아웃을 바꾸면 기본적으로 Horizontal 인 수평정렬이 기본으로 세팅되어 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mazae/btrVzVRhbOO/YGnHkbKcynKBp7U50BADi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmazae%2FbtrVzVRhbOO%2FYGnHkbKcynKBp7U50BADi0%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;618&quot; height=&quot;462&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;1046&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;4. 레이아웃을 바꾸면 기본적으로 Horizontal 인 수평정렬이 기본으로 세팅되어 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGGQWV/btrVIwaRW8M/nZM6e3oiPUMAS0AXqlbpl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGGQWV/btrVIwaRW8M/nZM6e3oiPUMAS0AXqlbpl0/img.png&quot; data-alt=&quot;5. hello world인 TextView 컴포넌트의 오른쪽 속성인 layout_width를 변경하여 현재 warp_content인 내용물에 맞춰진 크기를 match_parent를 변경하여 부모창인 LinearLayout에 맞추도록 하겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGGQWV/btrVIwaRW8M/nZM6e3oiPUMAS0AXqlbpl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGGQWV%2FbtrVIwaRW8M%2FnZM6e3oiPUMAS0AXqlbpl0%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;631&quot; height=&quot;453&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;659&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;5. hello world인 TextView 컴포넌트의 오른쪽 속성인 layout_width를 변경하여 현재 warp_content인 내용물에 맞춰진 크기를 match_parent를 변경하여 부모창인 LinearLayout에 맞추도록 하겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;663&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B1NL4/btrVF8VDVza/o4Xkoo1vKcp1KolRWHsel0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B1NL4/btrVF8VDVza/o4Xkoo1vKcp1KolRWHsel0/img.png&quot; data-alt=&quot;6. 위와 같이 hello World가 부모창인 LinearLayout에 맞춰진것을 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B1NL4/btrVF8VDVza/o4Xkoo1vKcp1KolRWHsel0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB1NL4%2FbtrVF8VDVza%2Fo4Xkoo1vKcp1KolRWHsel0%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;635&quot; height=&quot;435&quot; data-origin-width=&quot;968&quot; data-origin-height=&quot;663&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;6. 위와 같이 hello World가 부모창인 LinearLayout에 맞춰진것을 확인할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;1013&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdMG3u/btrVF8VDW5m/QGvR4tTgZ3BRMSvBtgX7Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdMG3u/btrVF8VDW5m/QGvR4tTgZ3BRMSvBtgX7Tk/img.png&quot; data-alt=&quot;7. TextView 컴포넌트를 드래그해서 추가하도록 하겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdMG3u/btrVF8VDW5m/QGvR4tTgZ3BRMSvBtgX7Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdMG3u%2FbtrVF8VDW5m%2FQGvR4tTgZ3BRMSvBtgX7Tk%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;632&quot; height=&quot;861&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;1013&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;7. TextView 컴포넌트를 드래그해서 추가하도록 하겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfstNx/btrVzFHPX7d/uxIjCCXezyReMZBeQCJiU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfstNx/btrVzFHPX7d/uxIjCCXezyReMZBeQCJiU1/img.png&quot; data-alt=&quot;8. TextView 두개의 컴포넌트가 Horizontal 인 수평정렬이 된것을 확인할 수 있습니다. 혹시, TextView가 겹치는 현상이 이으면 layout_weight 가중치를 모두 1로 설정하면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfstNx/btrVzFHPX7d/uxIjCCXezyReMZBeQCJiU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfstNx%2FbtrVzFHPX7d%2FuxIjCCXezyReMZBeQCJiU1%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;634&quot; height=&quot;353&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;778&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;8. TextView 두개의 컴포넌트가 Horizontal 인 수평정렬이 된것을 확인할 수 있습니다. 혹시, TextView가 겹치는 현상이 이으면 layout_weight 가중치를 모두 1로 설정하면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zaWkc/btrVDiLbSr6/dTG5mCIKBm7a6YO7eAMp3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zaWkc/btrVDiLbSr6/dTG5mCIKBm7a6YO7eAMp3k/img.png&quot; data-alt=&quot;9. Horizontal 인 수평정렬에 대한 가중치 값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zaWkc/btrVDiLbSr6/dTG5mCIKBm7a6YO7eAMp3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzaWkc%2FbtrVDiLbSr6%2FdTG5mCIKBm7a6YO7eAMp3k%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;321&quot; height=&quot;197&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9. Horizontal 인 수평정렬에 대한 가중치 값&lt;/figcaption&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;그러면 이어서 레이아웃을 Vertical인 수직으로 바꿔서 실습해도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1115&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RYAdl/btrVz99xMij/TPJ8SJjaybT4ON7tC2sMp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RYAdl/btrVz99xMij/TPJ8SJjaybT4ON7tC2sMp0/img.png&quot; data-alt=&quot;1. LinearLayout에서 오른쪽 마우스를 클릭해서 Conver orientation to vertical(수직)로 바꾸면 되고 만약 vertical인 경우에는 horizontal로 바꾸면 되겠습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RYAdl/btrVz99xMij/TPJ8SJjaybT4ON7tC2sMp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRYAdl%2FbtrVz99xMij%2FTPJ8SJjaybT4ON7tC2sMp0%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;678&quot; height=&quot;426&quot; data-origin-width=&quot;1115&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1. LinearLayout에서 오른쪽 마우스를 클릭해서 Conver orientation to vertical(수직)로 바꾸면 되고 만약 vertical인 경우에는 horizontal로 바꾸면 되겠습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;1031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DR17a/btrVAueAE9G/rVvwqViZd4LFuX9YYTI3q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DR17a/btrVAueAE9G/rVvwqViZd4LFuX9YYTI3q0/img.png&quot; data-alt=&quot;2. 레이아웃이 vertical 의 LinearLayout으로 바뀐것을 확인할 수 있으며 자동으로 textView들이 가중치인 weight 1에 의해 세팅된것을 확인할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DR17a/btrVAueAE9G/rVvwqViZd4LFuX9YYTI3q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDR17a%2FbtrVAueAE9G%2FrVvwqViZd4LFuX9YYTI3q0%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;630&quot; height=&quot;1031&quot; data-origin-width=&quot;727&quot; data-origin-height=&quot;1031&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2. 레이아웃이 vertical 의 LinearLayout으로 바뀐것을 확인할 수 있으며 자동으로 textView들이 가중치인 weight 1에 의해 세팅된것을 확인할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0TYlx/btrVzI5wqyF/zvOp9JLkRkijUGtMRPQkX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0TYlx/btrVzI5wqyF/zvOp9JLkRkijUGtMRPQkX0/img.png&quot; data-alt=&quot;최종적으로 Code형태로 이를 확인하면 LinearLayout의 vertical 형태인 orientation 속성을 확인할 수 있습니다. 그리고 TextView 2개의 가중치 또한 확인 할 수 있습니다. 위의 Code의 모든 xml 값을 복사해서 새로운 Project가 생성되었을때 복사하여 붙여넣으면 그 디자인을 바로 쓸수가 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0TYlx/btrVzI5wqyF/zvOp9JLkRkijUGtMRPQkX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0TYlx%2FbtrVzI5wqyF%2FzvOp9JLkRkijUGtMRPQkX0%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;1401&quot; height=&quot;575&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종적으로 Code형태로 이를 확인하면 LinearLayout의 vertical 형태인 orientation 속성을 확인할 수 있습니다. 그리고 TextView 2개의 가중치 또한 확인 할 수 있습니다. 위의 Code의 모든 xml 값을 복사해서 새로운 Project가 생성되었을때 복사하여 붙여넣으면 그 디자인을 바로 쓸수가 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&amp;lt;?xml&amp;nbsp;version=&quot;1.0&quot;&amp;nbsp;encoding=&quot;utf-8&quot;?&amp;gt; &lt;br /&gt;&amp;lt;LinearLayout&amp;nbsp;xmlns:android=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&amp;quot;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://schemas.android.com/apk/res/android&quot;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:app=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res-auto&amp;quot;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://schemas.android.com/apk/res-auto&quot;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:tools=&quot;&lt;a href=&quot;http://schemas.android.com/tools&amp;quot;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://schemas.android.com/tools&quot;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;match_parent&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;match_parent&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:orientation=&quot;vertical&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tools:context=&quot;.MainActivity&quot;&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;TextView &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:id=&quot;@+id/textView7&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;wrap_content&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;wrap_content&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_weight=&quot;1&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:text=&quot;TextView&quot;&amp;nbsp;/&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;TextView &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:id=&quot;@+id/textView8&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_width=&quot;wrap_content&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_height=&quot;wrap_content&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:layout_weight=&quot;1&quot; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;android:text=&quot;TextView&quot;&amp;nbsp;/&amp;gt; &lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYXrga/btrVAL8oXTk/mj5mrmXALhfMg1K6wY67j0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYXrga/btrVAL8oXTk/mj5mrmXALhfMg1K6wY67j0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYXrga/btrVAL8oXTk/mj5mrmXALhfMg1K6wY67j0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cYXrga/btrVAL8oXTk/mj5mrmXALhfMg1K6wY67j0/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;20&quot; height=&quot;21&quot; data-origin-width=&quot;20&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0zWov/btrVALUjUmG/HgyfbJrPts9OvuTpzVjW30/img.gif&quot; data-lightbox=&quot;lightbox&quot;&gt;&lt;/span&gt;자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Android Studio/기본1</category>
      <category>layout</category>
      <category>LinearLayout</category>
      <category>안드로이드</category>
      <author>IT-개발자</author>
      <guid isPermaLink="true">https://itdeveloper.tistory.com/60</guid>
      <comments>https://itdeveloper.tistory.com/60#entry60comment</comments>
      <pubDate>Sun, 8 Jan 2023 17:12:05 +0900</pubDate>
    </item>
  </channel>
</rss>