<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>난쟁이가 적어올린 작은코딩</title>
    <link>https://nancording.tistory.com/</link>
    <description>보통 공부한 내용을 복습하거나, 알고있지만 다시 상기하고싶은 내용을 포스팅합니다.</description>
    <language>ko</language>
    <pubDate>Thu, 2 Jul 2026 08:39:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>모두와 함께</managingEditor>
    <image>
      <title>난쟁이가 적어올린 작은코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/3997013/attach/5bfe500c354c4c65928be89f221e6fe9</url>
      <link>https://nancording.tistory.com</link>
    </image>
    <item>
      <title>최종 프로젝트를 끝마쳤다.</title>
      <link>https://nancording.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;10월 15일 드디어 최종 프로젝트를 마쳤다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;시간이 조금만 더 있었으면.. 하는 마음이 너무 컸지만, 막상 발표를 마치니 속이 후련한 마음이 더 컸다. 아무래도 정말 프로젝트 기간 동안 열심히 했다는 의미가 아닐까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;느낀 점은 마지막으로 미루고, 프로젝트를 진행하면서 경험했던 사건들, 개인적으로 아쉬웠던 점, 프로젝트할 때 어떻게 하면 더 좋을지에 대해 다뤄볼까 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;i&gt;&lt;b&gt;주제와 구현할 기능에 대해 긴 시간을 갖지 않는 게 좋다&lt;/b&gt;&lt;/i&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;국비지원 학원 기준으로 3~4개월 배운 내용으로 복잡한 기능을 구현하기엔 무리가 있다. 게다가 3~4개월 배운 내용을 바로 쓴다는 것도 버겁고 빠듯하기 때문에 주제를 선정할 때 팀의 수준을 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 4주라는 게 그렇게 긴 시간이 아니다. 주제 정하고 DB 설계하고 기능 어떻게 구현할지, UI 설계하다 보면 기능 구현할 시간은 그리 많지 않다. 게다가 제대로 정상 작동하는지 테스트도 필요하기 때문에 4주는 절대로 여유 있는 기간은 아니다. 그렇기 때문에 어느 정도 주제에 대해 미리 대비를 해두는 게 좋은 방법이긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 배운 기능을 확실하게 구현할 수 있고, 생각했을 때 너무 복잡하지 않는 주제를 선정하는 게 중요하다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;i&gt;&lt;b&gt;팀원을 너무 신뢰하지 말 것&lt;/b&gt;&lt;/i&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;나는 사람들한테 사람을 잘 신뢰하지 않는 것처럼 말하지만, 사실 난 사람을 너무 잘 믿는 성격이다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;팀 원 중 한 명이 취업을 이유로 그 팀원이 맡은 기능의 일부분을 나에게 인계해주었다. 받은 내용은 내가 생각한 프로젝트의 전반적인 내용과 맞지 않았고, 그렇게 많은 기능을 구현하지 않았다. (사실 이 부분은 그 팀원이 정말 구현할 기능이 얼마 없다고 생각한 건지 거짓말인지는 확실하게 모르겠다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;프로젝트 일주일을 조금 남겨놓고 급하게 처음부터 다시 시작했다. 적잖이 당황했고, 어떻게 할지 생각이 많았지만, 이럴 때일수록 오히려 팀원들과 원활하게 소통했고, 넘겨받은 것들은 다행히 잘 구현이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;좋게 끝나 다행이었지, 만약 전반적인 분위기가 좋지 않고 어수선했다면 그야말로 멘붕이었을 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런 의미에서 어느 정도의 의심은 필요하고, '나만 잘하면 돼'가 아닌, '좋은 결과물을 이끌어내자'라는 마음으로 다른 팀원들이 어떻게 진행되어가는지도 관심을 가져야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;i&gt;&lt;b&gt;팀원들 사이에서 실력의 차이가 있을 수도 있다.&lt;/b&gt;&lt;/i&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;너무나도 당연한 말이다. 모두가 실력이 동등할 수 없다. 하지만 팀원 누군가 더 많은 내용을 알고, 학원에서 배운 내용보다 더 좋고 괜찮은 게 있어서 추천을 하고자 하면 나머지 팀원에겐 따로 공부해야 할 시간이 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 만약 프로젝트를 시작하기 전 팀원이 미리 정해졌다고 가정했을 때, 스터디 모임을 하는 것도 괜찮은 방법이라고 생각한다. 학원에서 따로 알려주지 않았지만 꼭 사용해보고 싶은 것이 있다면 스터디에서 각자 소개와 동시에 공부를 미리 할 수 있으니 부담감이 보다 적어질 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;마치며,&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;팀 프로젝트 및 개인 프로젝트를 시작하는 사람들에게 나의 경험을 바탕으로 프로젝트를 하면서 있었던 일과, 아쉬운 점 및 느낀 점을 간략하게 정리해보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;나의 글을 통해 시작하려는 사람들이 어느 정도 도움이 되었으면 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마지막으로, &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;내가 느끼기에, 기준 팀 프로젝트가 그래도 성공적으로 끝났다고 생각한다. 끝까지 포기하지 않고 같이해준 팀원들이 있기 때문이 아닐까 하는 생각이다. 함께 프로젝트했던 팀원들 모두 좋은 곳에 취직했으면 좋겠다 진심 &lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/개발일기</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/111</guid>
      <comments>https://nancording.tistory.com/111#entry111comment</comments>
      <pubDate>Fri, 23 Oct 2020 13:01:42 +0900</pubDate>
    </item>
    <item>
      <title>jQuery $(this)</title>
      <link>https://nancording.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;html에서 하나의 클래스를 가진 여러개의 태그들 중 하나를 클릭했을 때 클릭이벤트가 실행되는 코드를 짜고있었을 때, 해당하는 클래스의 모든 태그들이 이벤트가 실행되어 곤란했던 적이 있었습니다. 어쩔수없이 id를 설정하여 어찌저찌 메꾸고 넘어갔었던 기억이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이게 일이 빈번해지고 코드도 보기 안 좋아지기 시작하면서 방법을 찾다 jQuery의 this를 알게되고나서 어떻게 해결할지에 대해 알게되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 이번 포스팅에서는 jQuery의 this, $(this)에 대해 알아보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 코드를 보면서 시작하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605449507105&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .number {
        clear: both;
        float: left;
        background-color: gray;
        margin: 5px;
        font-size: 1.5em;
        cursor: pointer;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&quot;number&quot;&amp;gt;1번입니다.&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;number&quot;&amp;gt;2번입니다.&amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;number&quot;&amp;gt;3번입니다.&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    $(&quot;.number&quot;).on(&quot;click&quot;, function(){
        $(&quot;.number&quot;).css(&quot;background-color&quot;, &quot;red&quot;).text(&quot;clicked.&quot;);
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;body태그에는 class가 number인 세 개의 태그가 있습니다. 그리고 클래스가 number인 태그를 클릭했을 때 배경색과 텍스트가 바뀌게 설정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 '2번입니다.'를 클릭했을 때 '2번입니다.'만 css가 적용이 되어야합니다. 먼저 클릭하기 전 화면을 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; data-alt=&quot;최초의 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEtG9U%2FbtqNqd60Dwv%2F4mFpohWCE8kExTH6RPORvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최초의 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음 로딩 된 화면입니다. 여기서 '2번입니다.'를 클릭하게 되면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOM3v1/btqNti0wFJr/5KSqTkbXh6ujct6roQDhWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOM3v1/btqNti0wFJr/5KSqTkbXh6ujct6roQDhWk/img.png&quot; data-alt=&quot;&amp;amp;#39;2번입니다.&amp;amp;#39;를 클릭했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOM3v1/btqNti0wFJr/5KSqTkbXh6ujct6roQDhWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOM3v1%2FbtqNti0wFJr%2F5KSqTkbXh6ujct6roQDhWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'2번입니다.'를 클릭했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 모든 태그가 변하게 됩니다. 이유는 하나를 클릭했어도 class가 number인 태그에 css를 변경하도록 설정했기 때문입니다. 그렇다면 어떻게 해야 클릭했을 때 해당하는 태그만 css를 변경시킬 수 있을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605449781641&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(&quot;.number&quot;).on(&quot;click&quot;, function(){
        $(this).css(&quot;background-color&quot;, &quot;red&quot;).text(&quot;clicked.&quot;);
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;중간에 $(&quot;.number&quot;)에서 $(this)로 변경된 모습을 확인할 수 있습니다. jQuery의 $(this)를 이용하면 클릭한 클래스의 해당 태그만 css가 변경됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; data-alt=&quot;최초의 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEtG9U/btqNqd60Dwv/4mFpohWCE8kExTH6RPORvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEtG9U%2FbtqNqd60Dwv%2F4mFpohWCE8kExTH6RPORvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최초의 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음의 화면에서 '2번입니다.'를 클릭하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ4AVR/btqNtilZHwD/pzGPxRdSkbimDyjr9TDRkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ4AVR/btqNtilZHwD/pzGPxRdSkbimDyjr9TDRkk/img.png&quot; data-alt=&quot;&amp;amp;#39;2번입니다.&amp;amp;#39;를 클릭했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ4AVR/btqNtilZHwD/pzGPxRdSkbimDyjr9TDRkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ4AVR%2FbtqNtilZHwD%2FpzGPxRdSkbimDyjr9TDRkk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;'2번입니다.'를 클릭했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 태그를 클릭 한 부분만 css가 변경됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.everdevel.com/jQuery/this/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.everdevel.com/jQuery/this/&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/jQuery</category>
      <category>jquery</category>
      <category>This</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/109</guid>
      <comments>https://nancording.tistory.com/109#entry109comment</comments>
      <pubDate>Tue, 29 Sep 2020 13:21:19 +0900</pubDate>
    </item>
    <item>
      <title>Oracle on delete cascade</title>
      <link>https://nancording.tistory.com/108</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;혼자서 코딩을 하던 중 특정 데이터가 삭제되지 않는 것을 확인했습니다. 연습용으로 작은 웹 사이트를 만들어봤는데, 회원 DB가 삭제되지 않았습니다. 이유는 회원테이블(USER TABLE)로 참조키가 설정되어있었기 때문이었습니다. 제가 구축하던 웹 사이트는 회원의 DB가 사라지면 오류가 발생하기 때문에 탈퇴를 한 회원이라면, 회원을 '탈퇴한 회원'으로 수정하고 나머지 회원의 개인정보를 null로 수정하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래도 만약에 자식으로 거슬러 내려가서 일일이 삭제하지않고, 바로 부모쪽에서 바로 삭제할 수 있는 방법을 알고싶었고, 다행히도 그러한 설정이 있어 이번 포스팅에서 알려드릴까 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;on delete cascade&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;FOREIGN KEY를 이용하면 데이터를 외부에서 참조할 수 있습니다. 예를들어 USER 테이블의 userid라는 기본키가 있고,&amp;nbsp; USER테이블에서 userid를 참조하고 있는 MYPAGE의 userid라는 참조키가 있다고 가정을 할 때, USER테이블의 userid를 함부로 update, delete를 할 수 없습니다. 이유는 다른 테이블에서 사용 중이기 때문에 함부로 변경할 수 없기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;방법은 여러가지겠지만 크게 두가지로 나눌 수 있습니다. 해당 기본 키를 참조하는 모든 참조키를 삭제하고나서 기본키를 삭제하거나, on delete cascade를 사용하여 관련된 모든 키를 삭제하는 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번에는 on delete cascade를 사용하여 삭제하는 방법에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605428297576&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE TEST1(
    PK_COLUMN1 VARCHAR2(100),
    CONSTRAINT TEST1_PK PRIMARY KEY (PK_COLUMN1)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위는 TEST1이라는 테이블에 PK설정을 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605428322239&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE TEST2(
    PK_COLUMN1 VARCHAR2(100),
    COLUMN2 VARCHAR2(100),
    CONSTRAINT TEST2_FK_PK_COLUMN1 FOREIGN KEY(PK_COLUMN1) REFERENCES TEST1(PK_COLUMN1)
    ON DELETE CASCADE
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TEST2라는 테이블에서 TEST1의 컬럼을 참조하여 FK를 설정하였습니다. 맨 아랫줄을 보면 ON DELETE CASCADE설정을 하였습니다. 이는 원래의 PK인 TEST1테이블의 PK인 PK_COLUMN1의 데이터를 삭제했을 때 그 데이터에 참조된 데이터들을 모두 삭제하겠다는 설정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음으로 테이블에서 데이터를 추가하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605428467232&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO TEST1 VALUES('MENU1');
INSERT INTO TEST1 VALUES('MENU2');

INSERT INTO TEST2 VALUES('MENU1', '김밥');
INSERT INTO TEST2 VALUES('MENU1', '튀김');
INSERT INTO TEST2 VALUES('MENU2', '오뎅');
INSERT INTO TEST2 VALUES('MENU2', '라면');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 두줄은 TEST1에 데이터를 추가했고, 나머지는 TEST2에 데이터를 추가했습니다. TEST2의 VALUES는 순서대로 PK_COLUMN1, COLUMN2입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TEST2테이블을 조회하면 아래와 같은 데이터가 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csSHsG/btqNx8vSHjS/O9sHKqdVh3cvGUomuzuSG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csSHsG/btqNx8vSHjS/O9sHKqdVh3cvGUomuzuSG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csSHsG/btqNx8vSHjS/O9sHKqdVh3cvGUomuzuSG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsSHsG%2FbtqNx8vSHjS%2FO9sHKqdVh3cvGUomuzuSG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음은 TEST1테이블에서 PK로 설정된 PK1_COLUMN1의 데이터인 MENU1을 삭제해보겠습니다. 원래라면 삭제가 되지 않지만, FK 설정 당시 ON DELETE CASCADE를 설정했기 때문에 삭제가 될 수 있음을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1605428697975&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM TEST1 WHERE PK_COLUMN1 = 'MENU1';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 쿼리를 실행하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/19PdN/btqNr6Z8Fkb/qDw2JFvQqW5xbWDQ9f7Wt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/19PdN/btqNr6Z8Fkb/qDw2JFvQqW5xbWDQ9f7Wt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/19PdN/btqNr6Z8Fkb/qDw2JFvQqW5xbWDQ9f7Wt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F19PdN%2FbtqNr6Z8Fkb%2FqDw2JFvQqW5xbWDQ9f7Wt0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wNjL3/btqNqDc6NCt/2vP6EQtArOhqQdHNsSa7Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wNjL3/btqNqDc6NCt/2vP6EQtArOhqQdHNsSa7Gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wNjL3/btqNqDc6NCt/2vP6EQtArOhqQdHNsSa7Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwNjL3%2FbtqNqDc6NCt%2F2vP6EQtArOhqQdHNsSa7Gk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MENU1이라는 데이터가 삭제됨과 동시에 TEST2의 FK인 PK_COLUMN1의 MENU1이라는 데이터도 삭제된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자료참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://wakestand.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;wakestand.tistory.com/205&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=pjt3591oo&amp;amp;logNo=220617636202&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.blog.naver.com/PostView.nhn?blogId=pjt3591oo&amp;amp;logNo=220617636202&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/Oracle</category>
      <category>ON DELETE CASCADE</category>
      <category>SQL</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/108</guid>
      <comments>https://nancording.tistory.com/108#entry108comment</comments>
      <pubDate>Mon, 28 Sep 2020 18:10:34 +0900</pubDate>
    </item>
    <item>
      <title>Javascript document.querySelector(All)</title>
      <link>https://nancording.tistory.com/107</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 처음 jQuery를 접할 때&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음 웹개발을 시작하고 아무런 배경없이 그저 받아들이기만 했을 때 html은 무엇이고, css는 무엇이며 javascript는무엇인지 전혀 모르고 그저 따라치기만 바빴습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;얼렁뚱땅 며칠 하다가 jQuery로 넘어가면서 편리하다고들 하는데 도대체 무엇이 편리한지도 정확히 모른 채 그저 공부해야 할 게 하나 더늘었다는 생각만으로 기능들을 익히기에 분주했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;작은 프로젝트들을 하며 jQuery가 개발하는 입장에서 좋은 기능이라는 걸 깨달았고, 별 무리없이 계속 쓰고 있었습니다. 모르는 것을 뒤져보다 우연히 요즘은 제이쿼리를 잘 안쓰는 추세라는 글을 보았고, 왜 안쓰는지 찾아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;당연히 이유를 몰랐습니다. 왜냐하면 DOM의 정확한 개념을 견지하지도 않고 그저 화면에 나오기만 하면 되는 기능들만 익히니 어떻게 접근해서 어떻게 결과가 나오는지는 거의 알지 못합니다. 사실 지금도 마찬가지구요,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1603974166313&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;프로젝트에서 jQuery 의 사용을 그만두겠다고 결심한 이유&quot; data-og-description=&quot;jQuery 를 이제 그만 사용해야겠다고 느낀 이유들을 정리해보았다.&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-jquery-%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EA%B2%A0%EB%8B%A4%EA%B3%A0-%EA%B2%B0%EC%8B%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0-45379cba95b6&quot; data-og-url=&quot;https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-jquery-%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EA%B2%A0%EB%8B%A4%EA%B3%A0-%EA%B2%B0%EC%8B%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0-45379cba95b6&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QW184/hyH3DfT0le/JnjnJ6LEdmSaWOXoptHZK1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/ckDeg1/hyH3FktYUv/ykQr9bKDyHKf2kCMZVTxb0/img.jpg?width=60&amp;amp;height=40&amp;amp;face=0_0_60_40,https://scrap.kakaocdn.net/dn/bNlgSE/hyH3FSjXiy/R8CTu4nEL8h6vRDkxuWK20/img.png?width=60&amp;amp;height=27&amp;amp;face=0_0_60_27&quot;&gt;&lt;a href=&quot;https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-jquery-%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EA%B2%A0%EB%8B%A4%EA%B3%A0-%EA%B2%B0%EC%8B%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0-45379cba95b6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/%EC%98%A4%EB%8A%98%EC%9D%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-jquery-%EC%9D%98-%EC%82%AC%EC%9A%A9%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EA%B2%A0%EB%8B%A4%EA%B3%A0-%EA%B2%B0%EC%8B%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0-45379cba95b6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QW184/hyH3DfT0le/JnjnJ6LEdmSaWOXoptHZK1/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/ckDeg1/hyH3FktYUv/ykQr9bKDyHKf2kCMZVTxb0/img.jpg?width=60&amp;amp;height=40&amp;amp;face=0_0_60_40,https://scrap.kakaocdn.net/dn/bNlgSE/hyH3FSjXiy/R8CTu4nEL8h6vRDkxuWK20/img.png?width=60&amp;amp;height=27&amp;amp;face=0_0_60_27');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로젝트에서 jQuery 의 사용을 그만두겠다고 결심한 이유&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;jQuery 를 이제 그만 사용해야겠다고 느낀 이유들을 정리해보았다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 링크는 jquery가 어떤이유에서 그닥 추천하지 않는지를 설명하는 포스팅입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Vanilla Javascript를 공부해야겠다고 결심한 이유&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;제가 느끼기에 적어도 웹개발은 강력한 framework를 기반으로 탄탄한 웹 어플리케이션을 구축하는 것을 선호하는 것 같다고 느꼈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 framework들은 초반에 진입이 힘들다는 단점이 있지만, 어느정도 익히고 나면 틀에서 크게 벗어나지 않고, 제한되어있어 보다 개발에 있어 높은 완성도를 자랑한다는 장점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;servier, jsp에서 spring, springboot로, jquery에서 react, vue로 전환되는 추세도 이 때문이 아닐까 조심스레 생각해봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Vanilla JS에 보다 더 다가가기 위해 오늘은 document.querySelector에 대해 공부해볼까 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. document.querySelector&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;1) querySelector&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603975451383&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;test&quot;&amp;gt;Hello&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;class=&quot;test&quot;인 div태그입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 태그를 선택하려면 jQuery에서는,&lt;/p&gt;
&lt;pre id=&quot;code_1603975510886&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(&quot;.test&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 표시할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;document.querySelector에서는,&lt;/p&gt;
&lt;pre id=&quot;code_1603975608366&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; document.querySelector(&quot;.test&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이외에도 javascript에서는 querySelector 말고도 다른 기능이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1603975743733&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.getElementsByClassName(&quot;test&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 태그의 내용 'Hello' 에서 Hi로 변경한다면,&lt;/p&gt;
&lt;pre id=&quot;code_1603975672457&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(&quot;.test&quot;).html(&quot;Hi&quot;); //jQuery

document.querySelector(&quot;.test&quot;).innerHtml = 'Hi'; // Javascript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;둘다 위와 같이 변경이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마찬가지로 class뿐만 아니라 id에도 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1603975903591&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;test&quot;&amp;gt;Hello&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1603975927382&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(&quot;#test&quot;) //jQuery

document.querySelector(&quot;#test&quot;) //javascript
document.getElementById(&quot;test&quot;) //javascript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;2) querySelectorAll&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603976147640&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;test&quot;&amp;gt;Hello1&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;test&quot;&amp;gt;Hello2&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;test&quot;&amp;gt;Hello3&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;test&quot;&amp;gt;Hello4&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 jQuery에서 class가 test인 태그에 빨간색 글씨를 준다면, class=&quot;test&quot;인 모든 태그의 텍스트가 빨간색이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603976192435&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(&quot;.test&quot;).css(&quot;color&quot;, &quot;red&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp0l7Z/btqL5z4cXHP/qcNwYLzqXYDka5DrkHehbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp0l7Z/btqL5z4cXHP/qcNwYLzqXYDka5DrkHehbK/img.png&quot; data-alt=&quot;출력결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp0l7Z/btqL5z4cXHP/qcNwYLzqXYDka5DrkHehbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp0l7Z%2FbtqL5z4cXHP%2FqcNwYLzqXYDka5DrkHehbK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 document.querySelector를 쓴다면,&lt;/p&gt;
&lt;pre id=&quot;code_1603977067649&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;document.querySelector('.test').style.color='red';&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5xjrg/btqL9sP57Vt/bEmmiwDsKhppocgHfhGMrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5xjrg/btqL9sP57Vt/bEmmiwDsKhppocgHfhGMrk/img.png&quot; data-alt=&quot;출력결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5xjrg/btqL9sP57Vt/bEmmiwDsKhppocgHfhGMrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5xjrg%2FbtqL9sP57Vt%2FbEmmiwDsKhppocgHfhGMrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 맨 윗줄만 css가 적용이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;jQuery의 기능처럼 해당하는 모든 class name에 css를 적용하려면 querySelectorAll를 사용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 배열로 가져오기 때문에 모든 class에 css를 적용하려면 반복문을 이용해야합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1603977912513&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var testList = document.querySelectorAll('.test');
for ( var i = 0; i &amp;lt; testList.length; i++ ) {
    testList[i].style.color = 'red';
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pNs8N/btqL5zJXUYW/to1NKtNjFOlIkCyw8xYrP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pNs8N/btqL5zJXUYW/to1NKtNjFOlIkCyw8xYrP0/img.png&quot; data-alt=&quot;출력결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pNs8N/btqL5zJXUYW/to1NKtNjFOlIkCyw8xYrP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpNs8N%2FbtqL5zJXUYW%2Fto1NKtNjFOlIkCyw8xYrP0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.codingfactory.net/10413&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.codingfactory.net/10413&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://jeonghwan-kim.github.io/2018/01/25/before-jquery.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jeonghwan-kim.github.io/2018/01/25/before-jquery.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/JavaScript</category>
      <category>document.querySelector</category>
      <category>document.queryselectorall</category>
      <category>JavaScript</category>
      <category>JS</category>
      <category>quertselectorall</category>
      <category>querySelector</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/107</guid>
      <comments>https://nancording.tistory.com/107#entry107comment</comments>
      <pubDate>Sat, 26 Sep 2020 23:31:29 +0900</pubDate>
    </item>
    <item>
      <title>git branch</title>
      <link>https://nancording.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음 git을 시작할 때 굳이 필요하나 싶었지만 이것저것 손대는 것이 많아지면서 정말 git의 소중함을 깨닫곤 합니다. 토이프로젝트를 만들거나 팀프로젝트를 할 때도 git은 정말 요긴하게 쓰입니다. 저는 팀 프로젝트를 하면서 branch를 사용해 좀 더 수월하게 정리를 할 수 있었는데요, 어떻게 사용했는지 정리차 포스팅을 결정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 branch에 대해 먼저 알아보려합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. branch란?&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1921&quot; data-origin-height=&quot;1057&quot; width=&quot;662&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l2aSa/btqLRlefbZ6/B7xtSHIJbsXETVOXHk2KWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l2aSa/btqLRlefbZ6/B7xtSHIJbsXETVOXHk2KWk/img.png&quot; data-alt=&quot;출처 : https://velog.io/@luna238/Git-branch%EA%B5%AC%EC%A1%B0%EC%99%80-git%EB%AA%85%EB%A0%B9%EC%96%B4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l2aSa/btqLRlefbZ6/B7xtSHIJbsXETVOXHk2KWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2aSa%2FbtqLRlefbZ6%2FB7xtSHIJbsXETVOXHk2KWk%2Fimg.png&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1921&quot; data-origin-height=&quot;1057&quot; width=&quot;662&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://velog.io/@luna238/Git-branch%EA%B5%AC%EC%A1%B0%EC%99%80-git%EB%AA%85%EB%A0%B9%EC%96%B4&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하나의 프로젝트에서 독립적으로 어떠한 작업을 진행하기 위한 개념입니다. 이는 진행하려는 프로젝트의 영향을 끼치지 않기 떄문에 동시에 여러 작업을 동시에 진행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따로 만들어진 브랜치는 다른 브랜치와 병합할 수 있는 장점이 있고, 어떻게 진행되는지 한눈에 파악도 가능합니다. 그래서 혼자 프로젝트를 할 때도 편리하지만, 여러명이서 같이 하는 팀 프로젝트에서의 깃은 더욱 편리함을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;개념소개는 이정도로 하고, 명령어와 함께 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. git branch 명령어&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;1) 브랜치 생성&lt;/p&gt;
&lt;pre id=&quot;code_1603783971220&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git branch &quot;브랜치 이름&quot;
$ git branch new-branch&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;말 그대로 branch라는 명령어로 브랜치를 생성할 수 있습니다. 브랜치의 이름을 'new-branch'라고 한다면, 두번째 줄과 같이 입력하면브랜치는 생성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;2) 브랜치 전환&lt;/p&gt;
&lt;pre id=&quot;code_1603784194981&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git checkout &quot;브랜치 이름&quot;
$ git checkout new-branch&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음 브랜치는 master로 지정되어있습니다. 브랜치를 전환하고자 할 때에는 checkout이라는 명령어와 전환하고자 하는 브랜치이름을 같이 입력하면 브랜치가 전환됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;3) 브랜치 병합&lt;/p&gt;
&lt;pre id=&quot;code_1603785803385&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git merge &quot;브랜치 이름&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브랜치를 병합하는 명령어는 merge입니다. 여기서 어떻게 병합할건지를 먼저 생각해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;new-branch를 master에 병합하기 위해서는 HEAD가 new-branch로 향한 상태로 merge를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603786041013&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git checkout new-branch
$ git merge master&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 브랜치인 new-branch가 master로 병합하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;4) 브랜치 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1603786106712&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git branch -d &quot;브랜치 이름&quot;
$ git branch -d new-branch&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 명령어를 입력하면 브랜치는 삭제가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마치며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;얼마전 학원에서 마지막 팀프로젝트가 끝났습니다. 깃으로 branch 생성도 해보고, merge도 하면서 git의 분산 버전관리시스템을 느껴보고싶었습니다. 끔찍하긴 하지만 merge conflict도 어떻게 해결할지도 나름 궁금하기도 했구요. 하지만 팀원중에 git을 안해본 사람도 있었고, 그닥 중요성을 못느끼는 사람도 있어 결국은 압축파일로 합쳤었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;git은 아무래도 기본적인 push나 commit, add, pull, clone 등등 이러한 명령어들도 어느정도 시간이 필요한데, 팀프로젝트 기간은 아무래도 타이트하다보니 git을 사용해보자고 고집피우기엔 좀 이기적일것같다는 판단이어서 결국엔 하지 못하여 아쉬움은 있었지만, 그래도 혼자서 프로젝트의 일부분을 branch로 push 하는 등 척이라도 해보았습니다. 물론 한계는 있었지만요 ㅎㅎ.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;결과적으로 좋은 경험이었고 다음에는 git을 적극 활용하여 좋은 팁이 있다면 다시 돌아오겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;backlog.com/git-tutorial/kr/stepup/stepup1_1.html&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/기타</category>
      <category>Branch</category>
      <category>checkout</category>
      <category>Delete</category>
      <category>Git</category>
      <category>Merge</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/106</guid>
      <comments>https://nancording.tistory.com/106#entry106comment</comments>
      <pubDate>Wed, 23 Sep 2020 11:56:13 +0900</pubDate>
    </item>
    <item>
      <title>MyBatis 동적 태그</title>
      <link>https://nancording.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;스프링으로 연습삼아 혼자서 프로젝트를 하던 도중 화면에서 한번에 데이터를 여러개로 받아 그 갯수만큼 insert처리를 해야하는 기능을 구현해야했는데요, 모르는게 많은 저는 막막했습니다.. 다행히도 바로 생각난 건 막연하게 for문을 이용하는 건 어떨까? 하는 생각으로 시작했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;구글링과 사놓은 책들을 뒤져보다 mybatis에서 foreach라는 태그를 사용하여 해결했습니다. 이 외에도 mybatis에서는 여러가지의 동적 태그들이 있습니다. if, choose, trim 등등,, 그래서 mybatis의 동적태그에 대해 복습하는 겸 정리를 해볼까 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정리하기 앞서 동적 태그를 좀 더 매끄럽게 사용할 수 있게 해주는 태그에 대해 먼저 알아보겠습니다. trim이라는 태그엔데, 이 태그는 단독으로 사용되지 않는다는 것이 특징입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;trim 태그&lt;/b&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;trim 태그는 하위에서 만들어지는 SQL문을 조사하여 추가적인 SQL을 처리해주는 태그입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;trim태그의 속성에 대해 몇가지 알아보겠습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이름&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.9767%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설명&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;prefix&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.9767%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 태그 내에서 가장 앞에 붙음&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;prefixOverrides&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.9767%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 태그 내에서 쿼리가 가장 앞에 해당하는 문자를 지워줌&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;suffix&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.9767%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 태그 내에서 가장 뒤에 붙음&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.0233%; text-align: center;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;suffixOverrides&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.9767%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 태그 내의 가장 뒤에 해당하는 문자를 지워줌&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 목록을 통해 예시를 들어보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;- 예시 1&lt;/p&gt;
&lt;pre id=&quot;code_1603510011829&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COLUMN1, COLUME2 
  FROM TABLE 
 WHERE PK_COLUMN1 = #{key1}
   &amp;lt;trim prefix=&quot;AND (&quot; prefixOverrides=&quot;OR&quot; suffix=&quot;)&quot;&amp;gt;
     &amp;lt;if test=&quot;key2 != null&quot;&amp;gt;
     	OR PK_COLUMN2 = #{key2}
     &amp;lt;/if&amp;gt;
     &amp;lt;if test=&quot;key3 != null&quot;&amp;gt;
     	OR PK_COLUMN3 = #{key3}
     &amp;lt;/if&amp;gt;
   &amp;lt;/trim&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 prefix 태그를 보면, prefix=&quot;AND (&quot;라는 것을 볼 수 있습니다. 이는 where절의 조건을 이어주는 AND를 뜻하며, prefixOverride=&quot;OR&quot;은 trim 태그 내의 맨 앞의 문자가 OR일 때 해당 문자를 지워주는 역할을 합니다. suffix=&quot;)&quot;은 말 그대로 맨 뒤에 붙은 문자입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 SQL문의 trim태그내의 if문이 모든 조건을 만족한다면, 해당 SQL문은 아래처럼 해석됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603511432353&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COLUMN1, COLUME2 
  FROM TABLE 
 WHERE PK_COLUMN1 = #{key1} 
       AND(PK_COLUMN2 = #{key2} OR PK_COLUMN3 = #{key3})
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;- 예시 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603517910247&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE TABLE
  &amp;lt;trim prefix=&quot;SET&quot; suffixOverrides=&quot;,&quot;&amp;gt;
    &amp;lt;if test=&quot;key1 != null&quot;&amp;gt;COLUMN1 = #{key1},&amp;lt;/if&amp;gt;
    &amp;lt;if test=&quot;key2 != null&quot;&amp;gt;COLUMN2 = #{key2},&amp;lt;/if&amp;gt;
    &amp;lt;if test=&quot;key3 != null&quot;&amp;gt;COLUMN3 = #{key3},&amp;lt;/if&amp;gt;
    &amp;lt;if test=&quot;key4 != null&quot;&amp;gt;COLUMN4 = #{key4},&amp;lt;/if&amp;gt;
  &amp;lt;/trim&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예시 1에 없던 suffixOverrides를 사용하였습니다. suffixOverrides는 맨 끝의 문자가 해당문자와 일치할 때 제거해주는 역할을 합니다. trim태그 안의 if문을 전부 만족하는 조건이라면 해당 SQL문은 아래처럼 해석됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1603518282806&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE TABLE SET 
COLUMN1 = #{key1},
COLUMN2 = #{key2},
COLUMN3 = #{key3},
COLUMN4 = #{key4}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;trim 태그정리는 이정도로 마치고, 본격적인 동적 태그들에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;if는 조건이 true가 되었을 때 태그 내의 SQL문을 처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603519083454&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;if test=&quot;key1 != null&quot;&amp;gt;
  COLUMN1 = #{key1}
&amp;lt;/if&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 해당 if문의 test가 true일 때, 태그 내의 SQL문을 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;choose&lt;/b&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;if와 달리 choose는 여러 상황들 중 하나의 상황에서만 동작합니다. 마치 Java의 if ~ else와 유사합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1603519395924&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;choose&amp;gt;
    &amp;lt;when test=&quot;key1 != null&quot;&amp;gt;
    	COLUMN1 = #{key1}
    &amp;lt;/when&amp;gt;
	&amp;lt;when test=&quot;key2 != null&quot;&amp;gt;
    	COLUMN2 = #{key2}
    &amp;lt;/when&amp;gt;
	&amp;lt;when test=&quot;key3 != null&quot;&amp;gt;
    	COLUMN3 = #{key3}
    &amp;lt;/when&amp;gt;
    &amp;lt;otherwise&amp;gt;
    	COLUMN4 = #{key4}
    &amp;lt;/otherwise&amp;gt;
&amp;lt;/choose&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 choose태그 안에서 when이라는 태그가 있습니다. 이는 조건식을 뜻하며 Java에서 else if와 유사한 의미를 가집니다. choose태그의 마지막 otherwise는 Java의 else와 유사한 의미를 가지며, choose태그 내에서 when태그의 조건의 나머지를 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;foreach&lt;/b&gt;&lt;/h4&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;foreach태그를 알아보기 전 foreach태그의 속성에 대해서 먼저 알아볼 필요가 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 140px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이름&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설명&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;collection&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전달받은 인자이며, List 또는 Array만 사용 가능&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;item&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전달받은 인자 값을 alias명으로 설정&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;open&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;구문이 시작될 때 입력 할 문자열&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;close&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;구문의 맨 마지막에 입력 할 문자열&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;separator&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반복되는 사이에 입력 할 문자열&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 18.6046%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;index&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 81.3954%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반복되는 구문 번호로, 0부터 순차적으로 증가함&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 예시를 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603521062595&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COLUMN1, COLUMN2
  FROM TABLE
 WHERE COLUMN1 in
    &amp;lt;foreach item=&quot;item&quot; index=&quot;index&quot; collection=&quot;list&quot; open=&quot;(&quot; seperator=&quot;,&quot; close=&quot;)&quot;&amp;gt;
    	#{item}
    &amp;lt;/foreach&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전달받은 파라미터의 타입은 list이고, list의 alias설정은 item의 &quot;item&quot;으로 설정하였습니다. foreach태그 맨 앞과 끝은 &quot;(&quot;, &quot;)&quot;이며, 반복될때마다 &quot;,&quot;를 붙이게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 배열의 길이가 2인 list의 배열이라고 가정한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603521752307&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT COLUMN1, COLUMN2
  FROM TABLE
 WHERE COLUMN1 in (#{item[0]}, #{item[1]})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위와 같은 결과를 출력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마치며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 foreach문에 대해 자세히 알아보려했는데, 글이 너무 길어질 것 같아 따로 포스팅을 하기로 결정했습니다. 개인적으로 위의 태그 중 foreach와 trim을 좀 까다로워했었고, 단순한 SQL문이라면 모를까, 조금 복잡해지기라도 저처럼 숙련도가 없는 사람들은 오랜시간 고민을 해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다행히도 주관적으로 mybatis는 직관적인 언어라고 생각해서 그런지 그 구조가 복잡한거라고는 생각하지 않지만, 다음 foreach태그를 중점적으로 포스팅 할 때에는 혼자 고민했었던 사례를 예시로 어떻게 풀어나갔는지 적어보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;코드로 배우는 스프링 웹 프로젝트(이병승) &lt;a href=&quot;http://www.yes24.com/Product/Goods/64340061&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.yes24.com/Product/Goods/64340061&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://java119.tistory.com/85&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java119.tistory.com/85&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://kim0404.tistory.com/19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;kim0404.tistory.com/19&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://java119.tistory.com/103&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;java119.tistory.com/103&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/Spring</category>
      <category>choose</category>
      <category>foreach</category>
      <category>If</category>
      <category>mybatis</category>
      <category>otherwise</category>
      <category>trim</category>
      <category>when</category>
      <category>동적태그</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/104</guid>
      <comments>https://nancording.tistory.com/104#entry104comment</comments>
      <pubDate>Mon, 21 Sep 2020 20:29:26 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript event.preventDefault()</title>
      <link>https://nancording.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;최근 조원들과 최종 프로젝트를 하면서, jsp파일에서 클릭을 했을 때 바로 컨트롤러로 넘어가지 않고, 유효성 검사를 마친 후 넘어가도록 설정하고싶었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;html에서 a태그나 button(submit타입)태그를 클릭하면 페이지가 이동하거나 새로고침이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 페이지가 이동하거나 새로고침이 되는 동작을 막고싶은 경우 javascript의 preventDefault를 사용하면 이를 해결할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;prefentDefault()를 사용하여 제가 생각한 로직을 정리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;button 태그 클릭 -&amp;gt; event.preventDefault()를 통해 잠시 이벤트를 막음 -&amp;gt; form태그 안의 내용의 유효검사 실시 -&amp;gt; return 혹은 form.submit()&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이를 통해 예시를 들어 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603435122182&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;값을 입력하세요&amp;lt;/h1&amp;gt;
    &amp;lt;form id=&quot;frm&quot; type=&quot;post&quot; action=&quot;test&quot;&amp;gt;
        &amp;lt;input type=&quot;text&quot; id=&quot;value&quot; name=&quot;text&quot;&amp;gt;
        &amp;lt;input type=&quot;submit&quot; id=&quot;btn&quot; value=&quot;button&quot;&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
    $(&quot;#btn&quot;).on(&quot;click&quot;, function(e){
        e.preventDefault();
        var frm = $(&quot;#frm&quot;);
        var text = $(&quot;#value&quot;).val();

        if(text == '') {
            alert(&quot;값을 입력해주세요.&quot;);
            return;
        } else {
            $(&quot;#value&quot;).val(&quot;&quot;);
            alert(&quot;입력한 값은 &quot;+text+&quot;입니다.&quot;);
            frm.submit();
        } 
    })
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;body태그의 form태그가 있습니다. form태그에는 두개의 input태그가 있는데, 이는 text타입 하나, submit타입 하나입니다. 입력칸에 값을 입력하면 입력한 값을 경고창에 표시하고나서 submit이 되고, 만약 값이 없다면 값을 입력하라는 경고창과 함께 submit이 되지 않게 설정했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 출력결과와 함께 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dShXLo/btqLyKTtTxb/2114KDyc0aOzOkWROdPRaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dShXLo/btqLyKTtTxb/2114KDyc0aOzOkWROdPRaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dShXLo/btqLyKTtTxb/2114KDyc0aOzOkWROdPRaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdShXLo%2FbtqLyKTtTxb%2F2114KDyc0aOzOkWROdPRaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;body태그의 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ATsUX/btqLA3q1Rgj/8KH4KCUnlvKEDBlrJ9NBNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ATsUX/btqLA3q1Rgj/8KH4KCUnlvKEDBlrJ9NBNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ATsUX/btqLA3q1Rgj/8KH4KCUnlvKEDBlrJ9NBNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FATsUX%2FbtqLA3q1Rgj%2F8KH4KCUnlvKEDBlrJ9NBNK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;빈 값을 입력했을 때의 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번에는 'hello'라는 문구와 함께 버튼을 클릭하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDhyte/btqLzGcdMfy/n0RNh8oHgkRpvZFE8BnkrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDhyte/btqLzGcdMfy/n0RNh8oHgkRpvZFE8BnkrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDhyte/btqLzGcdMfy/n0RNh8oHgkRpvZFE8BnkrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDhyte%2FbtqLzGcdMfy%2Fn0RNh8oHgkRpvZFE8BnkrK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;입력한 값을 나타내는 경고창과함께 확인 버튼을 클릭하면 submit이 되어 페이지가 이동하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://programming119.tistory.com/100&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;programming119.tistory.com/100&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/JavaScript</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/103</guid>
      <comments>https://nancording.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 17 Sep 2020 00:45:42 +0900</pubDate>
    </item>
    <item>
      <title>HTML data 속성</title>
      <link>https://nancording.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. data-* 속성이란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;data-* 속성은 사용자 지정 데이터 특성(custom data attributes)이라는 특성 클래스를 형성함으로써 임의의 데이터를 스크립트로 HTML과 DOM 사이에서 교환할 수 있는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 사용자 지정 데이터는 해당데이터를 지정한 요소의 HTMLElement 인터페이스, dataset 속성을 통해 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2.data-* 특징&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;dataset을 통하여 값을 가져갈 때 속성에 접근하는 방법은 data 속성의 data- 부분을 뺀 뒷부분만 사용하며 사용하는 부분의 첫번째 영단어는 소문자로, 두번째는 단어의 첫글자는 대문자로 표기합니다.(camelCase로 변환하기 때문입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다시 말하자면, dataset은 자바스크립트이기 때문에 속성명을 camelCase로 변환합니다. 예를들어 data-create-date라면 , dataset 안에는 createDate로 저장됩니다. 반대로 dataset.monthSalary라고 했다면, data-month-salary가 되는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 입력방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;- 예제(Example)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600270501076&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;button type=&quot;button&quot; id=&quot;btn&quot; data-code-id=&quot;1234&quot; data-type=&quot;b&quot;&amp;gt;버튼&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;버튼태그를 입력했습니다. 여기서 data-code-id 와 data-type에 대해 어떻게 변수에 저장할지 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;1) JavaScript&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600270583019&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var codeId = document.getElementById(&quot;btn&quot;).dataset.codeId;
var type = document.getElementById(&quot;btn&quot;).dataset.type;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트는 getElementById를 이용하여 dataset의 값을 변수에 담았습니다. 여기서 위의 태그에 data를 빼고, camelCase로 변환한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp;2) jQuery&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600270728639&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var codeId = $(&quot;#btn&quot;).data(&quot;codeId&quot;);
var type = $(&quot;#btn&quot;).data(&quot;type&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;jQuery에서는 button태그의 id속성을 이용하여 data()의 값을 변수에 담았습니다. JavaScript와 같이 camelCase로 변환한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/HTML/Global_attributes/data-*&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.mozilla.org/ko/docs/Web/HTML/Global_attributes/data-*&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.zerocho.com/category/HTML&amp;amp;DOM/post/5a76d1eaabd090001b981ba6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.zerocho.com/category/HTML&amp;amp;DOM/post/5a76d1eaabd090001b981ba6&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://bman-note.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;bman-note.tistory.com/7&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/HTML</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/102</guid>
      <comments>https://nancording.tistory.com/102#entry102comment</comments>
      <pubDate>Wed, 16 Sep 2020 10:34:20 +0900</pubDate>
    </item>
    <item>
      <title>처음 배우는 사람에게 있어 다회독의 중요성</title>
      <link>https://nancording.tistory.com/101</link>
      <description>&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;이번 포스팅은 지극히 주관적인 생각입니다.&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;지극히 개인적인 생각이지만 일반적으로 교육용 서적은 1 회독으로 그 책의 내용을 모두 이해할 수 있다고 생각하지 않는다. 반드시 최소 2 회독은 해야 그나마 책의 저자가 의도하는 바의 의미를 알게 된다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참 신기하다. 첫 회독 때 무언가 알 것 같기도 하지만 며칠 지나면 금세 잊고 만다. 하지만 2 회독부터는 책의 앞 내용을 예측하면서 점차 머릿속에 흐릿하고 연결되지 않은 개념들을 선명하게 이어주는 듯한 이미지를 연상케 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다회 독은 곧 반복이다. 반복은 중요하다. 머리가 남들과 다르게 비상하여 한 번만 보고도 모든 것을 이해하거나 기억을 한다면 이에 해당하지 않겠지만, 보통 사람들과 같이 금방 잊고, 몇 번에 걸쳐야 이해할 수 있는 정도라면 반복은 매우 중요하다. 그렇다면 다회 독은 읽는 사람으로 하여금 노력한 시간에 대한 보상을 줄 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;한 권의 책 다독하기 vs 한 권씩 여러 권 읽기&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 이 문제는 정말 많은 생각을 하게 만든다. 다회 독을 중요시하는 나 조차도 절반 정도는 한 번 보고 마는 정도니 말이다. '답은 난센스다.'라고 말하고 싶지만, 굳이 하나를 뽑자면 한 권의 책 다독하기를 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한 번 읽고 마는 책들은 원래 알고 있던 내용에서 뭔가 부가적인 내용을 더하거나, 개인적인 노하우를 알려주는 책들이다. 혹은 나의 입장에서 교양 정도로 이해할 수 있는 정도의 부류의 책이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;하지만, 지금 내가 몸 담고 있는 IT업계의 프로그래밍 서적에서 매우 기초의 개념부터 시작하는 내용의 두꺼운 책이라면 반드시 다독을 하려는 마음으로 책을 구매한다.&lt;/span&gt;&lt;/i&gt; 그 이유에 대해서 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;책의 저자는 책을 쓰는 순간부터 결말을 알고 있다.&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보통 작가는 책을 쓰는 순간 결말, 또는 줄거리를 어느 정도 생각하고 책을 쓴다. 이는 처음에 목차를 정해두고 그 목차에 맞게 책을 써 내려간다. 그리고 그 내용들은 책의 문맥에 맞게 이상한 길로 새 나가지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 독자는 다르다. 특히나 처음 배우는 독자들은 목차에 대해 어느 정도 흐름을 잡고 가더라도 그 책을 따라 공부하다 보면 결국 당장 눈앞에 내용을 공부하는데 바쁜 사람들이다. 설령 본인의 페이스에 잘 맞춰 나가더라도 첫 회독에서의 이해는 그 뒤의 내용을 알고 있는 책의 저자만큼 이해하기에는 책의 저자가 생각하는 이해에는 미치지 못할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;인과관계는 내가 어떤 입장이냐에 따라 그에 대한 이해가 다르다.&lt;/span&gt;&lt;/i&gt; 그 뒤의 내용을 모를 때의 이해도 이해가 맞다. 하지만 뒤의 내용을 알고 나서의 이해는 그 이해의 깊이가 다르다. 그런 이유에서 공부하는 입장에서, 특히 개념을 다룬 책을 읽을 때는 최소 두 번이라도 읽으려는 이유가 이 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;에빙하우스의 망각곡선&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1200px-ForgettingCurve.svg.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1027&quot; width=&quot;580&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HvAd1/btqJ4GpR85w/K2f3Ey9HF2TK6DCLZXs75K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HvAd1/btqJ4GpR85w/K2f3Ey9HF2TK6DCLZXs75K/img.png&quot; data-alt=&quot;에빙하우스의 망각곡선&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HvAd1/btqJ4GpR85w/K2f3Ey9HF2TK6DCLZXs75K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHvAd1%2FbtqJ4GpR85w%2FK2f3Ey9HF2TK6DCLZXs75K%2Fimg.png&quot; data-filename=&quot;1200px-ForgettingCurve.svg.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1027&quot; width=&quot;580&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;에빙하우스의 망각곡선&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;독일의 심리학자 헤르 밍 에빙하우스는 새로운 정보를 기억하려는 시도가 없을 때 기억에 얼마나 남아 있는지에 대해 망각곡선을 통해 보여준다. 망각곡선의 그래프는 며칠, 몇 주에 걸쳐 새로운 정보를 의식적으로 복습했을 때의 기억력이 상승하는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;에빙하우스의 망각곡선을 통해서도 같은 내용을 복습(반복)하는 것이 어떠한 이점을 주는지에 대해 확인할 수 있다. 그러므로 현재 본인에게 있어 중요한 개념을 공부해야 하는 책이 있다면 반복을 통해 개념을 익히면 그 반복된 학습을 통해 얻게 된 개념을 어떻게 사용할지에 대해 보다 명확하게 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;마치며,&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;u&gt;'&lt;span style=&quot;background-color: #dddddd;&quot;&gt;한 권으로 다회 독을 하는 것이 1 회독으로 여러 권을 읽는 것보다 더 효율이 있을까?'에 대한 나의 물음은 '자신에게 있어 정말 중요한 내용을 다루는 것이라 생각하면 적어도 나는 그게 좋다고 생각한다.'라는 답을 내려주고 싶다.&lt;/span&gt;&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;나에게 있어 다회 독은 정말 지루하지만 그만큼 얻는 것이 분명히 있다. 어쩌다가 이 글을 읽는 독자분들에게 추천하고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/개발일기</category>
      <category>반복의 중요성</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/101</guid>
      <comments>https://nancording.tistory.com/101#entry101comment</comments>
      <pubDate>Wed, 16 Sep 2020 00:20:07 +0900</pubDate>
    </item>
    <item>
      <title>Java Lambda 반복문 출력</title>
      <link>https://nancording.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;요즘들어 스프링을 공부하다보면 람다식이 가끔 나올 때가 있었습니다. 처음에는 람다식인줄도 모르고 무작정 따라치기만 했었는데, 나중에 람다인 것을 알게 되고나서도 그저 따라치기만 했었습니다. 그러다가 코드리뷰를 하면서 조금 복잡해지기 시작하면 보통 람다에서 많이 막히는 일이 빈번히 일어나게되어 어느정도 정리가 필요할 것 같아 포스팅을 하기로 마음먹었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 포스팅에선 람다의 개념과, 컬렉션 프레임워크에서 어떻게 배열들을 처리하는지에 대해 알아보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 람다란?&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;JDK 1.8버전에 새로 추가가 된 람다(Lambda)는 메서드를 하나의 식(expression)으로 표현한 것 입니다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명 함수(anonymous function)'이라고도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 람다식 작성방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;평소 알고있는 메서드 작성방법입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1600147920224&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int max(int a, int b) {
	return a &amp;gt; b ? a : b;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위의 메서드를 람다식으로 변환한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600147964542&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(int a, int b) -&amp;gt; {return a &amp;gt; b ? a : b;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 변환을 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 반환값이(return)이 있는 경우, return문 대신 식으로 대신할 수 있습니다. 식의 연산결과가 자동적으로 반환값이 되는데, 이때는 문장이 아닌 식이므로 끝에 세미콜론(' ; ')을 붙이지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600148066462&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(int a, int b) -&amp;gt; a &amp;gt; b ? a : b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 반환값을 생략한 채로 람다식을 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 매개변수의 타입을 생략할 수 있습니다. 그 이유는 리턴문을 생략하는 이유와 같은데, 추론이 가능하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600149907871&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(a, b) -&amp;gt; a &amp;gt; b ? a : b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위처럼 간단하게 식을 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 컬렉션 프레임워크 에서의 람다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컬렉션 프레임워크 인터페이스에 디폴트 메서드가 추가되었는데, 그 중 함수형 인터페이스를 사용하고있습니다. 그 중 일부를 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 15.2326%; text-align: center; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인터페이스&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 13.4883%; text-align: center; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;메서드&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 71.2791%; text-align: center; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설명&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 15.2326%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Collection&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 13.4883%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;removeIf&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 71.2791%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;조건에 맞는 요소를 삭제&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 15.2326%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Iterable&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 13.4883%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;forEach&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 71.2791%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 요소에 작업을 수행&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 15.2326%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;List&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 13.4883%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;replaceAll&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 71.2791%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 요소를 변환하여 대체&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 15.2326%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Map&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 13.4883%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;forEach&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 71.2791%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모든 요소에 작업을 수행&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음은 예제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600150372206&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class Lambda4 {
	public static void main(String[] args) {
		ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
		for(int i = 0; i &amp;lt; 10; i++) {
			list.add(i);
		}
		
		//list의 모든 요소를 출력
		list.forEach(i -&amp;gt; System.out.print(i + &quot;,&quot;));
		System.out.println();
		
		//list에서 2 또는 3의 배수를 제거한다.
		list.removeIf(x -&amp;gt; x%2 == 0 || x % 3 == 0);
		System.out.println(list);
		
		list.replaceAll(i -&amp;gt; i * 10);
		System.out.println(list);
		
		Map&amp;lt;String, String&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
		map.put(&quot;1&quot;, &quot;1&quot;);
		map.put(&quot;2&quot;, &quot;2&quot;);
		map.put(&quot;3&quot;, &quot;3&quot;);
		map.put(&quot;4&quot;, &quot;4&quot;);
		
		// map의 모든 요소를 {k, v}의 형식으로 출력한다.
		map.forEach((k,v) -&amp;gt; System.out.print(&quot;{&quot; + k + &quot;,&quot; + v + &quot;},&quot;));
		System.out.println();
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;처음 변수 list를 선언하고, for문을 이용하여 list에 0부터 9까지의 수를 배열로 담았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;list.forEach를 통해 0~9를 출력하되, String타입의 문자열 &quot;,&quot;를 중간에 삽입하여 출력하였고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;boolean 타입의 removeIf 메서드를 호출하여 2 또는 3의 배수를 배열에서 제거한 후 출력했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막으로 Map 형태의 key와 value를 삽입한 변수 map에서 forEach를 통해 key와 value를 설정하여 출력하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;밑은 출력결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dw1Kpv/btqISpWA1ev/Yh688SRTl0oT90kQnKsbrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dw1Kpv/btqISpWA1ev/Yh688SRTl0oT90kQnKsbrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dw1Kpv/btqISpWA1ev/Yh688SRTl0oT90kQnKsbrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdw1Kpv%2FbtqISpWA1ev%2FYh688SRTl0oT90kQnKsbrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참고자료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바의 정석(남궁성 저) &lt;a href=&quot;https://book.naver.com/bookdb/book_detail.nhn?bid=10191151&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;book.naver.com/bookdb/book_detail.nhn?bid=10191151&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/Java</category>
      <category>collection framework</category>
      <category>foreach</category>
      <category>Java</category>
      <category>Lambda</category>
      <category>removeif</category>
      <author>모두와 함께</author>
      <guid isPermaLink="true">https://nancording.tistory.com/100</guid>
      <comments>https://nancording.tistory.com/100#entry100comment</comments>
      <pubDate>Sat, 12 Sep 2020 22:45:58 +0900</pubDate>
    </item>
  </channel>
</rss>