<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yellowgreenblue</title>
    <link>https://hu-coding.tistory.com/</link>
    <description>개발공부기록장</description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 16:08:59 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ygreenb</managingEditor>
    <image>
      <title>yellowgreenblue</title>
      <url>https://tistory1.daumcdn.net/tistory/3519686/attach/3394a5a61bb74d3fa432c58018aef4c0</url>
      <link>https://hu-coding.tistory.com</link>
    </image>
    <item>
      <title>[DB] 데이터 삽입과 수정(insert() vs save() vs update())</title>
      <link>https://hu-coding.tistory.com/153</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;DB 메소드 차이 정리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create, Update API를 구현하다 보면 빈번히 &lt;code&gt;insert()&lt;/code&gt;와 &lt;code&gt;update()&lt;/code&gt;, &lt;code&gt;save()&lt;/code&gt; 함수를 사용하게 된다. 정형화된 템플릿처럼 메소드를 사용해왔는데, 정확히 db에서 어떤식으로 작동하는지에 대해서 알고있지 않았던 것 같아 정리해보기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;insert()&lt;/code&gt;와 &lt;code&gt;update()&lt;/code&gt;는 명확하다. 하지만 문제는 &lt;code&gt;save()&lt;/code&gt; 인데, 이 함수는 삽입에도 수정에도 사용해서 더 헷갈림을 유발했던 것같다. 그래서 삽입 시 &lt;code&gt;insert()&lt;/code&gt;와 수정 시 &lt;code&gt;update()&lt;/code&gt;를 각각 &lt;code&gt;save()&lt;/code&gt;와의 동작방식을 비교해 차이점을 적어보았다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;삽입 시 insert()&lt;span&gt;와&lt;span&gt; &lt;/span&gt;&lt;/span&gt;save()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert : id가 동일한 값을 저장하려 한다면 오류 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;save: id가 동일해도 저장한다(수정한다) 기존에 저장된 데이터 위에 덮어쓴다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;수정 시 &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;update()와&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;save()&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;update : 특정 필드만 수정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;save : 필드단위로 수정되지 않고 데이터를 덮어쓰므로 이전데이터는 사라진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 예시를 들어보면 그 차이는 명확하다. 만약 하기와 같이 id, name, content 라는 컬럼을 가진 데이터가 있다고 하자.&lt;/p&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;id&quot; : 1,
  &quot;name&quot; : &quot;test&quot;,
  &quot;content&quot; : &quot;기존내용&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 name 컬럼의 내용만을 수정해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, &lt;code&gt;update(1, { &quot;name&quot; : &quot;update&quot; })&lt;/code&gt; 를 한다면 결과는 하기와 같다.&lt;/p&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;id&quot; : 1,
  &quot;name&quot; : &quot;update&quot;,
  &quot;content&quot; : &quot;기존내용&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 데이터는 그대로 남아있고, 수정된 내용의 name만 업데이트가 됨을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, &lt;code&gt;save({&quot;id&quot;:1, &quot;name&quot; : &quot;save&quot; })&lt;/code&gt; 를 한다면 결과는 하기와 같다.&lt;/p&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;id&quot; : 1,
  &quot;name&quot; : &quot;save&quot;,
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 데이터는 사라지고, 수정하려고 넣은 데이터로 덮어쓰워짐을 확인할 수 있다.&lt;/p&gt;</description>
      <category>Database</category>
      <category>Database</category>
      <category>DB</category>
      <category>MYSQL</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/153</guid>
      <comments>https://hu-coding.tistory.com/153#entry153comment</comments>
      <pubDate>Mon, 5 Sep 2022 12:09:13 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 문자열 비교 ==, equals() 차이점</title>
      <link>https://hu-coding.tistory.com/152</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 알고리즘을 푸는 도중, String 변수를 무심코 == 연산자를 사용해 비교해 동작하지 않았던 경험이 있다. 물론 equals() 함수를 사용하니 잘 동작했는데, 그동안 이 둘의 차이가 뭔지 정확히 이해하고 있지 않았던 것 같아서 정리하려고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java에서는 int와 boolean과 같은 일반적인 데이터 타입의 비교는 == 연산자를 사용해서 비교한다. 하지만 String같이 Class의 값을 비교할 때는 == 가 아닌 equals()라는 메소드를 사용하여 비교를 해야한다. 이 둘의 차이는 뭘까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;String&amp;nbsp; 변수 생성 시 주소할당&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;String 변수를 생성할 때는 두가지 방법이 있다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;리터럴을 이용한 방식&lt;/li&gt;
&lt;li&gt;new 연산자를 이용한 방식&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 가지 방식에는 큰 차이점이 있는데, &lt;b&gt;리터럴&lt;/b&gt;을 사용하게 되면 &lt;b&gt;string constant pool이라는 영역에 존재&lt;/b&gt;하게 되고, &lt;b&gt;new&lt;/b&gt;를 통해 String을 생성하면 &lt;b&gt;Heap 영역에 존재&lt;/b&gt;하게 된다.&lt;br /&gt;String을 리터럴로 선언한 경우, 내부적으로 String의 intern() 메서드가 호출되게 되고, 주어진 문자열이 string constant pool에 존재하는지 검색, 존재한다면 그 주소값을 반환하고 없다면 string constant pool에 넣고 새로운 주소값을 반환한다&lt;/p&gt;
&lt;pre id=&quot;code_1662191777551&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String str1 = &quot;apple&quot;; //리터럴을 이용한 방식
String str2 = &quot;apple&quot;; //리터럴을 이용한 방식
String str3 = new String(&quot;example&quot;); //new 연산자를 이용한 방식
String str4 = new String(&quot;example&quot;); //new 연산자를 이용한 방식&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z8Mab/btrLjjl7own/J8ovcz2827IBodDTI5pQM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z8Mab/btrLjjl7own/J8ovcz2827IBodDTI5pQM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z8Mab/btrLjjl7own/J8ovcz2827IBodDTI5pQM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8Mab%2FbtrLjjl7own%2FJ8ovcz2827IBodDTI5pQM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;376&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주소값 비교(==)와 값 비교(equals)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==연산자와 equals()메소드의 가장 큰 차이점은 아래와 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 76.1628%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.6744%;&quot;&gt;== 연산자&lt;/td&gt;
&lt;td style=&quot;width: 53.4884%;&quot;&gt;비교하고자 하는 두개의 대상의 &lt;b&gt;주소값&lt;/b&gt;을 비교&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.6744%;&quot;&gt;equals() 연산자&lt;/td&gt;
&lt;td style=&quot;width: 53.4884%;&quot;&gt;비교하고자 하는 두개의 대상의 &lt;b&gt;값 자체&lt;/b&gt;를 비교&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 타입의 int형, char형등은 Call by Value 형태로 기본적으로 대상에 주소값을 가지지 않는 형태로 사용되지만 &lt;b&gt;String은 일반적인 타입이 아니라 클래스&lt;/b&gt;이다. 클래스는 기본적으로 Call by Reference형태로 생성 시 주소값이 부여되기 때문에 String 타입을 선언했을때는 같은 값을 부여하더라도 서로 간의 주소값이 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문자열 비교&lt;/h2&gt;
&lt;pre id=&quot;code_1662192386059&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class compare {
    public static void main(String[] args) {
        String s1 = &quot;abcd&quot;;
        String s2 = new String(&quot;abcd&quot;);
		
        if(s1 == s2) {
            System.out.println(&quot;== 연산자 =&amp;gt; 두 개의 값 같음&quot;);
        }else {
            System.out.println(&quot;== 연산자 =&amp;gt; 두 개의 값 같지 않음&quot;);
        }
        
        if(s1.equals(s2)) {
             System.out.println(&quot;equals() 연산자 =&amp;gt; 두 개의 값 같음&quot;);
        }else {
            System.out.println(&quot;equals() 연산자 =&amp;gt; 두 개의 값 같지 않음&quot;);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 결과는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1662192496849&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// == 연산자 =&amp;gt; 두 개의 값 같지 않음
// equals() 연산자 =&amp;gt; 두 개의 값 같음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>java</category>
      <category>String.equals()</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/152</guid>
      <comments>https://hu-coding.tistory.com/152#entry152comment</comments>
      <pubDate>Sat, 3 Sep 2022 17:08:29 +0900</pubDate>
    </item>
    <item>
      <title>[Java] int와 Integer의 차이</title>
      <link>https://hu-coding.tistory.com/150</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. int vs Integer&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;int (primitive type, 원시형 타입)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int는 변수의 타입(data type, 자료형)이다.&lt;br /&gt;자료형은 &amp;lsquo;data의 type에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것&amp;rsquo; 이다. &lt;br /&gt;자료형은 &lt;u&gt;기본형(primitive type)&lt;/u&gt;가 &lt;u&gt;참조형(referece type)&lt;/u&gt;으로 나뉨&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Integer (wrapper class, 래퍼 클래스)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매개변수로 객체를 필요로 할 때&lt;/li&gt;
&lt;li&gt;기본형 값이 아닌 객체로 저장해야할 때&lt;/li&gt;
&lt;li&gt;객체 간 비교가 필요할 때&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 경우, 기본형을 객체 다루기 위해 사용하는 클래스들을 래퍼 클래스라고 함.&lt;br /&gt;Integer은 int의 래퍼 클래스 라고 할 수 있음.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;int vs Integer&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.0698%;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;int : 자료형(primitive type)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 65.9302%;&quot;&gt;산술 연산 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65.9302%;&quot;&gt;null로 초기화 불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.0698%;&quot; rowspan=&quot;3&quot;&gt;&lt;b&gt;Integer : 래퍼 클래스(Wrapper class)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 65.9302%;&quot;&gt;Unboxing 하지 않을 시 산술 연산 불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65.9302%;&quot;&gt;null 값 처리 가능 &amp;rarr; SQL과 연동할 경우 처리가 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 65.9302%;&quot;&gt;DB에서 자료형이 정수형이지만, null값이 필요한 경우, VO에서 Integer을 사용할 수 있음.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. int와 Integer 간의 변환&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Boxing과 Unboxing&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.2558%;&quot;&gt;Boxing&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 81.7442%;&quot;&gt;primitive type &amp;rarr; wrapper class 변환 (int to Integer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.2558%;&quot;&gt;Unboxing&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 81.7442%;&quot;&gt;wrapper type &amp;rarr; primitive type 변환 (Integer to int)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;// to int i from Integer ii
int i = ii.intValue();

//to Integer ii from int i
Integer ii = new Integer(i);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;valueOf()와 parseInt()의 차이&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.465%;&quot;&gt;Integer.valueOf(String)&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 74.535%;&quot;&gt;Integer 클래스를 리턴하기 떄문에 산술 연산 불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.465%;&quot;&gt;Integer.parseInt(String)&lt;/td&gt;
&lt;td style=&quot;width: 74.535%;&quot;&gt;int 형을 리턴하기 때문에 산술 연산 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*정수로 파싱할 수 없는 String을 파라미터로 전달하면 에러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Auto boxing/ unboxing&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 모든 경우는 아니지만 대부분의 경우 자동으로 boxing/unboxing을 해줌&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;int i = 1;
Integer integer = i; // int to Integer (Auto boxing)
int i2 = integer; // Integer to int (Auto unboxing)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@hadoyaji/int와-Integer는-무엇이-다른가&quot;&gt;https://velog.io/@hadoyaji/int와-Integer는-무엇이-다른가&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://includestdio.tistory.com/1&quot;&gt;https://includestdio.tistory.com/1&lt;/a&gt;&lt;/p&gt;</description>
      <category>JAVA</category>
      <category>int</category>
      <category>Integer</category>
      <category>java</category>
      <category>primary type</category>
      <category>Wrapper</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/150</guid>
      <comments>https://hu-coding.tistory.com/150#entry150comment</comments>
      <pubDate>Fri, 2 Sep 2022 10:41:54 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 원격 저장소 연결 및 끊기 원격브랜치 갱신, 조회, 삭제</title>
      <link>https://hu-coding.tistory.com/149</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;협업을 하다보면 로컬 저장소(local repository)와 구분되게 원격 저장소(remote repository)를 연결해야 할 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 연결되어 있는 원격 저장소(remote repository) 확인&lt;/p&gt;
&lt;pre id=&quot;code_1655281522633&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소 연결&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1655281545176&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote add &amp;lt;원격remote이름&amp;gt; &amp;lt;git주소&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 저장소 연결 끊기&lt;/p&gt;
&lt;pre id=&quot;code_1655281563837&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote remove &amp;lt;원격remote이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 브랜치 갱신 ( 원격 저장소에 있는 브랜치들을 가져온다.)&lt;/p&gt;
&lt;pre id=&quot;code_1655281581126&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 브랜치 조회&lt;/p&gt;
&lt;pre id=&quot;code_1655281606289&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git branch -r&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 브랜치 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1655281607232&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git push &amp;lt;원격remote이름&amp;gt; --delete &amp;lt;브랜치이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제된 연격 브래니를 원격 저장소에 반영하기&lt;/p&gt;
&lt;pre id=&quot;code_1655281611198&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git remote prune &amp;lt;원격remote이름&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Git</category>
      <category>git</category>
      <category>원격 브랜치</category>
      <category>원격 저장소</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/149</guid>
      <comments>https://hu-coding.tistory.com/149#entry149comment</comments>
      <pubDate>Wed, 15 Jun 2022 17:28:42 +0900</pubDate>
    </item>
    <item>
      <title>[Node.js] express를 backend로 하는 Create-react-app</title>
      <link>https://hu-coding.tistory.com/146</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 개발환경 세팅&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 프로젝트에서 Node.js에서 많이 사용하는 프레임워크인 Express로 백엔드를 구성하고 Create-react-app으로 프론트를 구성해보려고 한다. 이번 포스팅에서는 Express 앱을 만들고 react앱과 서버를 연결해주려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 전체 폴더 안에 back와 front폴더를 각각 나눠주고, back 폴더에는 express, front폴더에는 react 앱을 세팅해준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Express Generate 로 express 앱 만들기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Express-generator는 Express 환경을 간단하게 구축해주는 npm이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 사용하면 쉽게 Node.js 개발을 할수 있다는 장점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;express-generator를 설치해서 Express App을 만든다. 설치는 아래와 같다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ npm install -g express-generator
# or:  yarn global add express-generator&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 express app을 만들어준다. (폴더이름을 back로 지정함) 아래와 같이 입력하면 backend라는 폴더가 만들어지고, 폴더 안에 express가 생성된다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot;&gt;&lt;code&gt;$ express back
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;express-generator 명령으로 바로 만들고싶다면 아래와 같이 입력하는 방법도 있다.&lt;/li&gt;
&lt;li&gt;npx express-generator back&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 해당 경로로 들어가서 npm install을 하고 npm start로 앱을 실행시킨다.&lt;/p&gt;
&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;$ cd back
$ npm install   # or yarn
$ npm start
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에서 &lt;a href=&quot;http://localhost:3000/&quot;&gt;http://localhost:3000/&lt;/a&gt; 로 이동하면 앱이 잘 작동되는것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Create-reate-app 생성하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로 포스팅을 정리해 놓은 적이 있으니 &lt;a href=&quot;https://hu-coding.tistory.com/95?category=1002833&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여길&lt;/a&gt; 참고하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;app을 생성할 때 폴더 이름을 front로 주었다.&lt;/p&gt;
&lt;pre id=&quot;code_1653120006878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ create-react-app client&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. Express API에서 새 경로 주기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 React-creat-app에서 만들어준 서버 역시 포트번호가 3000번이어서, 처음에 만든 express 서버와 경로가 겹친다. 나중에 두 앱을 동시에 실행시켜야하므로 이를 위해 서버의 포트번호를 바꿔주도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bin폴더의 www파일에서 변경한다. 포트번호는 뭐든 상관없다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;var port = normalizePort(process.env.PORT || '3001');
app.set('port', port);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 앱을 실행할 떄마다 터미널에 아래의 명령어를 사용해준다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;$ PORT=3001 node bin/www
# window user: set PORT=3001&amp;amp;&amp;amp;node bin/www
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 번거롭다면 package.json의 script의 npm start명령으로 설정해줘도 된다.&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;&quot;scripts&quot;: {
&quot;start&quot;: &quot;set PORT=3001&amp;amp;&amp;amp;nodemon ./bin/www&quot;
},
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;nodemon&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nodemon은 서버의 코드가 바뀔 때마다 자동으로 서버를 재시작해주는 모듈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발환경에서만 사용할 것이므로 devDpendency에 설치하도록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. Express API와 React 클라이언트 연결하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;front 폴더 안의 React app의 package.json 파일의 script 섹션 아래 proxy를 새롭게 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*Proxy : 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;proxy에 적을 포트는 express 서버가 실행되는 포트이다.&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;&quot;scripts&quot;: {
	&quot;start&quot;: &quot;react-scripts start&quot;,
	&quot;build&quot;: &quot;react-scripts build&quot;,
	&quot;test&quot;: &quot;react-scripts test&quot;,
	&quot;eject&quot;: &quot;react-scripts eject&quot;
},
&quot;proxy&quot;: &quot;&amp;lt;http://localhost:3001&amp;gt;&quot;,
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 리액트 앱이 보내는 요청이 proxy에 명시한 server주소를 가리키게된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pakage.json &amp;rArr; &amp;ldquo;proxy&amp;rdquo; : &amp;ldquo;&lt;a href=&quot;http://localhost:3001&quot;&gt;http://localhost:3001&lt;/a&gt;&amp;rdquo; &lt;br /&gt;React App calls &amp;rArr; &lt;a href=&quot;http://localhost:3000/api/users&quot;&gt;http://localhost:3000/api/users&lt;/a&gt; Server call &amp;rArr; &lt;a href=&quot;http://localhost:3001/api/users&quot;&gt;http://localhost:3001/api/users&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : &lt;a href=&quot;https://daveceddia.com/create-react-app-express-backend/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://daveceddia.com/create-react-app-express-backend/&lt;/a&gt;&lt;/p&gt;</description>
      <category>WEB/Node.js</category>
      <category>create-react-app</category>
      <category>Express</category>
      <category>Node.js</category>
      <category>React</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/146</guid>
      <comments>https://hu-coding.tistory.com/146#entry146comment</comments>
      <pubDate>Sat, 21 May 2022 17:01:09 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 프로그래머스 : 문자열을 정수로 바꾸기(feat. String to Int)</title>
      <link>https://hu-coding.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12925&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://programmers.co.kr/learn/courses/30/lessons/12925&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;코딩테스트 연습 - 문자열을 정수로 바꾸기&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12925&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ir8Tv/hyN2ODjHon/QPFq4kaDwrRH5Vq3YOr2L1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/z9jgh/hyN2MZL3JJ/8Lqjyvgcodwk9GxIndv7Qk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12925&quot;&gt;
 &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12925&quot; target=&quot;_blank&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12925&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ir8Tv/hyN2ODjHon/QPFq4kaDwrRH5Vq3YOr2L1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/z9jgh/hyN2MZL3JJ/8Lqjyvgcodwk9GxIndv7Qk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;코딩테스트 연습 - 문자열을 정수로 바꾸기&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;풀이&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Integer.parseInt();&lt;/b&gt;&lt;br&gt;String -&amp;gt; Int 로 형변환을 해주면 한줄로 끝낼 수 있다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;int answer = Integer.parseInt(s);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;br&gt;&lt;b&gt;2. 알고리즘으로 풀기&lt;/b&gt;&lt;br&gt;먼저 맨 앞에 부호가 오는 경우를 고려해야 한다.&lt;br&gt;'-' , 즉 음수가 오는 경우엔 boolean 변수 sign에 false을 준다.&lt;br&gt;부호가 아닌 숫자가 온다면 기존의 answer에 10씩 곱해서 자릿수를 늘려 숫자를 넣어준다.&lt;br&gt;마지막에 sign 즉 부호가 true(양수)이면 그대로, false(음수)이면 -를 곱해서 return 한다.&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;class Solution {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int solution(String s) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolean sign = true; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int answer=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(int i=0; i&amp;lt;s.length();i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char c = s.charAt(i);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(c=='-'){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sign=false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else if(c!='+'){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;answer = answer*10+(c-'0');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sign?answer:-answer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Algorithm &amp;amp; Data Structure/프로그래머스</category>
      <category>integer.parseint()</category>
      <category>string to int</category>
      <category>프로그래머스</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/145</guid>
      <comments>https://hu-coding.tistory.com/145#entry145comment</comments>
      <pubDate>Fri, 15 Apr 2022 07:38:52 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 이벤트(Event)와 이벤트 핸들러(Event Handle)</title>
      <link>https://hu-coding.tistory.com/144</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;이벤트(Event)란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 브라우저가 알려주는 HTML 요소에 대한 사건의 발생 자바스크립트는 발생한 이벤트에 반응하여 특정 동작을 수행할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이벤트 타입&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발생한 이벤트의 종류 (폼, 키보드, 마우스, HTML DOM, Window 객체 등)&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;// 마우스 클릭 이벤트 예시
&amp;lt;p onclick=&quot;changeText(this)&quot;&amp;gt;여길 클릭하세요!&amp;lt;/p&amp;gt;
&amp;lt;script&amp;gt;
		function changeText(element) {
				element.innerHTML = &quot;내용이 바뀌었습니다!&quot;;
		}
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;this : &amp;lt;p&amp;gt; 태그에서 나온 DOM 객체의 자기자신을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이벤트 핸들러&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트가 발생했을 때 그 처리를 담당하는 함수 지정된 이벤트가 발생하면, 웹 브라우저는 그 요소에 등록된 이벤트 핸들러를 실행&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 이 함수는 HTML 문서가 로드될 때 실행됨.
window.onload = function() {

		// 아이디가 &quot;text&quot;인 요소를 선택함.
		var text = document.getElementById(&quot;text&quot;);

		text.innerHTML = &quot;HTML 문서가 로드되었습니다.&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;객체나 요소에 이벤트 핸들러를 등록하는 방법 2가지&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트 코드에서 프로퍼티로 등록하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1649868516641&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.onload = function() { }// 이 함수는 HTML 문서가 로드될 때 실행됨&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2. HTML 태그에 속성으로 등록하는 방법 onclick 속성에 자바스크립트 코드를 적어준다.&lt;/p&gt;
&lt;pre id=&quot;code_1649868527295&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p onclick=&quot;this.innerText = '클릭!'&quot;&amp;gt;클릭해 보세요!&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;addEventListener()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체나 요소의 메서드에 이벤트 핸들러를 전달하는 메서드&lt;/p&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;대상객체.addEventListener(이벤트명, 실행할이벤트핸들러(함수이름), 이벤트전파방식)
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2번째 인자에 함수 이름만을 넣는이유는?&lt;br /&gt;=&amp;gt; 2번째 인자로 함수 &quot;객체&quot;를 받아야 하는데(함수를 가리킴) 만약 clickBtn()(괄호포함)로 준다면 함수가 실행되고, 그 결과를 주게 되므로 실행되지 않는다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;간단하게 버튼을 클릭하면 텍스트가 뜨도록 하는 이벤트를 만들어 본다.&lt;/p&gt;
&lt;pre id=&quot;code_1649868686994&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var elementId = document.getElementById(&quot;id&quot;);

function clickBtn(){
	document.getElementById(&quot;text&quot;).innerHTML = &quot;버튼을 누르면 나오는 텍스트&quot;;
};

elementId.addEventListener(&quot;click&quot;, clickBtn);&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;addEventListener(&amp;rdquo;event&amp;rdquo;, function(){})&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 함수이름을 등록해 addEventListener의 2번째 인자로 줄 수 있고, &lt;br /&gt;인자 안에 바로 함수를 작성해 굳이 함수 이름을 만들어주지 않아도 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1649868819857&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var elementId = document.getElementById(&quot;id&quot;);

elementId.addEventListener(&quot;click&quot;, function(){
	document.getElementById(&quot;text&quot;).innerHTML = &quot;버튼을 누르면 나오는 텍스트&quot;;
};&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/Javascript</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/144</guid>
      <comments>https://hu-coding.tistory.com/144#entry144comment</comments>
      <pubDate>Thu, 14 Apr 2022 01:53:45 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 노드(Node) 객체와 window 객체</title>
      <link>https://hu-coding.tistory.com/143</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;노드(Node)와 노드 트리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드(Node) : HTML DOM 에서 정보를 저장하는 계층적 단위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드 트리 : 노드들의 집합으로 노드 간의 관계를 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서는 HTML DOM을 이용하여 노드트리에 포함된 모든 노드에 접근할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;노드 간의 관계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드 트리의 모든 노드들은 서로 &lt;b&gt;계층적 관계&lt;/b&gt;를 맺고 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;노드의 종류&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문서 노드(document node) : HTML 문서 전체를 나타내는 노드&lt;/li&gt;
&lt;li&gt;요소 노드(element node) : 모든 HTML 요소는 요소 노드로, 속성 노드를 가질 수 있는 유일한 노드&lt;/li&gt;
&lt;li&gt;주석 노드(comment node) : HTML 문서의 모든 주석은 주석 노드&lt;/li&gt;
&lt;li&gt;속성 노드(attribute node) : 모든 HTML 요소의 속성은 속성 노드이며, 요소 노드에 관한 정보를 가진다. 하지만 해당 요소 노드의 자식 노드(child node)에는 포함되지 않는다.&lt;/li&gt;
&lt;li&gt;텍스트 노드(text node) : HTML 문서의 모든 텍스트는 텍스트 노드&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;노드의 값&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노드에 대한 정보는 다음과 같은 프로퍼트를 통해 접근할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nodeName(이름) , nodeValue(값), nodeType(타입)&lt;/p&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;// HTML 문서의 모든 자식 노드 중에서 첫 번째 노드의 이름을 선택
document.childNodes[0].nodeName;
// 아이디가 &quot;heading&quot;인 요소의 첫 번째 자식 노드의 노드값을 선택
document.getElementById(&quot;heading&quot;).firstChild.nodeValue;
// 아이디가 &quot;heading&quot;인 요소의 첫 번째 자식 노드의 타입을 선택
document.getElementById(&quot;heading&quot;).firstChild.nodeType;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;nodeType 프로퍼티 값&lt;/h4&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;childNodes[0].nodeType;  // 자식 노드 중에서 첫 번째 노드의 이름을 선택
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nodeType 프로퍼티 값은 텍스트가 아닌 숫자로 표현된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 HTML 노드별 nodeType 프로퍼티 값&lt;/p&gt;
&lt;pre id=&quot;code_1649868419730&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;요소 노드:1
속성 노드: 2
텍스트 노드: 3
주석 노드: 8
문서 노드: 9&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Window&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Window&lt;/a&gt; 객체&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;window 객체는 웹 브라우저의 창을 가르키며, window 객체를 이용하여 브라우저를 조작 할 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;메서드&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;close()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;현재 창을 닫는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;open(링크, 새 탭 or 현재 탭, 설정)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;새 창을 연다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;setTimeout(함수, 밀리초)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;지정한 초 뒤에 함수를 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;alert(메세지)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;팝업 창 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;scrollTo(옵션)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;옵션에 있는 좌표 값으로 스크롤&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;scrollTo()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 위치로 스크롤&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;window.scrollTo(options): 현재 화면을 options에 해당하는 위치로 이동시키는 메소드&lt;/li&gt;
&lt;li&gt;offsetTop : 선택된 영역의 상단까지의 거리를 절대 좌표로 반환하는 메서드&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;window.scrollTo(0, 1000);
window.scrollTo({
  top: 100,
  left: 100,
	// 부드럽게 올라가는 옵션
  behavior: 'smooth'
});

window.scrollTo({
            'behavior': 'smooth',
            'top':  target.offsetTop
        })

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WEB/Javascript</category>
      <category>Node 객체</category>
      <category>offsetTop</category>
      <category>scrollTo()</category>
      <category>window 객체</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/143</guid>
      <comments>https://hu-coding.tistory.com/143#entry143comment</comments>
      <pubDate>Thu, 14 Apr 2022 01:47:04 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 자바스크립트와 DOM, HTML 요소 메소드</title>
      <link>https://hu-coding.tistory.com/142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;DOM이란&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자바스크립트와 DOM&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h1&gt;01. &lt;b&gt;DOM 이란?&lt;/b&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문서 객체 모델(Document Object Model)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서객체모델(Document Object Model) : 객체지향 모델로써 구조화된 문서를 표현하는 형식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOM은 프로그래밍 언어와 &lt;b&gt;독립적&lt;/b&gt;이다. 주로 자바스크립트를 사용하지만, DOM의 구현은 &lt;b&gt;어떠한 언어에서도 가능&lt;/b&gt;하다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;HTML 문서에 대한 인터페이스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOM은 XML이나 HTML 문서의 프로그래밍 &lt;b&gt;인터페이스&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOM은 문서의 구조화된 표현(structured representation)을 제공하여 프로그래밍 언어가 문서 구조, 스타일, 내용 등을 변경할 수 있도록 함&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOM의 종류&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Core DOM : 모든 문서 타입을 위한 DOM 모델&lt;/li&gt;
&lt;li&gt;HTML DOM : HTML 문서를 위한 DOM 모델. 가장 많이 사용&lt;/li&gt;
&lt;li&gt;HTML 문서를 조작하고 접근하는 표준화된 방법 모든 HTML 요소는 HTML DOM을 통해 접근 가능&lt;/li&gt;
&lt;li&gt;XML DOM : 문서를 위한 DOM 모델&lt;/li&gt;
&lt;li&gt;XML 문서에 접근하여 그 문서를 다루는 표준화된 방법을 정의 모든 XML 요소는 XML DOM을 통해 접근 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Document 객체&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Document 객체는 &lt;b&gt;웹 페이지&lt;/b&gt;를 의미&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹페이지에 존재하는 HTML 요소에 접근하고자 할 떄는 반드시 Document 객체부터 시작해야 함!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Document 메소드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML 요소와 관련된 작업을 도와주는 다양한 메소드 제공&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 요소의 선택&lt;/li&gt;
&lt;li&gt;HTML 요소의 생성&lt;/li&gt;
&lt;li&gt;HTML 이벤트 핸들러 추가&lt;/li&gt;
&lt;li&gt;HTML 객체의 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HTML 요소를 선택&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 HTML 요소를 선택하기 위해 제공되는 메소드&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 110px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;메소드&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;.getElementById()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당&amp;nbsp;아이디의&amp;nbsp;요소를&amp;nbsp;선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;.getElementsByClassName()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;해당&amp;nbsp;클래스에&amp;nbsp;속한&amp;nbsp;요소를&amp;nbsp;모두&amp;nbsp;선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;.getElementsByName()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당&amp;nbsp;name&amp;nbsp;속성값을&amp;nbsp;가지는&amp;nbsp;요소를&amp;nbsp;모두&amp;nbsp;선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;.querySelectorAll()&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당 선택자로 선택되는 요소들을 모두 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;.querySelector()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당&amp;nbsp;선택자로&amp;nbsp;선택되느&amp;nbsp;요소를&amp;nbsp;1개&amp;nbsp;선택&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;myDivClass&quot; id=&quot;myDivId&quot;&amp;gt;Hello&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;document.getElementById(&quot;myDivId&quot;)
document.getElementByClass(&quot;myDivClass&quot;)[0];
document.querySelector(&quot;.myDivClass&quot;) // class
document.querySelector(&quot;#myDivClass&quot;) // id&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;getElementsByClassName 같이 element 뒤에 s가 붙어 복수인 경우, console 창에 target을 찍어보면 Collection 즉, 배열타입으로 받게된다는 것을 알 수 있음. 그렇기 때문에 보통 맨 뒤에 [0]을 붙여 사용한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HTML 요소 생성 삭제(DOM 제어)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 HTML 요소를 생성 및 삭제하기 위해 제공되는 메소드 (&lt;a href=&quot;https://www.w3schools.com/jsreF/dom_obj_all.asp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HTML DOM&lt;/a&gt;)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;메서드/속성&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;appendChild(append할 Element)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;선택한 Element의 자식 Element 마지막에 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;remove()&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;선택된 Element 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;removeChild(삭제할 Element)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;선택된 Element의 자식 Element 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;createElement(만들 Element)&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Element 생성, 그 후 appendChild()로 추가해줘야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;firstChild/lastChild&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;first면 첫번째, last면 마지막 자식 Element 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1649943660296&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function myFunction() {
  let para = document.createElement(&quot;P&quot;);
  para.innerHTML = &quot;이것이 추가될 문장입니다.&quot;;
  document.getElementById(&quot;myDIV&quot;).appendChild(para);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HTML 이벤트 핸들러 추가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML 요소에 이벤트 핸들러를 추가하기 위해 제공되는 속성&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;요소.onclick = function(){} // 마우스 클릭 이벤트와 연결될 이벤트 핸들러
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1649943738863&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[JS] 이벤트(Event)와 이벤트 핸들러(Event Handle)&quot; data-og-description=&quot;이벤트(Event)란? 웹 브라우저가 알려주는 HTML 요소에 대한 사건의 발생 자바스크립트는 발생한 이벤트에 반응하여 특정 동작을 수행할 수 있다. 이벤트 타입 발생한 이벤트의 종류 (폼, 키보드, &quot; data-og-host=&quot;hu-coding.tistory.com&quot; data-og-source-url=&quot;https://hu-coding.tistory.com/144&quot; data-og-url=&quot;https://hu-coding.tistory.com/144&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/byGmOF/hyN2EmUEZP/HMJEk50uUMTtFpilYr5mK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cGjXYD/hyN2GruKrX/DN4q8zyXhfj0psQy1aMJh0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://hu-coding.tistory.com/144&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hu-coding.tistory.com/144&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/byGmOF/hyN2EmUEZP/HMJEk50uUMTtFpilYr5mK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cGjXYD/hyN2GruKrX/DN4q8zyXhfj0psQy1aMJh0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[JS] 이벤트(Event)와 이벤트 핸들러(Event Handle)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이벤트(Event)란? 웹 브라우저가 알려주는 HTML 요소에 대한 사건의 발생 자바스크립트는 발생한 이벤트에 반응하여 특정 동작을 수행할 수 있다. 이벤트 타입 발생한 이벤트의 종류 (폼, 키보드,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hu-coding.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h1&gt;02. 자바스크립트와 DOM&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOM 요소의 선택&lt;/h2&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;// HTML &amp;lt;li&amp;gt; 요소를 선택
var selectedItem = document.getElementsByTagName(&quot;li&quot;);
// 아이디가 &amp;ldquo;id&quot;인 요소를 선택
var selectedItem = document.getElementById(&amp;ldquo;id&quot;);
// 클래스가 &quot;odd&quot;인 모든 요소를 선택
var selectedItem = document.getElementsByClassName(&quot;odd&quot;);
// name 속성값이 &quot;first&quot;인 모든 요소를 선택
var selectedItem = document.getElementsByName(&quot;first&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOM 요소의 스타일 변경&lt;/h2&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;// 아이디가 &quot;even&quot;인 요소를 선택
var selectedItem = document.getElementById(&quot;even&quot;);
// 선택된 요소의 텍스트 색상을 변경
selectedItem.style.color = &quot;red&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOM 요소의 내용 변경&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;textContent&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트만 가져온다&lt;/li&gt;
&lt;li&gt;스타일은 무시한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;innerText&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마크업 언어가 적용된 상태로 읽어온다&lt;/li&gt;
&lt;li&gt;스타일 또한 적용된 상태로 읽기 때문에 display: none; 한 값은 가져오지 못한다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;innerHTML&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 요소를 반환하거나 변경할 수 있다&lt;/li&gt;
&lt;li&gt;XSS 공격에 취약하니 주의&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;openscad&quot;&gt;&lt;code&gt;// 아이디가 &quot;text&quot;인 요소를 선택
var str = document.getElementById(&quot;text&quot;);
// 선택된 요소의 내용을 변경
str.innerHTML = ＂요소의 내용을 바꿉니다&quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>WEB/Javascript</category>
      <category>HTML DOM</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/142</guid>
      <comments>https://hu-coding.tistory.com/142#entry142comment</comments>
      <pubDate>Thu, 14 Apr 2022 01:44:54 +0900</pubDate>
    </item>
    <item>
      <title>[JS] 자바스크립트 배열(array)과 sort(), split() 함수</title>
      <link>https://hu-coding.tistory.com/141</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Array (배열) 선언&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 변수에 여러 값을 저장할 수 있음&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;let array = [1,2,3,4,5]
console.log(array[0])

array.push(6)
console.log(array)

array.length
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Sort (정렬) 함수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 스크립트 배열의 내장 함수 sort()는 배열 안의 원소를 정렬하는 함수이다.&lt;/p&gt;
&lt;h3 id=&quot;arrayobjsortsortfunction&quot; data-ke-size=&quot;size23&quot;&gt;arrayobj.sort(sortFunction)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;arrayobj는 임의의 Array 개체이다. sortFunction는 요소 순서를 결정하는 데 사용되는 함수의 이름이다. 생략하면 오름차순, ASCII 문자 순서로 정렬된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;문자정렬&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1649672917377&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var fruit = ['orange', 'apple', 'banana'];

fruit.sort(); // apple, banana, orange&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;숫자 정렬&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 문자는 정렬이 잘 되지만, 숫자를 정렬하기 위해서는 sortFunction 인수에 함수를 지정해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sortFunction 인수에 함수를 지정하면 아래의 값 중 하나가 반환된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 인수가 두 번째 인수보다 작을 경우 -&lt;/li&gt;
&lt;li&gt;두 인수가 같을 경우 0&lt;/li&gt;
&lt;li&gt;첫 번째 인수가 두 번째 인수보다 클 경우 +&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;var score = [4, 11, 2, 10, 3, 1]; 

score.sort(); // 1, 10, 11, 2, 3, 4 
              // ASCII 문자 순서로 정렬되어 숫자의 크기대로 나오지 않음

/* 인수에 함수 추가 */
score.sort(function(a, b) { // 오름차순
    return a - b;
    // 1, 2, 3, 4, 10, 11
});

score.sort(function(a, b) { // 내림차순
    return b - a;
    // 11, 10, 4, 3, 2, 1
});&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;object 정렬&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1649673152532&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var student = [
    { name : &quot;가&quot;, age : 33},
    { name : &quot;다&quot;, age : 22},
    { name : &quot;나&quot;, age : 11},
    { name : &quot;라&quot;, age : 44}
]

/* 이름순으로 정렬 */
student.sort(function(a, b) { // 오름차순
    return a.name &amp;lt; b.name ? -1 : a.name &amp;gt; b.name ? 1 : 0;
    // 가, 나, 다, 라
});

student.sort(function(a, b) { // 내림차순
    return a.name &amp;gt; b.name ? -1 : a.name &amp;lt; b.name ? 1 : 0;
    // 라, 다, 나, 가
});

/* 나이순으로 정렬 */
var sortingField = &quot;age&quot;;

student.sort(function(a, b) { // 오름차순
    return a[sortingField] - b[sortingField];
    // 11, 22, 33, 44
});

student.sort(function(a, b) { // 내림차순
    return b[sortingField] - a[sortingField];
    // 44, 33, 22, 11
});&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Split&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;split()&lt;/b&gt; 메서드는 &lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;String&lt;/a&gt; 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눈다.&lt;/p&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;const str = 'This is an example.';

const words = str.split(' ');
// 띄어쓰기 기준으로 나눔
console.log(words[3]);
// expected output: &quot;example.&quot;

const chars = str.split('');
// 문자 기준으로 나눔
console.log(chars[8]);
// expected output: &quot;a&quot;

const strCopy = str.split();
// 아무 일도 일어나지 않는다
console.log(strCopy);
// expected output: Array [&quot;This is an example.&quot;]
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>WEB/Javascript</category>
      <category>array</category>
      <category>JavaScript</category>
      <category>sort</category>
      <category>split</category>
      <author>ygreenb</author>
      <guid isPermaLink="true">https://hu-coding.tistory.com/141</guid>
      <comments>https://hu-coding.tistory.com/141#entry141comment</comments>
      <pubDate>Mon, 11 Apr 2022 19:33:30 +0900</pubDate>
    </item>
  </channel>
</rss>