<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>진득하게 코딩하기</title>
    <link>https://jinco.tistory.com/</link>
    <description>안녕하세요. 코딩에 대한 유용한 정보에 대해 알려드리겠습니다.</description>
    <language>ko</language>
    <pubDate>Sun, 17 May 2026 01:32:59 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>진득코딩</managingEditor>
    <image>
      <title>진득하게 코딩하기</title>
      <url>https://tistory1.daumcdn.net/tistory/6801402/attach/52df196a4d1d4b6c830c4cd460117c84</url>
      <link>https://jinco.tistory.com</link>
    </image>
    <item>
      <title>[데이터베이스] CONCAT과 COALEASE에 대해 알아보자</title>
      <link>https://jinco.tistory.com/122</link>
      <description>&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-end=&quot;393&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;SQL을 작성하다 보면 단순한 조회를 넘어 &lt;b&gt;문자열 가공이나 NULL 처리&lt;/b&gt;가 필요한 경우가 자주 발생합니다.&lt;/p&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;이러한 처리를 애플리케이션 단에서 수행할 수도 있지만, SQL 함수만으로도 충분히 깔끔하게 해결할 수 있는 경우가 많습니다.&lt;/p&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;522&quot; data-start=&quot;395&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 시간에는 실무 쿼리에서 자주 사용되는 문자열 처리 함수 &quot;CONCAT&quot;과 NULL 처리 함수 &quot;COALESCE&quot;에 대해 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;522&quot; data-start=&quot;395&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;522&quot; data-start=&quot;395&quot; data-ke-style=&quot;style2&quot;&gt;CONCAT의 정의&lt;/blockquote&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;CONCAT은 &lt;b&gt;여러 문자열을 하나의 문자열로 결합하는 SQL 함수&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;CONCAT(문자열1, 문자열2, ...)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DBMS에 따라 문자열 결합 연산자(||, +)를 제공하기도 하지만, CONCAT은 &lt;b&gt;명시적이고 가독성이 높으며 NULL 처리에 비교적 안전&lt;/b&gt;하다는 장점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CONCAT 활용 방법&lt;/blockquote&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;1. 문자열 조합&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;CONCAT(factory_id, '-', equipment_id)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1281&quot; data-start=&quot;1237&quot; data-ke-size=&quot;size16&quot;&gt;이처럼 코드나 식별자를 조합할 때 CONCAT은 직관적인 표현을 제공합니다.&lt;/p&gt;
&lt;p data-end=&quot;1281&quot; data-start=&quot;1237&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1281&quot; data-start=&quot;1237&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2. 날짜 문자열을 활용한 월 단위 데이터 조회&lt;/p&gt;
&lt;blockquote data-end=&quot;1281&quot; data-start=&quot;1237&quot; data-ke-style=&quot;style3&quot;&gt;mir.result_date LIKE CONCAT(LEFT('2026-01-03', 7), '%')&lt;/blockquote&gt;
&lt;p data-end=&quot;945&quot; data-start=&quot;922&quot; data-ke-size=&quot;size16&quot;&gt;위 쿼리는 다음과 같은 흐름으로 동작합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1074&quot; data-start=&quot;947&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;947&quot;&gt;'2026-01-03'에서 LEFT(..., 7)을 사용해 2026-01 추출&lt;/li&gt;
&lt;li data-end=&quot;1038&quot; data-start=&quot;1000&quot;&gt;CONCAT으로 %를 붙여 2026-01% 형태 생성&lt;/li&gt;
&lt;li data-end=&quot;1074&quot; data-start=&quot;1039&quot;&gt;LIKE 조건을 통해 해당 월에 속하는 모든 날짜 조회&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;1082&quot; data-start=&quot;1076&quot; data-ke-size=&quot;size16&quot;&gt;해당 방식의 장점은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1164&quot; data-start=&quot;1084&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1112&quot; data-start=&quot;1084&quot;&gt;월 시작일과 종료일을 직접 계산하지 않아도 됩니다.&lt;/li&gt;
&lt;li data-end=&quot;1138&quot; data-start=&quot;1113&quot;&gt;문자열 기반 날짜 컬럼을 사용하는 환경에서 동적인 월 조건을 간결하게 표현할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;COALESCE 정의&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COALESCE는 &lt;b&gt;여러 값 중 NULL이 아닌 첫 번째 값을 반환하는 SQL 함수&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;COALESCE(값1, 값2, 값3, ...)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1466&quot; data-start=&quot;1423&quot; data-ke-size=&quot;size16&quot;&gt;ANSI SQL 표준 함수로, 대부분의 DBMS에서 동일하게 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1466&quot; data-start=&quot;1423&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;1466&quot; data-start=&quot;1423&quot; data-ke-style=&quot;style2&quot;&gt;COALESCE 활용 방법&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기본값 처리&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;COALESCE(water_usage, 0)&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1578&quot; data-start=&quot;1561&quot;&gt;값이 존재하면 해당 값 사용&lt;/li&gt;
&lt;li data-end=&quot;1597&quot; data-start=&quot;1579&quot;&gt;값이 NULL이면 0으로 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회 결과를 그대로 화면이나 계산 로직에서 사용할 수 있도록 &lt;b&gt;데이터를 안정적인 형태로 만들어줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 계산식에서 NULL 방지&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;COALESCE(usage_value, 0) + COALESCE(extra_usage, 0)&lt;/blockquote&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;SQL에서는 계산 대상 중 하나라도 NULL이면 결과가 NULL이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이때 COALESCE를 사용하지 않으면 의도하지 않은 결과를 방지할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CONCAT과 COALESCE의 조합 활용&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;CONCAT( COALESCE(factory_name, '미지정 공장'), ' / ', COALESCE(equipment_name, '미지정 설비') )&lt;/blockquote&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2116&quot; data-start=&quot;2083&quot;&gt;문자열 결합 중 NULL로 인해 전체 결과가 깨지지 않는다.&lt;/li&gt;
&lt;li data-end=&quot;2144&quot; data-start=&quot;2117&quot;&gt;값이 없는 경우에도 의미 있는 기본 문구 제공한다.&lt;/li&gt;
&lt;li data-end=&quot;2175&quot; data-start=&quot;2145&quot;&gt;쿼리 결과를 그대로 화면 표시용 데이터로 활용 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 문자열 처리와 NULL 처리를 동시에 고려하는 경우, 두 함수의 조합은 매우 효과적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;정리&lt;/blockquote&gt;
&lt;p data-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-filename=&quot;CONCAT과COALEASE_정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxQt46/dJMcajgETF8/FtgT7jAZ891PnytrYjo2o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxQt46/dJMcajgETF8/FtgT7jAZ891PnytrYjo2o1/img.png&quot; data-alt=&quot;CANCAT과 COALESASE 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxQt46/dJMcajgETF8/FtgT7jAZ891PnytrYjo2o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxQt46%2FdJMcajgETF8%2FFtgT7jAZ891PnytrYjo2o1%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;500&quot; data-filename=&quot;CONCAT과COALEASE_정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CANCAT과 COALESASE 정리&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CONCAT과 COALESCE는 각각 단순한 기능을 가진 SQL 함수이지만, 실무에서는 다음과 같은 역할을 수행할 수 있습니다.&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 data-end=&quot;2373&quot; data-start=&quot;2330&quot;&gt;CONCAT&lt;br /&gt;&amp;rarr; 문자열을 조합해 조건식이나 표시용 데이터를 생성&lt;/li&gt;
&lt;li data-end=&quot;2424&quot; data-start=&quot;2375&quot;&gt;COALESCE&lt;br /&gt;&amp;rarr; NULL 값을 안전한 값으로 치환하여 쿼리 결과 안정화&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;두 함수를 적절히 활용하면&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 data-end=&quot;2468&quot; data-start=&quot;2443&quot;&gt;불필요한 애플리케이션 로직을 줄일 수 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;2482&quot; data-start=&quot;2469&quot;&gt;쿼리 가독성을 높이며 데이터 조회 단계에서 결과를 정제할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;&amp;nbsp;이번 시간에는 CONCAT과 COALEASCE라는 처리 함수들에 대해 살펴보았습니다.&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;해당 두 처리 함수들은 SQL을 단순한 조회 언어가 아닌 &lt;b&gt;데이터를 가공하고 표현하는 도구&lt;/b&gt;로 활용하기 위해 꼭 익혀둘 만한 기본 함수들이라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;327&quot; data-end=&quot;414&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot; data-start=&quot;327&quot; data-end=&quot;414&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.  &lt;/p&gt;</description>
      <category>데이터베이스</category>
      <category>COALEASE</category>
      <category>concat</category>
      <category>데이터베이스</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/122</guid>
      <comments>https://jinco.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 21 Jan 2026 13:00:31 +0900</pubDate>
    </item>
    <item>
      <title>Java Stream에 대해 알아보자</title>
      <link>https://jinco.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;142&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;안녕하세요. 진득 코딩입니다.&lt;/p&gt;
&lt;p data-end=&quot;142&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;289&quot; data-start=&quot;144&quot; data-ke-size=&quot;size16&quot;&gt;자바(Java)를 사용해 개발을 하다 보면 기본적인 for문과 if문만으로도 대부분의 로직을 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;289&quot; data-start=&quot;144&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;하지만 실무에서 개발을 진행하다 보면, 조건과 반복이 점점 늘어나면서 코드가 복잡해지고 가독성이 떨어지는 상황을 자주 마주하게 됩니다.&lt;/p&gt;
&lt;p data-end=&quot;289&quot; data-start=&quot;144&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;291&quot; data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위해 Java 8부터 &lt;b&gt;Stream API&lt;/b&gt;가 도입되었습니다.&lt;/p&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;291&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;Stream은 컬렉션 데이터를 보다 &lt;b&gt;선언적이고 간결하게 처리&lt;/b&gt;할 수 있도록 도와주는 기능으로, 반복과 조건 로직을 명확하게 표현할 수 있게 해 줍니다.&lt;/p&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;291&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;517&quot; data-start=&quot;431&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 Java 8부터 제공되는 Stream API를 중심으로, Stream의 개념과 함께 실무에서 자주 사용되는 활용 사례를 정리해 보겠습니다.&lt;/p&gt;
&lt;p data-end=&quot;517&quot; data-start=&quot;431&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;517&quot; data-start=&quot;431&quot; data-ke-style=&quot;style2&quot;&gt;Stream의 정의&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;589&quot; data-start=&quot;566&quot; data-ke-size=&quot;size16&quot;&gt;Stream은 데이터의 흐름입니다.&lt;/p&gt;
&lt;p data-end=&quot;589&quot; data-start=&quot;566&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;591&quot; data-ke-size=&quot;size16&quot;&gt;여기서 중요한 점은 Stream이 &lt;b&gt;데이터를 저장하는 구조가 아니라&lt;/b&gt;, &lt;b&gt;데이터를 처리하기 위한 파이프라인&lt;/b&gt;이라는 점입니다.&lt;/p&gt;
&lt;p data-end=&quot;666&quot; data-start=&quot;591&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;666&quot; data-start=&quot;591&quot; data-ke-style=&quot;style3&quot;&gt;Collection &amp;rarr; Stream &amp;rarr; 중간 연산 &amp;rarr; 최종 연산 &amp;rarr; 결과&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;749&quot; data-start=&quot;722&quot; data-ke-size=&quot;size16&quot;&gt;즉, Stream은 다음과 같은 특징을 가집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;833&quot; data-start=&quot;751&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;785&quot; data-start=&quot;751&quot;&gt;컬렉션(List, Set 등)을 &lt;b&gt;직접 수정하지 않음&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;804&quot; data-start=&quot;786&quot;&gt;데이터를 &lt;b&gt;한 번만 사용&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;833&quot; data-start=&quot;805&quot;&gt;연산은 &lt;b&gt;필요한 시점에 실행 (지연 실행)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Stream의 필요성&lt;/blockquote&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;기존의 컬렉션 처리 방식은 주로 for문과 if문을 사용했습니다.&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;1. 기존 방식(for문 기반)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;List&amp;lt;UserDto&amp;gt; result = new ArrayList&amp;lt;&amp;gt;();&lt;br /&gt;&lt;br /&gt;for (UserEntity entity : userEntities) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (&quot;Y&quot;.equals(entity.getUseYn())) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result.add(new UserDto(entity)); &lt;br /&gt;&amp;nbsp; &amp;nbsp; } &lt;br /&gt;&amp;nbsp; }&lt;/blockquote&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;List&amp;lt;UserDto&amp;gt; result = userEntities.stream() &lt;br /&gt;&amp;nbsp; &amp;nbsp; .filter(entity -&amp;gt; &quot;Y&quot;.equals(entity.getUseYn()))&lt;br /&gt;&amp;nbsp; &amp;nbsp; .map(UserDto::new) &lt;br /&gt;&amp;nbsp; &amp;nbsp; .toList();&lt;/blockquote&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;이때 Stream을 사용하면 데이터를 어떻게 처리할지 선언적으로 표현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Stream의 구조&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Stream은 크게 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;1. Stream 생성&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;nbsp;userEntities.stream();&lt;/blockquote&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;2. 중간 연산(Intermediate Operation)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1595&quot; data-start=&quot;1547&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1559&quot; data-start=&quot;1547&quot;&gt;Stream을 반환&lt;/li&gt;
&lt;li data-end=&quot;1572&quot; data-start=&quot;1560&quot;&gt;여러 번 연결 가능&lt;/li&gt;
&lt;li data-end=&quot;1595&quot; data-start=&quot;1573&quot;&gt;실제로 실행되지는 않음 (지연 실행)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1608&quot; data-start=&quot;1597&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 중간 연산:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1690&quot; data-start=&quot;1609&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1630&quot; data-start=&quot;1609&quot;&gt;filter() : 조건 필터링&lt;/li&gt;
&lt;li data-end=&quot;1649&quot; data-start=&quot;1631&quot;&gt;map() : 데이터 변환&lt;/li&gt;
&lt;li data-end=&quot;1667&quot; data-start=&quot;1650&quot;&gt;sorted() : 정렬&lt;/li&gt;
&lt;li data-end=&quot;1690&quot; data-start=&quot;1668&quot;&gt;distinct() : 중복 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;.filter(entity -&amp;gt; &quot;Y&quot;.equals(entity.getUseYn()))&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 최종 연산 (Terminal Operation)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1821&quot; data-start=&quot;1794&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1802&quot; data-start=&quot;1794&quot;&gt;결과를 반환&lt;/li&gt;
&lt;li data-end=&quot;1821&quot; data-start=&quot;1803&quot;&gt;이 시점에 실제 연산이 수행됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1834&quot; data-start=&quot;1823&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 최종 연산:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1887&quot; data-start=&quot;1835&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1847&quot; data-start=&quot;1835&quot;&gt;toList()&lt;/li&gt;
&lt;li data-end=&quot;1861&quot; data-start=&quot;1848&quot;&gt;collect()&lt;/li&gt;
&lt;li data-end=&quot;1873&quot; data-start=&quot;1862&quot;&gt;count()&lt;/li&gt;
&lt;li data-end=&quot;1887&quot; data-start=&quot;1874&quot;&gt;forEach()&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;.toList();&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;실무에서의 활용법&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Entity &amp;rarr; DTO 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실무에서 Stream을 가장 많이 사용하는 대표적인 케이스가 Entity &amp;rarr; DTO 변환입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;List&amp;lt;UserDto&amp;gt; userDtos = userEntities.stream() &lt;br /&gt;&amp;nbsp; &amp;nbsp; .map(UserDto::new) &lt;br /&gt;&amp;nbsp; &amp;nbsp; .toList();&lt;/blockquote&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 data-end=&quot;2146&quot; data-start=&quot;2125&quot;&gt;Entity를 그대로 반환하지 않고&lt;/li&gt;
&lt;li data-end=&quot;2173&quot; data-start=&quot;2147&quot;&gt;필요한 데이터만 DTO로 변환하여 전달할 때&lt;/li&gt;
&lt;li data-end=&quot;2190&quot; data-start=&quot;2174&quot;&gt;코드가 매우 간결해집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2. filter를 이용한 조건 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;조건에 맞는 데이터만 걸러내는 경우에도 Strem은 매우 직관적입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;List&amp;lt;UserDto&amp;gt; activeUsers = userEntities.stream() &lt;br /&gt;.filter(entity -&amp;gt; entity.getDeleteYn() == null &lt;br /&gt;|| &quot;N&quot;.equals(entity.getDeleteYn())) &lt;br /&gt;.map(UserDto::new) &lt;br /&gt;.toList();&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드는 삭제되지 않은 사용자만 조회해서 DTO로 변환한다는 의미를 가집니다.&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;이처럼 로직이 코드 그대로 드러나는 점이&amp;nbsp; Stream의 가장 큰 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Stream을 사용할 때 주의할 점&lt;/blockquote&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;1. Stream은 재사용할 수 없다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Stream&amp;lt;UserEntity&amp;gt; stream = userEntities.stream(); &lt;br /&gt;stream.count(); &lt;br /&gt;stream.forEach(System.out::println); // 오류 발생&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Stream이 무조건 좋은 것은 아니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2830&quot; data-start=&quot;2788&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2795&quot; data-start=&quot;2788&quot;&gt;단순 반복&lt;/li&gt;
&lt;li data-end=&quot;2813&quot; data-start=&quot;2796&quot;&gt;디버깅이 중요한 복잡한 로직&lt;/li&gt;
&lt;li data-end=&quot;2830&quot; data-start=&quot;2814&quot;&gt;예외 처리가 많은 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2862&quot; data-start=&quot;2832&quot; data-ke-size=&quot;size16&quot;&gt;이런 상황에서는 for문이 더 명확할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;2862&quot; data-start=&quot;2832&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-end=&quot;2862&quot; data-start=&quot;2832&quot; data-ke-style=&quot;style2&quot;&gt;Stream 활용하기 좋은 상황&lt;/blockquote&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;&amp;nbsp;컬렉션 데이터를 필터링할 때&lt;/li&gt;
&lt;li&gt;Entity &amp;rarr; DTO 변환이 필요한 경우&lt;/li&gt;
&lt;li&gt;데이터 가공 로직을 가독성 좋게 표현하고 싶을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;정리&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;stream_정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzIGqb/dJMcafyA41K/ySbkP5HLd0LZGU4DeYfuTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzIGqb/dJMcafyA41K/ySbkP5HLd0LZGU4DeYfuTK/img.png&quot; data-alt=&quot;Stream 핵심 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzIGqb/dJMcafyA41K/ySbkP5HLd0LZGU4DeYfuTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzIGqb%2FdJMcafyA41K%2FySbkP5HLd0LZGU4DeYfuTK%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;500&quot; data-filename=&quot;stream_정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Stream 핵심 정리&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;&amp;nbsp;Stream은 단순히 코드를 짧게 만들기 위한 문법이 아니라, 데이터 처리 의도를 명확하게 표현하기 위한 도구입니다.&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;특히 Entity를 DTO로 변환하거나 filter를 통한 조건 처리를 통해 코드의 가독성과 유지보수성을 크게 높일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;192&quot; data-start=&quot;142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 시간에는 Java의 강력한 도구 중 하나인 &lt;b&gt;Stream&lt;/b&gt;에 대해 알아보았습니다.&lt;/p&gt;
&lt;p data-end=&quot;192&quot; data-start=&quot;142&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;325&quot; data-start=&quot;194&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Stream은 분명 많은 장점을 가진 도구이지만, 모든 상황에 항상 최선의 선택이 되는 것은 아닙니다.&lt;/p&gt;
&lt;p data-end=&quot;325&quot; data-start=&quot;194&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;중요한 것은 단순히 도구를 많이 아는 것이 아니라, &lt;b&gt;상황에 맞는 도구를 선택하고 활용할 수 있는 판단력&lt;/b&gt;이라고 생각합니다.&lt;/p&gt;
&lt;p data-end=&quot;325&quot; data-start=&quot;194&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;414&quot; data-start=&quot;327&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;앞으로도 Stream을 포함한 다양한 도구들의 특성을 이해하고, 적재적소에 알맞은 선택을 할 수 있는 개발자가 되기 위해 꾸준히 고민해 보면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-end=&quot;414&quot; data-start=&quot;327&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;414&quot; data-start=&quot;327&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>java8</category>
      <category>Stream</category>
      <category>자바</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/120</guid>
      <comments>https://jinco.tistory.com/120#entry120comment</comments>
      <pubDate>Tue, 20 Jan 2026 13:00:04 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] Python의 리스트 컴프리헨션에 대해 알아보자</title>
      <link>https://jinco.tistory.com/119</link>
      <description>&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;정보처리기사 시험에서 &lt;/span&gt;&lt;span&gt;리스트 컴프리헨션(List Comprehension)&lt;/span&gt;&lt;span&gt; 이 직접적으로 출제될 확률은 높지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;하지만 &lt;/span&gt;&lt;span&gt;파이썬을 사용하는 개발자라면 반드시 알고 있어야 할 문법&lt;/span&gt;&lt;span&gt;이며, 코드를 간결하고 가독성 있게 작성하는 데 큰 도움을 주는 개념입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;리스트 컴프리헨션&lt;/blockquote&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;리스트 컴프리헨션(List Comprehension)은 반복문과 조건문을 사용해 리스트를 생성하는 파이썬의 축약 문법입니다.&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;기존의 for문을 사용해 여러 줄로 작성하던 코드를 한 줄로 표현할 수 있습니다.&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;blockquote data-ke-style=&quot;style2&quot;&gt;기본 문법 구조&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;[표현식 for 변수 in iterable]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 예제1: 0부터 4까지의 제곱 값 리스트 만들기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적인 for문&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;result = []&lt;br /&gt;for i in range(5):&lt;br /&gt;result.append(i * i)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트 컴프리헨션 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;result = [ i * i for i in range(5)]&lt;/blockquote&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;blockquote data-ke-style=&quot;style2&quot;&gt;조건문(if)과 함께 사용하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트 컴프리헨션에서는 if 조건을 함께 사용할 수 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[표현식 for 변수 in iterable if 조건]&lt;/blockquote&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;예제2 : 짝수만 추출하기&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;evens = [ i for i in range(10) if i % 2 == 0 ]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 0 &lt;span&gt;부터 9까지 중 &lt;/span&gt;&lt;span&gt;짝수만 포함된 리스트&lt;/span&gt;&lt;span&gt;가 생성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;if-else를 포함한 표현식&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건에 따라 다른 값을 넣고 싶을 때는 표현식 부분에 if-else를 사용합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[참일때_값 if 조건 else 거짓일때_값 for 변수 in iterable]&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예제3 : 짝수는 &quot;even&quot;, 홀수는 &quot;odd&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;result = [ &quot;even&quot; if i % 2 == 0 else &quot;odd&quot; for i in range(5)]&lt;/blockquote&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;이때 if-selse는 표현식 위치에 위치하고 필터링용 if는 for 뒤쪽에 위치해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;중첩 반복문 (이줄 for문)&lt;/blockquote&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예제4 : 2차원 리스트 평탄화&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;matrix = [[1, 2], [3, 4], [5, 6]]&lt;br /&gt;flat = [num for row in matrix for num in row]&lt;/blockquote&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;해당 예제는 중첩된 리시트를 1차원 리스트로 변환할 때 자주 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;응용 예제&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문자열 처리&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;words = [&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]&lt;br /&gt;lengths = [len(word) for word in words]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 함수 호출과 함께 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;numbers = [1, 2, 3, 4]&lt;br /&gt;result = [abs(n) for n in numbers]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 조건 + 연산 조합&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;result = [ i * 2 for i in range(10) if i &amp;gt; 5 ]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;함께 알아두면 좋은 개념&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1. 제너레이터 컴프리헨션&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트 컴프리헨션과 매우 유사하지만, 메모리를 절약합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;gem = ( i * i for in range(5))&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트 컴프리헨션은 대괄호([])를 사용하고, 제너레이터 컴프리헨션은 소괄호(())를 사용합니다.&lt;/li&gt;
&lt;li&gt;제너레이터 컴프리헨션은 대용량 데이터 처리 시 유용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;map / filter 와의 비교&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;# map 사용&lt;br /&gt;list(map(lambda x: x * x, range(5)))&lt;br /&gt;&lt;br /&gt;# 리스트 컴프리헨션&lt;br /&gt;[x * x for x in range(5)]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위와 같이 파이썬에서는 리스트 컴프리헨션이 가독성 측면에서 더 권장되는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;정리&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;리스트 컴프리헨션 정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl9Osy/dJMcacu2DwX/FDCb9ZSbrlX32oAphUE64k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl9Osy/dJMcacu2DwX/FDCb9ZSbrlX32oAphUE64k/img.png&quot; data-alt=&quot;리스트 컴프리헨션 개념 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl9Osy/dJMcacu2DwX/FDCb9ZSbrlX32oAphUE64k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl9Osy%2FdJMcacu2DwX%2FFDCb9ZSbrlX32oAphUE64k%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;500&quot; data-filename=&quot;리스트 컴프리헨션 정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리스트 컴프리헨션 개념 정리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트 컴프리헨션은 파이썬의 반복 처리 방식을 매우 간결하게 만들어주는 문법입니다.&lt;/li&gt;
&lt;li&gt;여러 상황에서 활용하는 방법을 연습하다보면 다양한 상황에서 가독성 높은 코드를 만들 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-end=&quot;368&quot; data-start=&quot;321&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;368&quot; data-start=&quot;321&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅에서는 파이썬 리스트 컴프리헨션의 개념과 활용 방법을 정리해보았습니다.&lt;/p&gt;
&lt;p data-end=&quot;368&quot; data-start=&quot;321&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;498&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;리스트 컴프리헨션은 처음에는 낯설 수 있지만, 익숙해지면 코드를 훨씬 간결하고 명확하게 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;498&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp;적절한 상황에서 사용한다면 코드의 가독성을 높이고 전체적인 코드 품질을 개선하는 데 도움이 될 것입니다.&lt;/p&gt;
&lt;p data-end=&quot;498&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;498&quot; data-start=&quot;375&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.  &lt;/p&gt;</description>
      <category>정보처리기사</category>
      <category>리스트컴프리헨션</category>
      <category>정보처리기사</category>
      <category>파이썬</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/119</guid>
      <comments>https://jinco.tistory.com/119#entry119comment</comments>
      <pubDate>Fri, 9 Jan 2026 13:00:03 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] Python의 문자열 슬라이싱에 대해 알아보자</title>
      <link>https://jinco.tistory.com/118</link>
      <description>&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;문자열 슬라이싱&lt;/blockquote&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;파이썬에서 문자열 슬라이싱(Slicing)이란, 문자열에서 원하는 부분만 잘라서 가져오는 기능을 의미합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;예를 들어 &quot;python&quot;이라는 문자열에서 &quot;pyt&quot;만 가져오고 싶다면 슬라이싱을 사용해 간단히 추출할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;또한 슬라이싱을 이용하면 시작 인덱스(start), 끝 인덱스(end), 그리고 간격(step)을 지정하여 문자열을 자유롭게 잘라낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;문자열 슬라이싱 끝 인덱스(end)는 포함되지 않는다&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760789821269&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text = &quot;Python&quot;
print(text[0:3])  # Pyt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슬라이싱에서 끝 인덱스는 실제로 가져올 범위에 포함되지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;즉, s[start : end]는 start부터 end-1까지의 문자를 가져옵니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;위 예제 코드에서 0은 시작 인덱스이기 때문에 해당하는 'P'라는 문자를 가져오게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;반면에 끝 인덱스는 포함하지 않기 때문에 'h'라는 문자는 가져오지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;따라서 해당 print의 결과가 'Pyt'가 나오게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;인덱스가 음수인 경우&lt;/blockquote&gt;
&lt;pre id=&quot;code_1760789978870&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text = &quot;Python&quot;
print(text[-4:-1])  # tho&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파이썬의 문자열 슬라이싱에서는 음수 인덱스를 지원하여 문자열 끝에서부터 역방향으로 접근할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;위 예제 코드에서 -4 인덱스는 끝에서 4번째 문자인 't'부터 가져오게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;-1 인덱스에 의해서는 'o'라는 문자가 -1 인덱스 위치에 있게 되지만 end index는 포함하지 않기 때문에 'o'라는 문자는 가져오지 않습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;따라서 결과는 'tho'라는 문자를 가져오게 됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;음수 인덱스를 활용하면 문자열 뒤쪽에서부터 원하는 범위를 쉽게 추출할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;전체 슬라이싱 예제&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760790212959&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;text = &quot;Python&quot;
print(text[:3])   # 처음부터 3번째 문자 전까지 &amp;rarr; 'Pyt'
print(text[2:])   # 2번째 문자부터 끝까지 &amp;rarr; 'thon'
print(text[:])    # 전체 문자열 &amp;rarr; 'Python'
print(text[::2])  # 2칸 간격으로 추출 &amp;rarr; 'Pto'
print(text[::-1]) # 문자열 뒤집기 &amp;rarr; 'nohtyP'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이처럼 슬라이싱을 잘 활용하면 문자열 처리 작업이 훨씬 간단해집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;정리&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;문자열 슬라이싱 정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC1P3o/dJMb9PM8Z2d/3EnsrATESyGwkNw0I726wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC1P3o/dJMb9PM8Z2d/3EnsrATESyGwkNw0I726wK/img.png&quot; data-alt=&quot;문자열 슬라이싱 개념 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC1P3o/dJMb9PM8Z2d/3EnsrATESyGwkNw0I726wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC1P3o%2FdJMb9PM8Z2d%2F3EnsrATESyGwkNw0I726wK%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;500&quot; data-filename=&quot;문자열 슬라이싱 정리.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문자열 슬라이싱 개념 정리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열 슬라이싱은 문자열의 일부분을 쉽게 추출할 수 있는 기능입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;슬라이싱에서 끝 인덱스는 포함되지 않는다는 점과 음수 인덱스를 사용하면 뒤에서부터 접근 가능합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그렇게 어려운 개념은 아니지만 문자열 슬라이싱을 사용할 때 적혀있는 index가 어떤 것을 의미하는 것인지 모르게 되면 문제에 손도 대지 못하는 경우가 생길 수 있습니다.&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;문자열 슬라이싱에서 사용하는 index에 대해 짚고 넘어가는 것을 추천합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.  &lt;/p&gt;</description>
      <category>정보처리기사</category>
      <category>문자열슬라이싱</category>
      <category>정보처리기사</category>
      <category>파이썬</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/118</guid>
      <comments>https://jinco.tistory.com/118#entry118comment</comments>
      <pubDate>Sun, 19 Oct 2025 13:00:48 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] Python의 built-in Types에 대해 알아보자</title>
      <link>https://jinco.tistory.com/117</link>
      <description>&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;Python은 다양한 내장(Built-in) 타입을 제공하여, 별도의 라이브러리를 import하지 않아도 기본적인 데이터 처리를 손쉽게 수행할 수 있습니다.&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;이번 시간에는 정보처리기사 실기에 자주 등장하는 대표적인 Built-in Type들에 대해 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;숫자형(int, float)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760773784823&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# int (정수형)
a = 10
b = -5
print(type(a))  # &amp;lt;class 'int'&amp;gt;

# float (실수형)
c = 3.14
d = -0.5
print(type(c))  # &amp;lt;class 'float'&amp;gt;&lt;/code&gt;&lt;/pre&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;숫자형은 정수(int)와 실수(float)를 표현할 때 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;int는 정수 연산에 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;float은 소수점을 포함한 실수를 표현할 때 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;시퀀스형(list, tuple, set)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. list(리스트)&lt;/p&gt;
&lt;pre id=&quot;code_1760773972215&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fruits = [&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;]
fruits.append(&quot;orange&quot;)
print(fruits)  # ['apple', 'banana', 'cherry', 'orange']&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트는 여러 데이터를 순서대로 저장할 수 있으며, 수정 가능(mutable)합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. tuple(튜플)&lt;/p&gt;
&lt;pre id=&quot;code_1760774040479&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;numbers = (1, 2, 3)
# numbers[0] = 10  # ❌ 오류 발생
print(numbers)  # (1, 2, 3)&lt;/code&gt;&lt;/pre&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;튜플은 리스트와 비슷하지만 수정 불가능(immutable)합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. set(집합)&lt;/p&gt;
&lt;pre id=&quot;code_1760774109529&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;my_set = {1, 2, 2, 3}
print(my_set)  # {1, 2, 3}&lt;/code&gt;&lt;/pre&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;set은 중복을 허용하지 않으며, 순서가 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;***시퀀스형 Built-in Type 요약&lt;br /&gt;&lt;br /&gt;1. list : 순서 있음, 수정 가능&lt;br /&gt;2. tuple: 순서 있음, 수정 불가&lt;br /&gt;3. set: 순서 없음, 중복 불가&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;문자열형 (str)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760774495393&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;greeting = &quot;Hello, Python!&quot;
print(greeting.upper())  # HELLO, PYTHON!
print(greeting[0:5])     # Hello&lt;/code&gt;&lt;/pre&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;문자열형 Built-in Type인 str은 문자 데이터를 다룰 때 사용합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;문자열도 시퀀스형으로 인덱싱과 슬라이싱이 가능합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;' ' 또는 &quot; &quot;로 감싸서 표현합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;불리언형(bool)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760774646994&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;is_ready = True
is_empty = False

print(type(is_ready))  # &amp;lt;class 'bool'&amp;gt;
print(3 &amp;gt; 2)           # True
print(5 == 10)         # False&lt;/code&gt;&lt;/pre&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;bool은 참(True)과 거짓(False)을 나타내는 타입입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;조건문에서 자주 사용되며, 0, None, &quot;&quot;(빈 문자열)은 모두 False로 평가됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;딕셔너리형(dict)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760774729747&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;person = {&quot;name&quot;: &quot;Alice&quot;, &quot;age&quot;: 25}
print(person[&quot;name&quot;])   # Alice

person[&quot;age&quot;] = 26  # 값 수정 가능
print(person)  # {'name': 'Alice', 'age': 26}&lt;/code&gt;&lt;/pre&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;dict는 Key-Value 쌍르로 데이터를 저장합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;key는 고유해야 하며, 중복될 수 없습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;JSON 형태와 유사하여 실무에서도 자주 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;제어문 관련 키워드(continue, pass)&lt;/blockquote&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;해당 두 키워드는 타입은 아니지만, 파이썬 내장 문법&amp;nbsp;요소로 자주 등장하므로 함께 살펴보도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. continue&lt;/p&gt;
&lt;pre id=&quot;code_1760774899402&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(5):
    if i == 2:
        continue
    print(i)
# 출력: 0, 1, 3, 4&lt;/code&gt;&lt;/pre&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;continue를 사용하면 반복문에서 현재 루프를 건너뛰고 다음 반복으로 이동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. pass&lt;/p&gt;
&lt;pre id=&quot;code_1760774951707&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def my_function():
    pass  # 나중에 구현 예정

for i in range(3):
    if i == 1:
        pass  # 그냥 넘어감
    print(i)&lt;/code&gt;&lt;/pre&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;pass는 아무 동작도 하지 않는 문법입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;문법적으로 코드가 반드시 필요한 위치에서, 실행할 코드를 아직 작성하지 않았을 때 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;*** 제어문 관련 키워드 정리&lt;br /&gt;&lt;br /&gt;1. continue: 반복 중 특정 조건을 건너뛸 때&lt;br /&gt;2. pass: 빈 코드 블록을 유지할 때&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Built-in Type 한눈에 정리&lt;/blockquote&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-filename=&quot;built-in Type 정리.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkewCY/dJMb9M3XjvS/oFHMACEtkgVRKgJfoKbDnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkewCY/dJMb9M3XjvS/oFHMACEtkgVRKgJfoKbDnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkewCY/dJMb9M3XjvS/oFHMACEtkgVRKgJfoKbDnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkewCY%2FdJMb9M3XjvS%2FoFHMACEtkgVRKgJfoKbDnk%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;built-in Type 정리.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;타입&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;숫자형&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;int, float&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;정수와 실수를 표현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;시퀀스형&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;list, tuple, set&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;데이터의 집합을 표현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;문자열형&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;str&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;문자 데이터를 표현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;불리안형&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;bool&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;참/거짓을 표현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;매핑형&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;dict&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;key-value 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;제어문&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;continue, pass&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;이번 시간에는 파이썬의 대표적인 Built-in Type을 살펴보았습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다.  &lt;/p&gt;</description>
      <category>정보처리기사</category>
      <category>built-in type</category>
      <category>정보처리기사</category>
      <category>파이썬</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/117</guid>
      <comments>https://jinco.tistory.com/117#entry117comment</comments>
      <pubDate>Sat, 18 Oct 2025 18:00:14 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] python의 range의 범위에 대해 알아보자</title>
      <link>https://jinco.tistory.com/116</link>
      <description>&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 시간에는 저번 시간에 이어서 파이썬의 연속된 숫자들의 시퀀스를 생성할 때 사용하는 range()에 대해 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;range()&lt;/blockquote&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;파이썬에서 range()는 연속된 숫자들의 시퀀스를 생성할 때 사용됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;주로 반복문(for)과 함께 사용되며, 간결하면서도 강력한 기능을 제공합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;range는 실제 리스트를 바로 만드는 것이 아니라, 필요한 순간에 값을 하나씩 생성하는 이터러블 객체이기 때문에 메모리를 효율적으로 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;코드로 알아보는 range()&lt;/blockquote&gt;
&lt;pre id=&quot;code_1760625163063&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;range의 활용


# 1. range 객체를 변수로 저장하기
r = range(1, 21) # 1부터 20까지 (20은 포함되지 않음)
print(&quot;range 객체 r:&quot;, r)


# 2. range로 리스트 만들기
numbers = list(r)
print(&quot;list(r):&quot;, numbers)


# 3. append()로 새로운 리스트 구성하기
squares = []
for i in r:
squares.append(i ** 2)
print(&quot;1~20 제곱값:&quot;, squares)


# 4. range를 활용해 짝수 리스트 만들기
odds = []
for i in range(1, 21):
if i % 2 == 1:
odds.append(i)
print(&quot;1~20 홀수:&quot;, odds)


# 5. len()으로 길이 확인하기
print(&quot;len(numbers):&quot;, len(numbers)) # 20개
print(&quot;len(odds):&quot;, len(odds)) # 10개


# 6. 다른 예시 &amp;mdash; step을 사용한 range
by_three = list(range(0, 21, 3))
print(&quot;3씩 증가하는 숫자:&quot;, by_three)&lt;/code&gt;&lt;/pre&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;range() 같은 이터러블 객체뿐만 아니라 언어의 개념을 이해할 때는 코드를 통해 살펴보는 것이 가장 효과적이라고 생각합니다. 해당 코드를 분석하면서 range()가 어떻게 동작하는지 살펴보고 range()의 특징을 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;range를 변수로 사용하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760625381064&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;r = range(1, 21)&lt;/code&gt;&lt;/pre&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;range()는 range(start, stop) 형식으로 사용하며, 위 예제에서는 1부터 시작해 21 직전까지의 숫자를 생성합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;range는 이터러블 객체로서 반복문에서 직접 사용할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;리스트로 변환하지 않아도, for문에서 순회가 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 :&lt;/p&gt;
&lt;pre id=&quot;code_1760625498056&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in r:
print(i, end=' ')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 :&lt;/p&gt;
&lt;pre id=&quot;code_1760625516088&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1 2 3 ... 20&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;마지막 숫자는 포함하지 않는 range&lt;/blockquote&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;range(1, 21)은 1부터 20까지만 포함합니다. 즉, stop 인자는 항상 제외됩니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;이 특성을 활용하면 리스트의 인덱스(0부터 시작) 제어가 훨씬 직관적이게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre id=&quot;code_1760625625112&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 0~4까지만 출력
for i in range(5):
print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre id=&quot;code_1760625646128&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0
1
2
3
4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;append()와 함께 사용하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760625679177&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;squares = []
for i in r:
squares.append(i ** 2)&lt;/code&gt;&lt;/pre&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;append()는 리스트의 마지막에 새로운 원소를 추가하는 함수입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;range로 반복하면서 각 원소의 연산 결과를 누적할 때 유용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응용 예시&lt;/p&gt;
&lt;pre id=&quot;code_1760625731953&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cubes = []
for n in range(1, 6):
cubes.append(n ** 3)
print(cubes) # [1, 8, 27, 64, 125]&lt;/code&gt;&lt;/pre&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;blockquote data-ke-style=&quot;style2&quot;&gt;len()으로 리스트 크기 확인하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760625767161&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;len(numbers):&quot;, len(numbers))&lt;/code&gt;&lt;/pre&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;len() 함수는 리스트, 문자열 등 컨테이너의 길이(원소 개수)를 반환합니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;range(1, 21)은 총 20개의 값을 만들기 때문에 len(number)는 20이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시:&lt;/p&gt;
&lt;pre id=&quot;code_1760625838433&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;r = range(5, 10)
print(len(list(r))) # 5&lt;/code&gt;&lt;/pre&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-filename=&quot;range의 범위 3줄 요약'.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b75T8r/dJMb9OUZuzX/0jDH0qkCAO9IWeYyCEURSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b75T8r/dJMb9OUZuzX/0jDH0qkCAO9IWeYyCEURSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b75T8r/dJMb9OUZuzX/0jDH0qkCAO9IWeYyCEURSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb75T8r%2FdJMb9OUZuzX%2F0jDH0qkCAO9IWeYyCEURSk%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;900&quot; height=&quot;400&quot; data-filename=&quot;range의 범위 3줄 요약'.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;range는 메모리를 절양하는 이터러블 객체입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;stop 인자는 포함되지 않으며, range(a, b)는 a부터 b-1까지입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;append()로 데이터를 리스트에 저장하고, len()으로 개수를 쉽게 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;지금까지 파이썬의 range에 대해서 살펴보았습니다.&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;range는 단순히 반복문에서 사용하는 도구를 넘어, 규칙적인 숫자 시퀀스를 효율적으로 다룰 수 있는 핵심 함수입니다.&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;특히 stop 인자가 포함되지 않는다는 점만 확실히 이해하고 있다면, 정처기 시험에서 쉽게 풀 수 있는 문제를 만나는 행운이 뒤따를 거라고 생각합니다.&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;오늘 살펴본 range의 마지막 숫자는 포함되지 않는다는 사실 정도는 꼭 챙겨가시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다. &lt;/p&gt;</description>
      <category>정보처리기사</category>
      <category>RANGE</category>
      <category>파이썬</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/116</guid>
      <comments>https://jinco.tistory.com/116#entry116comment</comments>
      <pubDate>Fri, 17 Oct 2025 13:00:41 +0900</pubDate>
    </item>
    <item>
      <title>[정보처리기사] Python의 set과 list에 대해 알아보자</title>
      <link>https://jinco.tistory.com/115</link>
      <description>&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;&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;&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;&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;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;최근 정보처리기사 시험이 이론적인 부분보다 C언어, JAVA, 파이썬 코드 문제의 비중이 높아지고 난이도가 올라감에 따라 대표적인 언어들의 이해도의 중요성이 점점 높아지고 있습니다.&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;이번 시간에는 파이썬의 컬렉션(collection) 자료형인 set과 list에 대해 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Set&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760449786485&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 집합 예제
fruits_set = {&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;, &quot;apple&quot;}
print(fruits_set)               # {'apple', 'banana', 'cherry'} &amp;rarr; 중복 자동 제거
fruits_set.add(&quot;orange&quot;)        # 요소 추가
fruits_set.discard(&quot;banana&quot;)    # 요소 삭제
print(fruits_set)               # {'apple', 'cherry', 'orange'}

# 집합 연산
a = {1, 2, 3}
b = {3, 4, 5}
print(a &amp;amp; b)  # 교집합 &amp;rarr; {3}
print(a | b)  # 합집합 &amp;rarr; {1, 2, 3, 4, 5}
print(a - b)  # 차집합 &amp;rarr; {1, 2}&lt;/code&gt;&lt;/pre&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;&amp;nbsp;set은 순서가 없고, 중복을 허용하지 않는 자료형입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;수학의 집합 개념과 유사하게, 교집합/합집합/차집합 등의 연산이 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;순서(Order)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;요소의 순서가 없음(인덱스 접근 불가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;중복(Duplicates)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;중복된 값 자동 제거&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;변경 가능(Mutable)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;요소 추가, 삭제 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;집합 연산 가능&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;amp;(교집합), `(합집합)&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;blockquote data-ke-style=&quot;style2&quot;&gt;List&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1760450249742&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리스트 예제
fruits = [&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;, &quot;apple&quot;]
print(fruits)               # ['apple', 'banana', 'cherry', 'apple']
print(fruits[1])            # banana
fruits.append(&quot;orange&quot;)     # 요소 추가
fruits.remove(&quot;banana&quot;)     # 요소 삭제
print(fruits)               # ['apple', 'cherry', 'apple', 'orange']&lt;/code&gt;&lt;/pre&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;List는 순서가 있는 데이터의 집합입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;중복된 값을 허용하고, 인덱스로 접근할 수 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 97px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;순서(Order)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;요소들이 저장된 순서가 유지됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;중복(Duplicates)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;중복된 값 허용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;변경 가능(Mutable)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;요소 추가, 수정, 삭제 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;인덱스 사용 가능&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;ex) my_list[0]&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;set과list비교.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnFRMG/btsQ8Bu7Kyg/H4HjVDd7RHKzwSnYXb6ZU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnFRMG/btsQ8Bu7Kyg/H4HjVDd7RHKzwSnYXb6ZU1/img.png&quot; data-alt=&quot;set과 list 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnFRMG/btsQ8Bu7Kyg/H4HjVDd7RHKzwSnYXb6ZU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnFRMG%2FbtsQ8Bu7Kyg%2FH4HjVDd7RHKzwSnYXb6ZU1%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;set과list비교.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;set과 list 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp; 정리하자면 list는 순서가 있고 중복을 허용하는 컬렉션 자료형입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;반면에 set은 순서가 없고 중복을 허용하지 않는 컬렉션 자료형입니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;즉, 둘 다 데이터를 여러 개 담는 자료형이지만, 데이터의 순서 보존 여부와 중복 허용 여부가 다릅니다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;이번 시간에는 Phython의 컬렉션 자료형인 set과 list의 특징과 차이를 함께 알아보았습니다. 시험 문제에서 중괄호({})로 데이터들이 묶여있으면 set, 대괄호([])로 데이터들이 묶여있다면 list라는 점을 기억해두면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅은 여기까지입니다. 끝까지 봐주셔서 감사합니다. &lt;/p&gt;</description>
      <category>정보처리기사</category>
      <category>list</category>
      <category>set</category>
      <category>정보처리기사</category>
      <category>파이썬</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/115</guid>
      <comments>https://jinco.tistory.com/115#entry115comment</comments>
      <pubDate>Wed, 15 Oct 2025 13:00:06 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트로 페이지네이션을 만들어보자</title>
      <link>https://jinco.tistory.com/114</link>
      <description>&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;nbsp;페이지네이션&lt;/blockquote&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-filename=&quot;api문서.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nUDDf/btsMzOyIV4a/29rjMiVOGWHLb4Ki0Abnlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nUDDf/btsMzOyIV4a/29rjMiVOGWHLb4Ki0Abnlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nUDDf/btsMzOyIV4a/29rjMiVOGWHLb4Ki0Abnlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnUDDf%2FbtsMzOyIV4a%2F29rjMiVOGWHLb4Ki0Abnlk%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;706&quot; height=&quot;203&quot; data-filename=&quot;api문서.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;203&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;&amp;nbsp;페이지네이션을 적용하기 전에 우선 API 문서부터 확인해 보도록 하겠습니다.&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;해당 문서에서 제공하는 정보를 살펴보면 pageSize는 20이 default 값으로 페이지 당 20개의 데이터가 오는 것을 확인할 수 있습니다.&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;또한 현재 보고 있는 페이지를 page로 알 수 있습니다.&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;위 문서에는 없지만 totalResults도 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;HTML&lt;/blockquote&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-filename=&quot;html.png&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eF9ZyW/btsMzrKtEb2/PCZacDGaylD6hYUI9at430/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eF9ZyW/btsMzrKtEb2/PCZacDGaylD6hYUI9at430/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eF9ZyW/btsMzrKtEb2/PCZacDGaylD6hYUI9at430/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeF9ZyW%2FbtsMzrKtEb2%2FPCZacDGaylD6hYUI9at430%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;252&quot; data-filename=&quot;html.png&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;252&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;&amp;nbsp;먼저 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;&amp;nbsp;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;&amp;nbsp;pagination이 들어갈 section이 추가되었습니다.&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;&amp;lt;nav&amp;gt; 태그로 되어 있는 것은 pagination의 특성상 페이지를 옮겨주는 역할을 하기 때문에 이렇게 구성했다고 보입니다.&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-filename=&quot;bootstrap.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDY5nX/btsMAMmMBVL/UTRKkkc4CysBEyuwKzRko0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDY5nX/btsMAMmMBVL/UTRKkkc4CysBEyuwKzRko0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDY5nX/btsMAMmMBVL/UTRKkkc4CysBEyuwKzRko0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDY5nX%2FbtsMAMmMBVL%2FUTRKkkc4CysBEyuwKzRko0%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;886&quot; data-filename=&quot;bootstrap.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;886&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;&amp;nbsp;해당 HTML 부분은 bootstrap에서 가져왔습니다.&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;Component 파트에서 pagination파트를 보게 되면 여러 pagination을 가져와서 쓸 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;CSS&lt;/blockquote&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-filename=&quot;css.png&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRAWO/btsMArpEEDc/8LiHziwz4naJyElVzRy961/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRAWO/btsMArpEEDc/8LiHziwz4naJyElVzRy961/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRAWO/btsMArpEEDc/8LiHziwz4naJyElVzRy961/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRAWO%2FbtsMArpEEDc%2F8LiHziwz4naJyElVzRy961%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;865&quot; height=&quot;917&quot; data-filename=&quot;css.png&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;917&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;&amp;nbsp;다음은 CSS 파트입니다.&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;pagination과 관련된 여러 스타일들을 보실 수 있습니다.&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;위 CSS 스타일들은 구글링을 통해서 가져온 스타일들을 적용해 주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;JS&lt;/blockquote&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-filename=&quot;fetchNews.png&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5UjjN/btsMyR3Z3HV/WlqLraxWbl6WrGzkkju5Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5UjjN/btsMyR3Z3HV/WlqLraxWbl6WrGzkkju5Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5UjjN/btsMyR3Z3HV/WlqLraxWbl6WrGzkkju5Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5UjjN%2FbtsMyR3Z3HV%2FWlqLraxWbl6WrGzkkju5Rk%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;1066&quot; height=&quot;696&quot; data-filename=&quot;fetchNews.png&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;696&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;&amp;nbsp;다음은 JS 파일을 살펴보도록 하겠습니다.&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;fetchNews부분에서는 if문을 추가해서 page에 pagination이 영향을 줄 수 있도록 코드를 작성하였습니다.&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;또한 render() 함수를 호출한 후에 paginationRender() 함수를 호출하여 다 그려놓은 화면 아래에 pagination 파트에 HTML을 그려주도록 하였습니다.&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-filename=&quot;뉴스 가져오기 함수들.png&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IC9mb/btsMAI5MN8F/kUVhChT0QA5DGvSjJkDEV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IC9mb/btsMAI5MN8F/kUVhChT0QA5DGvSjJkDEV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IC9mb/btsMAI5MN8F/kUVhChT0QA5DGvSjJkDEV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIC9mb%2FbtsMAI5MN8F%2FkUVhChT0QA5DGvSjJkDEV1%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;665&quot; height=&quot;490&quot; data-filename=&quot;뉴스 가져오기 함수들.png&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;490&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;&amp;nbsp;뉴스 가져오기 함수들에 keywordCategory = &quot;&quot;;와 currentCategory=&quot;&quot;;를 넣어주었습니다.&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;해당 페이지들을 초기화해 주고 각 페이지를 누른 상태에서 pagination을 이용해 페이지를 넘겼을 때 해당 카테고리나 검색 결과의 페이지가 넘어갈 수 있도록 해주었습니다.&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-filename=&quot;paginationRender.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWGx0b/btsMyvUpF6w/GroRV4dh0tfymrcymBeU0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWGx0b/btsMyvUpF6w/GroRV4dh0tfymrcymBeU0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWGx0b/btsMyvUpF6w/GroRV4dh0tfymrcymBeU0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWGx0b%2FbtsMyvUpF6w%2FGroRV4dh0tfymrcymBeU0K%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;1146&quot; height=&quot;897&quot; data-filename=&quot;paginationRender.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;897&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;&amp;nbsp;다음은 위에서 호출한 paginationRender() 함수를 살펴보도록 하겠습니다.&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;totalPages는 totalResult(데이터의 개수)를 pageSize(한 페이지에 나오는 데이터 개수)로 나눠서 변수에 넣어주었습니다.&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;PAGEGROUP은 page 수에서 GROUPSIZE(페이지 수가 나타나는 개수)를 나눠서 변수에 넣어주었습니다.&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;lastpage는 if문을 사용하여 마지막 페이지 그룹이 그룹사이즈보다 작을 때를 처리해 주었습니다.&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;paginationHTML에는 첫 페이지, 이전 페이지를 먼저 그려주고 각각의 페이지를 추가한 후에 다음 페이지, 마지막 페이지 버튼을 추가해 주었습니다.&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-filename=&quot;moveToPage.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/psAXT/btsMAWCM4WO/Me6Du1bVDLwt7JzqZIQBX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/psAXT/btsMAWCM4WO/Me6Du1bVDLwt7JzqZIQBX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/psAXT/btsMAWCM4WO/Me6Du1bVDLwt7JzqZIQBX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpsAXT%2FbtsMAWCM4WO%2FMe6Du1bVDLwt7JzqZIQBX0%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;497&quot; height=&quot;338&quot; data-filename=&quot;moveToPage.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;338&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;&amp;nbsp;각각의 pagination 버튼을 눌렀을 때 페이지가 이동하는 함수를 만들었습니다.&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;fetchNews에 항상 params에 객체를 넣어서 보내주었기 때문에 각각에 page와 pageSize를 넣어서 보내주었습니다.&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;if문을 사용하여 현재 페이지가 카테고리를 선택했는지 키워드를 선택한 페이지인지 여부를 params에 같이 담아서 보내주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/453390695&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/c1gAoS/hyYjsxXiUg/vMio6t9aCvdMGryd6V5LCK/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040,https://scrap.kakaocdn.net/dn/ddceL6/hyYmShqVDv/o83Ykkla8xF171R02flhNK/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040&quot; data-video-width=&quot;860&quot; data-video-height=&quot;466&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;466&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/453390695?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;466&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이번 포스팅에서 구현한 pagination이 적용된 웹사이트 시연 영상입니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jongsnews.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jongsnews.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740927474881&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;jongsNews&quot; data-og-description=&quot;&quot; data-og-host=&quot;jongsnews.netlify.app&quot; data-og-source-url=&quot;https://jongsnews.netlify.app/&quot; data-og-url=&quot;https://jongsnews.netlify.app/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jongsnews.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jongsnews.netlify.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;jongsNews&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jongsnews.netlify.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;이번 시간에는&amp;nbsp; 프론트엔드의 꽃이자 계속도 많고 복잡한 pagination에 대해 알아보았습니다.&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;위 pagination 함수에서 여러 변수들을 계속하는 일이 복잡하지만 어떤 변수가 필요하고 이런 변수들에 어떤 관계가 있는지 확인하면서 하시다 보면 충분히 구현할 수 있는 기능이라고 생각합니다.&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;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;끝까지 봐주셔서 감사합니다. &lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>pagination</category>
      <category>뉴스웹페이지</category>
      <category>자바스크립트</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/114</guid>
      <comments>https://jinco.tistory.com/114#entry114comment</comments>
      <pubDate>Sun, 2 Mar 2025 23:58:09 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 뉴스 웹페이지 예외 처리를 해보자</title>
      <link>https://jinco.tistory.com/113</link>
      <description>&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;&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;&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;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;try-catch문&lt;/blockquote&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-filename=&quot;try-catch1.png&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bddGQD/btsMz9oVUe9/IcTX6nNt7FeLzI7LUlAz30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bddGQD/btsMz9oVUe9/IcTX6nNt7FeLzI7LUlAz30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bddGQD/btsMz9oVUe9/IcTX6nNt7FeLzI7LUlAz30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbddGQD%2FbtsMz9oVUe9%2FIcTX6nNt7FeLzI7LUlAz30%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;457&quot; height=&quot;202&quot; data-filename=&quot;try-catch1.png&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;202&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;&amp;nbsp;에러 핸들링을 하는 방법으로 try-catch문이 있습니다.&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;try-catch문에 대해 알아보기 위해 에러가 발생하는 상황부터 알아보도록 하겠습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;try-catch1_console출력.png&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmx5GL/btsMAi66qc7/YE6jfOOQGPNETK2x1o4Vu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmx5GL/btsMAi66qc7/YE6jfOOQGPNETK2x1o4Vu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmx5GL/btsMAi66qc7/YE6jfOOQGPNETK2x1o4Vu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmx5GL%2FbtsMAi66qc7%2FYE6jfOOQGPNETK2x1o4Vu1%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;305&quot; height=&quot;30&quot; data-filename=&quot;try-catch1_console출력.png&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;30&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;&amp;nbsp;위와 같은 그냥 문자열만 써놓으면 당연히 에러가 발생하게 됩니다.&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-filename=&quot;try-catch2.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvBhea/btsMAG7L8uy/JcZVjSutP1lX7Ch9jNo8w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvBhea/btsMAG7L8uy/JcZVjSutP1lX7Ch9jNo8w0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvBhea/btsMAG7L8uy/JcZVjSutP1lX7Ch9jNo8w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvBhea%2FbtsMAG7L8uy%2FJcZVjSutP1lX7Ch9jNo8w0%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;507&quot; height=&quot;215&quot; data-filename=&quot;try-catch2.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;215&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;&amp;nbsp;이때 해당 문구를 try문에 넣고 catch문에 try에서 오류가 생겼을 때의 대처 방안을 써두면 에러를 핸들링할 수 있습니다.&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;위 코드에서는 try문에서 에러가 발생한다면 console 출력이 error 메세지와 함께 출력될 것으로 예상됩니다.&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-filename=&quot;try-catch2_console출력.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;35&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZwTJ6/btsMAJXzSSp/GrZsgyCkPqcmO0fhfPbKjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZwTJ6/btsMAJXzSSp/GrZsgyCkPqcmO0fhfPbKjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZwTJ6/btsMAJXzSSp/GrZsgyCkPqcmO0fhfPbKjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZwTJ6%2FbtsMAJXzSSp%2FGrZsgyCkPqcmO0fhfPbKjK%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;300&quot; height=&quot;35&quot; data-filename=&quot;try-catch2_console출력.png&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;35&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;&amp;nbsp;예상한 대로 &quot;내가 잡은 에러는&quot;이라는 문자열과 함께 error 메세지가 출력된 것을 확인할 수 있습니다.&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-filename=&quot;try-catch3.png&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EYzWR/btsMzRhIRWR/RMKBVoGiTt9AYP4gPw662K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EYzWR/btsMzRhIRWR/RMKBVoGiTt9AYP4gPw662K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EYzWR/btsMzRhIRWR/RMKBVoGiTt9AYP4gPw662K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEYzWR%2FbtsMzRhIRWR%2FRMKBVoGiTt9AYP4gPw662K%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;887&quot; height=&quot;246&quot; data-filename=&quot;try-catch3.png&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;246&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;&amp;nbsp;try-catch문에서 throw를 사용하면 강제로 에러를 발생시킬 수 있습니다.&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;if문을 사용해서 weight라는 변수가 30 이하가 되면 강제로 error를 발생시킬 수 있습니다.&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-filename=&quot;try-catch3_console출력.png&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBPLjL/btsMx9Kw9rL/1JHHBIG26xNKYhP9p8EPh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBPLjL/btsMx9Kw9rL/1JHHBIG26xNKYhP9p8EPh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBPLjL/btsMx9Kw9rL/1JHHBIG26xNKYhP9p8EPh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBPLjL%2FbtsMx9Kw9rL%2F1JHHBIG26xNKYhP9p8EPh0%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;295&quot; height=&quot;33&quot; data-filename=&quot;try-catch3_console출력.png&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위처럼 weight가 29가 되어 if문 안에 들어가 throw를 만나게 되자 강제로 error가 발생되어 catch문이 실행된 것을 확인할 수 있습니다.&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-filename=&quot;try-catch4.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;305&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1NXnu/btsMAGGCMfR/K9GeWerFgqhdqGjfVVsoPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1NXnu/btsMAGGCMfR/K9GeWerFgqhdqGjfVVsoPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1NXnu/btsMAGGCMfR/K9GeWerFgqhdqGjfVVsoPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1NXnu%2FbtsMAGGCMfR%2FK9GeWerFgqhdqGjfVVsoPK%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;885&quot; height=&quot;305&quot; data-filename=&quot;try-catch4.png&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;305&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;&amp;nbsp;또한 try문은 에러가 발생하게 되면 끝나게 됩니다.&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;위와 같이 throw 위아래로 console을 출력하도록 코드를 작성하였습니다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;try-catch4_console출력.png&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U2LxT/btsMyR3Dtvv/Ssm7ZJMntzkRoKzzfha8uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U2LxT/btsMyR3Dtvv/Ssm7ZJMntzkRoKzzfha8uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U2LxT/btsMyR3Dtvv/Ssm7ZJMntzkRoKzzfha8uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU2LxT%2FbtsMyR3Dtvv%2FSsm7ZJMntzkRoKzzfha8uk%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;307&quot; height=&quot;100&quot; data-filename=&quot;try-catch4_console출력.png&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;100&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;&amp;nbsp;이때 if문 위에 있는 하하하라는 문자열은 출력되었지만 if문 밑에 있는 console.log는 실행되지 않은 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;news 웹 페이지에서 에러 핸들링 하기&lt;/blockquote&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-filename=&quot;HTTP error code.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGHK3E/btsMzsI9kUj/ZJZkYZoV3w4IoBaq3P1PrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGHK3E/btsMzsI9kUj/ZJZkYZoV3w4IoBaq3P1PrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGHK3E/btsMzsI9kUj/ZJZkYZoV3w4IoBaq3P1PrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGHK3E%2FbtsMzsI9kUj%2FZJZkYZoV3w4IoBaq3P1PrK%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;822&quot; height=&quot;295&quot; data-filename=&quot;HTTP error code.png&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;295&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;&amp;nbsp;먼저 뉴스 웹페이지의 에러 핸들링을 위해 API 문서로 가서 error 메뉴에 있는 부분을 살펴보면 에러를 핸들링하기 더 좋습니다.&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;코드가 200일 때는 성공적으로 요청이 된 것이며 이외의 코드들은 에러가 난 것을 확인할 수 있습니다.&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-filename=&quot;fetchNews.png&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p9nHv/btsMzN7xn4R/jsKMKc45KSDUjUIkqG3h9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p9nHv/btsMzN7xn4R/jsKMKc45KSDUjUIkqG3h9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p9nHv/btsMzN7xn4R/jsKMKc45KSDUjUIkqG3h9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9nHv%2FbtsMzN7xn4R%2FjsKMKc45KSDUjUIkqG3h9k%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;1350&quot; height=&quot;650&quot; data-filename=&quot;fetchNews.png&quot; data-origin-width=&quot;1350&quot; data-origin-height=&quot;650&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;&amp;nbsp;API를 가져올 때의 에러 핸들링을 위해 fetchNews안에 있는 코드에 try-catch문을 넣어주었습니다.&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;if문을 사용하여 status가 200일 때 if문을 사용하여 검색 결과가 없을 때는 throw를 사용하여 검색 결과가 없다는 메세지를 발생시키고 그렇지 않으면 원래 코드가 실행되도록 하였습니다.&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;status가 200이 아니면 throw를 이용해 오류 메세지를 catch문으로 보내주었습니다.&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-filename=&quot;errorRender.png&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yPWnh/btsMA5MU6v3/RZmx26h3wjXH94YLK1czx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yPWnh/btsMA5MU6v3/RZmx26h3wjXH94YLK1czx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yPWnh/btsMA5MU6v3/RZmx26h3wjXH94YLK1czx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyPWnh%2FbtsMA5MU6v3%2FRZmx26h3wjXH94YLK1czx1%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;697&quot; height=&quot;171&quot; data-filename=&quot;errorRender.png&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;171&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;&amp;nbsp;catch문이 실행되었을 때 render() 함수 대신 실행되는 errorRender() 함수입니다.&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;errorHTML이라는 변수에 &amp;lt;div&amp;gt; 태그를 남아서 news-board에 출력해 주었습니다.&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-filename=&quot;bootstrap.png&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0Rkut/btsMylREJ5z/U2t8VHZHn5BLMXgJZXW0C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0Rkut/btsMylREJ5z/U2t8VHZHn5BLMXgJZXW0C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0Rkut/btsMylREJ5z/U2t8VHZHn5BLMXgJZXW0C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0Rkut%2FbtsMylREJ5z%2FU2t8VHZHn5BLMXgJZXW0C1%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;1128&quot; height=&quot;861&quot; data-filename=&quot;bootstrap.png&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;861&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;&amp;nbsp;errorHTML에 사용한 화면은 bootstrap에서 Components 안에 있는 Alerts에 있는 danger 부분에 있는 화면을 사용하였습니다.&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;이렇게 status가 200이 아닐 때와 검색 결과가 없는 경우의 에러 핸들링을 완료하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/453355982&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bfhsbf/hyYjvVy5nC/Djw9ktahMbvXFmO1Kxw95k/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040,https://scrap.kakaocdn.net/dn/8pkl4/hyYjJTJH8i/2Td9eJJ3n2tVF7WCPSsOc0/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040&quot; data-video-width=&quot;860&quot; data-video-height=&quot;466&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;466&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'진득하게 코딩하기'에서 업로드한 동영상&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/453355982?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;466&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위와 같이 검색 결과가 아무것도 없는 경우에는 검색 결과가 없다는 alert 화면이 출력되게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;이번 시간에는 try-catch문을 이용하여 에러 핸들링하는 방법에 대해 살펴보았습니다.&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;&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;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;끝까지 봐주셔서 감사합니다. &lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>try-catch</category>
      <category>에러핸들링</category>
      <category>자바스크립트</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/113</guid>
      <comments>https://jinco.tistory.com/113#entry113comment</comments>
      <pubDate>Sat, 1 Mar 2025 13:00:51 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 뉴스 웹페이지에 검색 기능을 만들어보자</title>
      <link>https://jinco.tistory.com/112</link>
      <description>&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;저번 시간에는 API로 가져온 데이터를 화면에 출력하는 과정을 살펴보았습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;API 문서 확인하기&lt;/blockquote&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-filename=&quot;API 문서 확인하기.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vf5jV/btsMxDRKK9x/qbUAXFJe0Vxl1GyKkgfTUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vf5jV/btsMxDRKK9x/qbUAXFJe0Vxl1GyKkgfTUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vf5jV/btsMxDRKK9x/qbUAXFJe0Vxl1GyKkgfTUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvf5jV%2FbtsMxDRKK9x%2FqbUAXFJe0Vxl1GyKkgfTUK%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;1920&quot; height=&quot;956&quot; data-filename=&quot;API 문서 확인하기.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;956&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;&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;&amp;nbsp;이때 기능을 만들기 전에 해당 데이터를 카테고리 별로 API에서 제공해 주는지 먼저 확인해봐야 합니다.&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;API 문서를 확인해보면 category별로 데이터를 response할 수 있는 것을 확인할 수 있습니다.&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;하지만 해당 기능은 7가지 카테고리만을 제공하기 때문에 메뉴에 있는 버튼을 바꿀 필요가 있습니다.&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-filename=&quot;API가 제공하는 카테고리만 남기기.png&quot; data-origin-width=&quot;1287&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TgLsL/btsMyD4yRrw/iTnYgYnCgbpOe9mgIk0z80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TgLsL/btsMyD4yRrw/iTnYgYnCgbpOe9mgIk0z80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TgLsL/btsMyD4yRrw/iTnYgYnCgbpOe9mgIk0z80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTgLsL%2FbtsMyD4yRrw%2FiTnYgYnCgbpOe9mgIk0z80%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;1287&quot; height=&quot;716&quot; data-filename=&quot;API가 제공하는 카테고리만 남기기.png&quot; data-origin-width=&quot;1287&quot; data-origin-height=&quot;716&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;&amp;nbsp;API 문서에서 제공한다고 설명해주는 버튼만 남기고 다른 버튼들은 삭제해 주었습니다.&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;이렇게 API를 이용하기 위해서는 API가 제공하는 서비스를 숙지하고 그 안에서 이용해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;카테고리별 검색 기능&lt;/blockquote&gt;
&lt;p data-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-filename=&quot;js1.png&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKMFMM/btsMwBtvJ1w/yKuGOb015wUBcm5V9E4hjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKMFMM/btsMwBtvJ1w/yKuGOb015wUBcm5V9E4hjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKMFMM/btsMwBtvJ1w/yKuGOb015wUBcm5V9E4hjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKMFMM%2FbtsMwBtvJ1w%2FyKuGOb015wUBcm5V9E4hjK%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;1020&quot; height=&quot;80&quot; data-filename=&quot;js1.png&quot; data-origin-width=&quot;1020&quot; data-origin-height=&quot;80&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;&amp;nbsp;API에서 제공하는 대로 메뉴를 바꿨으면 해당 메뉴들을 js 파일에서 가져와서 함수를 만들어줘야 합니다.&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;span style=&quot;color: #795e26; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;querySelectorAll&lt;span style=&quot;color: #000000;&quot;&gt;을 사용해서 모든 버튼을 가져옵니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #795e26; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;또한 해당 버튼들은 menus라는 클래스 안에 있는 버튼들을 가져와야 하기 때문에 &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #a31515; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;&quot;.menus button&quot;&lt;span style=&quot;color: #000000;&quot;&gt;를 가져와주시면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #a31515; background-color: #ffffff; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;이렇게 &lt;span style=&quot;background-color: #ffffff; color: #795e26; text-align: start;&quot;&gt;querySelectorAll&lt;span style=&quot;color: #000000;&quot;&gt;을 사용하여 여러 요소를 가져오면 for문을 사용해서 각각의 버튼의 click 이벤트를 주면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #3b3b3b;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #795e26;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;해당 버튼들을 클릭하면&lt;/span&gt; getNewsByCategory&lt;/span&gt;&lt;span style=&quot;color: #3b3b3b;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #001080;&quot;&gt;event&lt;/span&gt;&lt;span style=&quot;color: #3b3b3b;&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;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;getNewsByCategory.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkK9Wg/btsMxFPvaEx/hNbvwKqrkEOQJsuF6R5eL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkK9Wg/btsMxFPvaEx/hNbvwKqrkEOQJsuF6R5eL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkK9Wg/btsMxFPvaEx/hNbvwKqrkEOQJsuF6R5eL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkK9Wg%2FbtsMxFPvaEx%2FhNbvwKqrkEOQJsuF6R5eL1%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;1146&quot; height=&quot;537&quot; data-filename=&quot;getNewsByCategory.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;537&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;&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;&amp;nbsp;getLatestNews() 함수와 getNewsByCategory() 함수를 주석처리한 이유는 두 함수가와 뒤에 나올 함수가 중복된 코드가 많아서 중복 코드를 제거한 코드로 바꾸기 때문입니다.&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;getNewsByCategory() 함수는 fetch와 joson() 함수를 사용해서 await를 사용하기 때문에 async 함수르 만들어주었습니다.&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;event의 버튼 이름을 가져와야 하는데 메뉴에 있는 글자들은 가장 앞에 대문자로 시작하고 쿼리문은 모든 문자들이 소문자이기 때문에 toLowerCase() 함수를 이용해서 category 변수를 소문자로 바꿔주었습니다.&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;다른 부분은 getLatestNews() 함수와 똑같은 방법으로 API를 호출한 데이터를 화면에 출력해 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/453312029&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/vrKcO/hyYmUMBXIw/jkSmRDjHXQMudQKYIK30p1/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=483_300_552_375,https://scrap.kakaocdn.net/dn/cZpjVW/hyYmYVKIaF/SNLxqgnqdBu0pVQJon05k1/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=483_300_552_375&quot; data-video-width=&quot;860&quot; data-video-height=&quot;466&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;466&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'진득하게 코딩하기'에서 업로드한 동영상&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/453312029?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;466&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위와 같은 함수를 만들게 되면 카테고리 버튼을 눌러서 카테고리 별로 기사를 보실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;키워드 검색 기능&lt;/blockquote&gt;
&lt;p data-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-filename=&quot;API 문서 확인하기_keyword.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;950&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkNYXg/btsMzfCbkuC/JGglXXUQajQdniL9MxSBcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkNYXg/btsMzfCbkuC/JGglXXUQajQdniL9MxSBcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkNYXg/btsMzfCbkuC/JGglXXUQajQdniL9MxSBcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkNYXg%2FbtsMzfCbkuC%2FJGglXXUQajQdniL9MxSBcK%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;1920&quot; height=&quot;950&quot; data-filename=&quot;API 문서 확인하기_keyword.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;950&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;&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;&amp;nbsp;코드로 기능을 만들기 전에 API 문서에 키워드로 데이터를 가져올 수 있는지부터 확인해 줍니다.&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;API 문서에 q라는 parameter를 사용해서 키워드별로 데이터를 가져올 수 있는 것을 확인할 수 있습니다.&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-filename=&quot;키워드 검색 기능 onclick 이벤트 주기.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m2Cdf/btsMwpUf5Pj/oWzdJQcrBHCc3UINCeWxf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m2Cdf/btsMwpUf5Pj/oWzdJQcrBHCc3UINCeWxf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m2Cdf/btsMwpUf5Pj/oWzdJQcrBHCc3UINCeWxf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm2Cdf%2FbtsMwpUf5Pj%2FoWzdJQcrBHCc3UINCeWxf0%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;912&quot; height=&quot;236&quot; data-filename=&quot;키워드 검색 기능 onclick 이벤트 주기.png&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;236&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;&amp;nbsp;먼저 HTML에서 검색 버튼에 onclick 이벤트를 줍니다.&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;HTML에서 onclick 이벤트를 줄 때는 onclick=&quot;getNewsByKeyword()&quot;를 통해 줄 수 있습니다.&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-filename=&quot;getNewsByKeyword.png&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsttVv/btsMx2KxjZq/Q5P8a3cvXh08Dp4KMITwFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsttVv/btsMx2KxjZq/Q5P8a3cvXh08Dp4KMITwFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsttVv/btsMx2KxjZq/Q5P8a3cvXh08Dp4KMITwFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsttVv%2FbtsMx2KxjZq%2FQ5P8a3cvXh08Dp4KMITwFk%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;1246&quot; height=&quot;818&quot; data-filename=&quot;getNewsByKeyword.png&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;818&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;&amp;nbsp;HTML에서 onclick 이벤트를 이용해 부르는 getNewsByKeyword() 함수를 만들어보도록 하겠습니다.&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;해당 기능은 keyword 변수에 검색을 위한 input 박스에 있는 요소를 가져와서 담아줍니다.&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;그 후 url에 있는 쿼리문에 q=${keyword}를 추가해 주시고 fetch()를 하고 render() 함수를 불러주면 됩니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/453312239&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Fx0Vz/hyYjA3hKfS/jUC7y53KBexHZwTuOLx2V0/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=489_300_558_375,https://scrap.kakaocdn.net/dn/Qu44p/hyYm9JJLDH/18pzKkVEoGs4AiahFjkH41/img.jpg?width=1920&amp;amp;height=1040&amp;amp;face=489_300_558_375&quot; data-video-width=&quot;860&quot; data-video-height=&quot;466&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;466&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;'진득하게 코딩하기'에서 업로드한 동영상&quot; data-video-play-service=&quot;daum_tistory&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/453312239?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;466&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;키워드로 검색을 해서 해당 키워드에 대한 기사들이 출력되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;nbsp;중복된 코드 제거하기&lt;/blockquote&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-filename=&quot;중복된 코드 제거하기.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bImiIl/btsMyuzY1a7/k72ZwkJHbT20bDLcF4oMw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bImiIl/btsMyuzY1a7/k72ZwkJHbT20bDLcF4oMw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bImiIl/btsMyuzY1a7/k72ZwkJHbT20bDLcF4oMw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbImiIl%2FbtsMyuzY1a7%2Fk72ZwkJHbT20bDLcF4oMw0%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;1320&quot; height=&quot;732&quot; data-filename=&quot;중복된 코드 제거하기.png&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;732&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;&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;&amp;nbsp;fetch() 하고 json() 함수를 호출하는 부분이 반복되고 URL도 반복되기 때문에 반복되는 부분은 fetchNews에서 처리하고 각각의 기능은 데이터만 가져와서 fetchNews에 parameter를 전달해 줍니다.&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;이렇게 코드를 구성하면 다른 기능이 추가되어도 힘들이지 않고 parameter를 받아오는 함수만 만들어서 fetchNews에 보내주면 됩니다.&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;먼저 URL에서 바뀌지 않는 값을 일단 URL에 넣어주고 append()를 이용해서 추가적인 URL을 추가해 주시면 됩니다.&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;Object.entries(params) 함수는 객체의 속성(key-value 쌍)을 배열 형태로 변환하는 메서드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;검색 기능은 API가 해당 데이터를 준다면 굉장히 간단하게 구현할 수 있습니다.&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;&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;끝까지 봐주셔서 감사합니다. &lt;/p&gt;</description>
      <category>JavaScript</category>
      <author>진득코딩</author>
      <guid isPermaLink="true">https://jinco.tistory.com/112</guid>
      <comments>https://jinco.tistory.com/112#entry112comment</comments>
      <pubDate>Fri, 28 Feb 2025 13:00:14 +0900</pubDate>
    </item>
  </channel>
</rss>