<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ho___ni.log</title>
        <link>https://velog.io/</link>
        <description>호니의 개발 공부</description>
        <lastBuildDate>Mon, 17 Jul 2023 14:36:44 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ho___ni.log</title>
            <url>https://velog.velcdn.com/images/ho___ni/profile/6ef3ee23-1662-47d0-b44a-6d11ec9931ba/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ho___ni.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ho___ni" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[React] Vite 설치법]]></title>
            <link>https://velog.io/@ho___ni/React-Vite-%EC%84%A4%EC%B9%98%EB%B2%95</link>
            <guid>https://velog.io/@ho___ni/React-Vite-%EC%84%A4%EC%B9%98%EB%B2%95</guid>
            <pubDate>Mon, 17 Jul 2023 14:36:44 GMT</pubDate>
            <description><![CDATA[<h3 id="자꾸-헷갈리는-리액트-세팅">자꾸 헷갈리는 리액트 세팅</h3>
<pre><code>/* -------- 설치 -------- */

npm create vite // vite 만들기

likelion-hook // project 이름 입력

javascript // 사용 언어 선택

/* ------ 설치 완료 ------ */

cd likelion-hook // 프로젝트 파일로 이동
code . // project 파일 새로운 창에서 열기
npm i // npm install 약자
npm run dev // 실행

/* ------ 설치 후 수정시 ------ */
npm run dev // 실행</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[React] Hooks이란? Hooks 종류]]></title>
            <link>https://velog.io/@ho___ni/React-Hooks%EC%9D%B4%EB%9E%80-Hooks-%EC%A2%85%EB%A5%98</link>
            <guid>https://velog.io/@ho___ni/React-Hooks%EC%9D%B4%EB%9E%80-Hooks-%EC%A2%85%EB%A5%98</guid>
            <pubDate>Tue, 11 Jul 2023 09:54:45 GMT</pubDate>
            <description><![CDATA[<h2 id="hooks란">Hooks란?</h2>
<blockquote>
<p>React 에서 기존에 사용하던 Class를 이용한 코드를 작성할 필요 없이, state와, 여러 React 기능을 사용할 수 있도록 만든 라이브러리</p>
</blockquote>
<p>hook은 class 안에서는 동작하지 않고, class 없이 react 사용이 가능하게 해준다.</p>
<h2 id="hooks의-종류">Hooks의 종류?</h2>
<h3 id="1-usestate">1) useState</h3>
<p>현재 state 값을 업데이트하는 함수를 반환
원형</p>
<pre><code>const [state, setState] = useState(initialState);</code></pre><h3 id="2-useeffect">2) useEffect</h3>
<p>리액트 컴포넌트가 렌더링 될 때마다, 즉 DOM이 렌더링 된 이후에 작업을 실행할 수 있도록 명시함
-&gt; 컴포넌트 렌더링 - 화면 업데이트 - useEffect 실행
=&gt; 생명주기의 메소드 기능을 수행</p>
<pre><code>useEffect(콜백함수, 의존성배열)</code></pre><p>첫 번째 인자: 콜백함수
-&gt; 컴포넌트가 마운트되거나 업데이트 될 때마다 실행되는 함수, 콜백 함수 내부에서 원하는 작업 수행 가능
두 번째 인자: 의존성 배열
-&gt; 배열에 포함된 값은 콜백 함수가 실행되는 조건을 지정, 즉 배열에 포함된 값들 중 하나라도 변경되면 콜백 함수 실행</p>
<h4 id="여기서-콜백함수란">여기서 콜백함수란?</h4>
<p>간단하게 말해 다른 함수가 실행을 끝낸 뒤 실행되는 함수를 말한다.
그리고, 함수를 만들 때, parameter를 함수로 받아서 쓸 수 있는데 그 함수는 callback!</p>
<h3 id="3-usecontext">3) useContext</h3>
<p>context =&gt; 일반적인 리액트에서 데이터는 props를 통해서 부모에서 자식에게 전달함
어플리케이션 안의 여러 컴포넌트들에게 props를 전달해줘야 하는 경우 context 이용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[var, let, const의 차이점과 상황에 맞게 쓰는 법]]></title>
            <link>https://velog.io/@ho___ni/var-let-const%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EA%B3%BC-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EA%B2%8C-%EC%93%B0%EB%8A%94-%EB%B2%95</link>
            <guid>https://velog.io/@ho___ni/var-let-const%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EA%B3%BC-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EA%B2%8C-%EC%93%B0%EB%8A%94-%EB%B2%95</guid>
            <pubDate>Mon, 03 Jul 2023 07:51:59 GMT</pubDate>
            <description><![CDATA[<p>var과 let, const 모두 javascript에서 사용하는 변수이다!</p>
<h2 id="1-var">1. var</h2>
<ol>
<li>중복 선언이 가능하다.</li>
<li>함수 내에서 선언된 변수는 함수 내에서만 유효하고, 함수 내에서는 블록 내외부에 관계없이 유효 (함수 외부에서 참조 불가)</li>
</ol>
<h3 id="함수-외부에서-참조-불가-예시">함수 외부에서 참조 불가 예시</h3>
<pre><code>function function(){
  if(true){
   var a = 1;
   console.log(a); //1
  }
 console.log(a);
}

function(); //1
console.log(a);//ReferenceError: a is not defined</code></pre><h2 id="2-let">2. let</h2>
<ol>
<li>중복 선언은 불가능하지만 재할당은 가능하다.</li>
<li>함수, if절 외 for, while 등 모든 코드 블록 내부에서 선언된 변수 코드 블록 내부에서만 유효 (블록 외부부터 참조 불가)</li>
</ol>
<h2 id="3-const">3. const</h2>
<pre><code>상수를 의미함.</code></pre><p>그렇기에, 중복 선언이 불가능하고, 재할당도 불가능하다.
2. 함수, if절 외 for, while 등 모든 코드 블록 내부에서 선언된 변수 코드 블록 내부에서만 유효 (블록 외부부터 참조 불가)</p>
<h3 id="중복-선언-재할당-불가-예시">중복 선언, 재할당 불가 예시</h3>
<pre><code>const food = &#39;cookies&#39;;
console.log(food); // cookies

const food = &#39;chicken&#39;;
console.log(food); 
//Uncaught SyntaxError: Identifier &#39;title&#39; has already been declared

food = &#39;pizza&#39;;
console.log(food);
//Uncaught TypeError: Assignment to constant variable</code></pre><h2 id="4-그래서-언제-무엇을-쓰면-좋을까">4. 그래서 언제 무엇을 쓰면 좋을까?</h2>
<p>재할당이 필요없는 상수과 객체에는 기본적으로 const를 사용하는 것이 좋다.
재할당이 필요한 경우 한정적으로 let을 사용하는 것이 좋다. 단, 이 때 변수의 스코프는 최대한 좁게 만드는 것이 좋다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[왜 변수를 그대로 쓰지 않고 useState로 써야 할까?]]></title>
            <link>https://velog.io/@ho___ni/%EC%99%9C-%EB%B3%80%EC%88%98%EB%A5%BC-%EA%B7%B8%EB%8C%80%EB%A1%9C-%EC%93%B0%EC%A7%80-%EC%95%8A%EA%B3%A0-useState%EB%A1%9C-%EC%8D%A8%EC%95%BC-%ED%95%A0%EA%B9%8C</link>
            <guid>https://velog.io/@ho___ni/%EC%99%9C-%EB%B3%80%EC%88%98%EB%A5%BC-%EA%B7%B8%EB%8C%80%EB%A1%9C-%EC%93%B0%EC%A7%80-%EC%95%8A%EA%B3%A0-useState%EB%A1%9C-%EC%8D%A8%EC%95%BC-%ED%95%A0%EA%B9%8C</guid>
            <pubDate>Sun, 02 Jul 2023 10:00:20 GMT</pubDate>
            <description><![CDATA[<p>먼저, useState()는 REACT hooks 중 하나로 컴포넌트에서 바뀌는 값을 관리하는 함수이다.</p>
<p>리액트 컴포넌트에서 동적인 값을 상태(state)라고 부르는데,
사용자 인터랙션을 통해 컴포넌트의 상태값이 동적으로 바뀔 경우에 상태 관리가 필요하다.</p>
<p>직접 state를 수정하면 리액트는 render 함수를 호출하지 않아서 렌더링이 일어나지 않게 되고, setState를 호출하여 state를 변경하면 리액트 엔진이 render 함수를 이용해서 렌더링을 실행하게 된다.</p>
<p>예제를 살펴보자면,</p>
<h3 id="일반-변수를-사용한-경우">일반 변수를 사용한 경우</h3>
<pre><code>import React from &#39;react&#39;;

const Counter = () =&gt; {
  let count = 0;

  const increment = () =&gt; {
    count += 1; // 변수를 직접 변경
    console.log(&#39;Current count:&#39;, count);
  };

  return (
    &lt;div&gt;
      &lt;h1&gt;Counter&lt;/h1&gt;
      &lt;button onClick={increment}&gt;Increment&lt;/button&gt;
    &lt;/div&gt;
  );
};

export default Counter;</code></pre><h3 id="usestate를-사용한-경우">useState()를 사용한 경우</h3>
<pre><code>import React, { useState } from &#39;react&#39;;

const Counter = () =&gt; {
  const [count, setCount] = useState(0); // useState로 상태와 상태 변경 함수를 정의

  const increment = () =&gt; {
    setCount(count + 1); // 상태 변경 함수를 사용하여 상태를 업데이트
    console.log(&#39;Current count:&#39;, count);
  };

  return (
    &lt;div&gt;
      &lt;h1&gt;Counter&lt;/h1&gt;
      &lt;button onClick={increment}&gt;Increment&lt;/button&gt;
    &lt;/div&gt;
  );
};

export default Counter;
</code></pre><p>변수를 그대로 사용하면 변수 count를 그대로 사용하여 클릭할 때마다 값을 1씩 증가시키고 콘솔에 출력하게 된다.
하지만 이렇게 하면 상태의 불변성을 유지하지 못하는데, 컴포넌트의 상태를 변경할 때 React는 상태의 불변성을 유지하면서 새로운 상태로 업데이트 해야 한다.</p>
<p>그러나, useState를 사용하여 count라는 상태와 그 상태를 변경할 수 있는 setCount라는 상태 변경 함수를 정의하게 되면, React는 새로운 상태로 컴포넌트를 다시 렌더링하며, 상태의 불변성을 유지할 수 있다.</p>
<p>사실 이유를 찾아보며 궁금한 것이 있었다. </p>
<h3 id="도대체-왜-불변성을-유지해야-할까">도대체 왜 불변성을 유지해야 할까?</h3>
<p>state 가 변하면 생기면 html도 자동으로 재렌더링을 한다는 점을 알면 좋을 것 같다.</p>
<ol>
<li>효율적인 업데이트 감지
React는 Virtual DOM을 사용하여 UI 업데이트를 처리한다. 이를 위해 React는 이전 상태와 현재 상태를 비교하여 변경된 부분만을 실제 DOM에 업데이트하는데, 상태의 불변성을 유지하면 상태가 변경된 부분을 정확하게 감지할 수 있으므로 React는 필요한 최소한의 DOM 변경만 수행할 수 있다. 불필요한 리렌더링을 방지하는 역할!</li>
</ol>
<ol start="2">
<li>예측 가능한 상태 변화
상태의 불변성을 유지하면 상태가 언제, 어디서, 어떻게 변경되는지를 명확하게 추적할 수 있다. 상태가 불변하면 상태의 변경을 추적하기 쉽고, 디버깅 및 테스트를 단순화할 수 있다. 결론적으로, 상태의 불변성을 유지하면 예측 가능한 상태 변화를 유지할 수 있어 애플리케이션의 유지 보수성과 신뢰성을 향상시킬 수 있다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[JS-DOM 총정리]]></title>
            <link>https://velog.io/@ho___ni/JS-DOM-%EC%B4%9D%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@ho___ni/JS-DOM-%EC%B4%9D%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 09 Jun 2023 12:13:27 GMT</pubDate>
            <description><![CDATA[<h2 id="dom이란-무엇인가">DOM이란 무엇인가?</h2>
<p>Document Object Model = 문서 객체 모델로 HTML 요소에 접근하고자 할 때 사용하며 HTML 요소를 JS 객체처럼 조작할 수 있게 해준다. HTML 요소의 속성, 스타일(CSS) 등을 조작할 수 있게 해주기도 한다.
<strong>=&gt; 근데 사실 뭔 소린지 잘 모르겠으면 버튼, p 태그, h1 태그 등 뭐든 하나하나가 다 DOM이다 이 소리..</strong></p>
<blockquote>
<pre><code>DOM을 다루기 위해서는  무엇을 가장 먼저 해야할까?</code></pre></blockquote>
<pre><code>
내가 원하는 HTML 요소를 선택해야 내가 원하는 조작을 할 수 있을 것이다.


그래서 HTML 요소를 선택하는 방법에는
&gt; - getElementByTagName() : 태그 이름으로
- getElementById() : 태그 id값으로
- getElementsByClassName() : 태그 클래스 이름으로
- querySelector() : 태그의 종류, id값, 클래스 이름으로 하나만
- querySelectorAll() : 태그의 종류, id값 클래스 이름으로 여러 개

가 있다. 

=&gt; 위의 괄호에는 **형식 지정자**를 넣으면 된다.
=&gt; 참고로, querySelector에서는 괄호 안 들어갈 값이 CSS의 selector와 같다.
=&gt; 잘 선택됐는지나 선택한 정보를 보고 싶다면,** console.log**를 통해서 확인할 수 있다.


그런데, 브라우저 자체나 문서 전체를 선택하고 싶을 때가 있지 않을까?

&lt;br&gt;
&lt;br&gt;

## 브라우저 자체나 문서 전체를 선택할 땐?

Window 객체(브라우저 창)이나 Document 객체(브라우저 창의 HTML 문서 객체)를 선택하면 된다.

모든 객체는 사실 window 객체에 소속되어 있고, Document 객체는 브라우저 창의 HTML 문서 객체이기 때문에 웹 브라우저에서는 HTMLDocument 객체를 선택하면 크게 다른 것은 없다.



그럼 이제 선택은 완료되었고, 선택한 객체를 핸들링 하는 방법은 무엇이 있고 어떻게 하면 될까?

&lt;br&gt;

## Element 핸들링으로 할 수 있는 것

&gt; 1. 기존의 존재하는 Element 핸들링
    1) 속성 변경하기
    2) 텍스트 변경하기
    3) 스타일 변경하기_
2. 새로운 Element 만들기


이번에는 각각의 핸들링을 하는 방법에 대해 알아보고자 한다.

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

# 1. 기존에 존재하는 Element 핸들링


## 1) 속성 변경 (많이 쓰진 않음)
-&gt; HTML 요소의 속성값을 추가, 확인, 제거
### (1) 속성값 추가 : 타깃요소.setAttribute(attribute, value)
### (2) 속성값 확인 : 타깃요소.getAttribute(attribute)
### (3) 속성값 제거 : 타깃요소.removeAttribute(attribute)

사용 예시 : 이미지 태그에 들어간 사진을 바꾸고 싶다!
const el = document.getElementById(&quot;title-img&quot;) -&gt; 객체 선택
el.setAttribute(&#39;src&#39;, b.jpg&#39;);

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

## 2) 텍스트 변경
-&gt; 텍스트를 추가하거나 변경
### (1) textContent : 선택한 요소에서 순수한 텍스트 데이터의 값
### (2) innerText : textContent와 비슷 (CSS에 종속적이라서 hidden 시에 읽지 못함)
### (3) innerHTML : 선택한 요소의 HTML 태그를 그대로 제공 (보안에 취약)

사용 예시 : 멋쟁이 사자처럼 11기를 멋쟁이 사자처럼 10기로 바꾸고 싶다!
document.querySelector(&#39;바꾸고자 하는 태그 id값&#39;).textContent = &quot;멋쟁이 사자처럼 10기&quot;;
id값이 아니라 class 명이라면!
document.querySelector(&#39;바꾸고자 하는 태그 class명&#39;).textContent = &quot;멋쟁이 사자처럼 10기&quot;;

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

## 3) 스타일 변경
### (1) style 속성 변경 : document.getElementById(&#39;box1&#39;).setAttribute(&#39;style&#39;,&#39;background-color:yellow&#39;);
=&gt; 다음과 같이 setAttribute()를 활용하여 변경할 수 있음! (그러나 잘 쓰지 않는 것 같음....)



### (2) style 객체 변경 :
style 속성 대신 요소의 style 객체의 속성값들을 변경하는 형식
document.getElementById(&#39;box1&#39;).style.backgroundColor = &#39;yellow&#39;;



### (3) 클래스 지정 :
별도의 디자인 클래스를 지정해 놓고 해당 요소의 class 속성을 지정하는 형식

사용 예시
[HTML] : &lt;div id=&quot;box1&quot;&gt;안녕&lt;/div&gt;
[CSS] : .green { color : green; }
의 코드에서 .green의 스타일을 box1에 적용하는 방법

document.getElementById(&#39;box1&#39;).classList.add = &#39;green&#39;;
을 적용해주면 안녕이 초록색이 되는 것을 볼 수 있음!

#### 그렇다면 클래스 지정은 어떻게 할 수 있을까?

&gt; - 이름 : 요소.className
- 이름들 : 요소.classList
- 추가 : 요소.classList.add(클래스 이름)
- 삭제 : 요소.classList.remove(클래스 이름)
- 변경 : 요소.classList.replace(클래스 이름)
- 토글 : 요소.classList.toggle(클래스 이름)

&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

## 2. 새로운 Element 만들기
새로운 Element를 만드는 방법은 많이 쓰는 방법은 아니지만 알아두면 쓸 곳은 있을 것 같다.

### 1) 새로운 Element 생성
document.createElement(생성요소)
### 2) 추가
부모요소.appendChild(자식요소)
</code></pre><p>예시
// element 생성
const p1 = document.createElement(&#39;p&#39;)</p>
<p>// 생성한 element에 컨텐츠 넣기
p1.textContent = &quot;안녕&quot;</p>
<p>// element에 추가할 부모 요소
const parent = document.getElementById(&quot;parent&quot;);</p>
<p>// element를 부모 요소의 자식 요소로 추가
// 이미 다른 element가 존재할 경우 마지막 자식 요소를 추가
parent.appendChild(p1)</p>
<p>```</p>
<p>지금까지 배운 것은 페이지 로딩 시에 일어나기 때문에 내가 원하는 조건에서 실행되기 어렵다.
그래서 특정 Event가 발생할 때 변경될 수 있도록 하는 방법은 무엇일지 뒤에 설명할 것이다.</p>
<br>
<br>
<br>

<h1 id="addeventlistener">addEventListener()</h1>
<p>이벤트를 핸들링하는 도구</p>
<h4 id="이벤트-프로그래밍-하는-시스템에서-일어나는-사건-혹은-발생">이벤트: 프로그래밍 하는 시스템에서 일어나는 사건 혹은 발생</h4>
<p>응답은 addEventListener로 수행하는 것</p>
<h3 id="객체addeventlistener이벤트-타입-이벤트-발생-시에-수행-함수">객체.addEventListener(이벤트 타입, 이벤트 발생 시에 수행 함수)</h3>
<p>-&gt; 객체 : 화면에 있는 객체(querySelector로 지정하는 것, 지정 객체 말고도 window, document도 가능)
-&gt; 이벤트 타입 : 지정된 객체에서 어떤 이벤트 발생에 관심을 둘 것인지 설정 (click, scroll, change 등 다양한 이벤트 종류 있음)
-&gt; 이벤트 발생 시에 수행 함수 : 이벤트가 발생했을 때 작동시킬 함수 형태</p>
<blockquote>
<p>이벤트 타입의 종류</p>
</blockquote>
<ul>
<li>click : 마우스 버튼을 클릭하고 버튼에서 손가락을 떼면 발생</li>
<li>mouseover : 마우스를 HTML 요소 위에 올리면 발생</li>
<li>mouseout : 마우스가 HTML 요소 밖으로 벗어날 때 발생</li>
<li>mousedown : 클릭을 하기 위해 마우스 버튼을 누르고 아직 떼기 전인 그 순간, HTML 요소를 드래그 할 때 사용</li>
<li>mouseseup : 마우스 버튼을 떼는 그 순간, 드래그한 HTML 요소를 어딘가에 놓을 때 사용</li>
<li>mousemove : 마우스가 움직일 때마다 발생 (마우스 커서의 현재 위치를 계속 기록하는 것에 사용)</li>
<li>focus : HTML 요소에 포커스가 갔을 때 발생</li>
<li>blur : HTML 요소가 포커스에서 벗어났을 때 발생</li>
<li>keypress : 키를 누르는 순간에 발생하고 키를 누르고 있는 동안 계속해서 발생</li>
<li>keydown / keyup : 키를 누를 때 발생 / 키를 눌렀다가 떼는 순간에 발생</li>
<li>load : 웹페이지에서 사용할 모든 파일의 다운로드가 완료되었을 때 발생</li>
<li>resize : 브라우저 창의 크기를 조절할 때 발생</li>
<li>scroll : 스크롤바를 드래그하거나 키보드(up, down)를 사용하거나 마우스 휠을 사용해서 웹페이지를 스크롤 할 때 발생</li>
<li>unload : 링크를 클릭해서 다른 페이지로 이동하거나 브라우저 탭을 닫을 때 브라우저 창을 닫을 때 이벤트가 발생</li>
<li>change : 폼 필드의 상태가 변경되었을 때 발생 (input 태그에 내용이 바뀌면 발생)</li>
</ul>
<br>
<br>
<br>
<br>
<hr>

<p>드디어 JS DOM 정리가 끝났다 ...!
열심히 계산기 과제 해야지... ㅎㅎㅎ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Mac/Window] VSCode 들여쓰기 한 번에 정리하는 법]]></title>
            <link>https://velog.io/@ho___ni/MacWindow-VSCode-%EB%93%A4%EC%97%AC%EC%93%B0%EA%B8%B0-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%A0%95%EB%A6%AC%ED%95%98%EB%8A%94-%EB%B2%95</link>
            <guid>https://velog.io/@ho___ni/MacWindow-VSCode-%EB%93%A4%EC%97%AC%EC%93%B0%EA%B8%B0-%ED%95%9C-%EB%B2%88%EC%97%90-%EC%A0%95%EB%A6%AC%ED%95%98%EB%8A%94-%EB%B2%95</guid>
            <pubDate>Fri, 09 Jun 2023 04:22:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>1. 들여쓰기 정렬이 필요한 부분 드래그</strong>
<strong>2. Ctrl(맥은 command) + K, Ctrl(맥은 command) + F를 차례대로 눌러준다.</strong></p>
</blockquote>
<p>들여쓰기 끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] <ul><li> 리스트 점 없애기]]></title>
            <link>https://velog.io/@ho___ni/CSS-ulli-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A0%90-%EC%97%86%EC%95%A0%EA%B8%B0</link>
            <guid>https://velog.io/@ho___ni/CSS-ulli-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A0%90-%EC%97%86%EC%95%A0%EA%B8%B0</guid>
            <pubDate>Sun, 28 May 2023 13:35:37 GMT</pubDate>
            <description><![CDATA[<h2 id="css로-점-없애는-방법">CSS로 점 없애는 방법</h2>
<pre><code>HTML에 사용한 class명 {
    list-style-type: none; //또는
    list-style: none;
}</code></pre><p>두 가지 방법 사용 가능하다!</p>
<p>매우 간단하지만 쉽게 까먹을 수 있는 <ul><li> 리스트 점 없애는 방법!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JS로 만 나이 계산기 만들기]]></title>
            <link>https://velog.io/@ho___ni/JS%EB%A1%9C-%EB%A7%8C-%EB%82%98%EC%9D%B4-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@ho___ni/JS%EB%A1%9C-%EB%A7%8C-%EB%82%98%EC%9D%B4-%EA%B3%84%EC%82%B0%EA%B8%B0-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Mon, 22 May 2023 05:43:10 GMT</pubDate>
            <description><![CDATA[<p>챕터 15의 내용은 JS로 만 나이 계산기를 만드는 내용이었다.</p>
<h3 id="챕터-15-만-나이-계산기-js-코드">챕터 15 만 나이 계산기 js 코드</h3>
<pre><code>let el = document.getElementById(&#39;birthday&#39;);
let elResult = document.getElementById(&#39;result&#39;);
let elSubmit = document.getElementById(&#39;submit&#39;);

// 괄호 안 쓰면 오늘
const today = new Date();

function calculateAge() {
    let birthDate = new Date(el.value);

    let age;

    if (today.getMonth() &gt; birthDate.getMonth() || 
        (to
```day.getMonth() == birthDate.getMonth) &amp;&amp;
        (today.getDate() &gt;= birthDate.getDate()
        )
    ) {
        age = today.getFullYear() - birthDate.getFullYear();
    } else {
        age = today.getFullYear() - birthDate.getFullYear()-1;
    }

    elResult.innerText = `귀하의 만 나이는 ${age}세 입니다.`


    return age;
}

elSubmit.addEventListener(&#39;click&#39;, calculateAge);

</code></pre><h3 id="챕터-16-내용-요약">챕터 16 내용 요약</h3>
<p>변수, 자료형, 연산자, 문자열, 배열, 조건문, 반복문, 에러 처리, 함수, Dom을 지금까지 배웠음. 
지금까지 배운 것을 바닐라 자바스크립트라고 함. 외부 라이브러리 이런 것도 사용해 보고 jquery 이런 것도 활용해 보면 좋을 듯. 뷰나 리액트를 배워보는 것도 좋음!**</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[JS Dom - 이벤트]]></title>
            <link>https://velog.io/@ho___ni/JS-Dom-%EC%9D%B4%EB%B2%A4%ED%8A%B8</link>
            <guid>https://velog.io/@ho___ni/JS-Dom-%EC%9D%B4%EB%B2%A4%ED%8A%B8</guid>
            <pubDate>Mon, 22 May 2023 05:11:48 GMT</pubDate>
            <description><![CDATA[<pre><code>onclick=&quot;alert(&#39;click&#39;);</code></pre><p>-&gt; 이벤트의 예시!</p>
<h2 id="이벤트의-종류-on이벤트-타입">이벤트의 종류 (on+이벤트 타입)</h2>
<h3 id="폼-이벤트">폼 이벤트</h3>
<h4 id="사용자가-제출하는-이벤트-초기화하는-이벤트">사용자가 제출하는 이벤트, 초기화하는 이벤트</h4>
<h3 id="마우스-이벤트">마우스 이벤트</h3>
<h4 id="클릭-더블클릭-마우스-이동">클릭, 더블클릭, 마우스 이동</h4>
<h3 id="키보드-이벤트">키보드 이벤트</h3>
<h4 id="keydown-keypress-keyup떨어질-때">keydown, keypress, keyup(떨어질 때)</h4>
<h2 id="이벤트-핸들러-등록">이벤트 핸들러 등록</h2>
<pre><code>var el = document.getElementById(&#39;brand-title&#39;);

var myfunc = function () {
    alert(&#39;addEventListener&#39;);
};

el.addEventListener(&quot;click&quot;, myfunc);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[JS Dom - Dom]]></title>
            <link>https://velog.io/@ho___ni/JS-Dom-Dom</link>
            <guid>https://velog.io/@ho___ni/JS-Dom-Dom</guid>
            <pubDate>Mon, 22 May 2023 04:56:09 GMT</pubDate>
            <description><![CDATA[<h3 id="documentgetelementbyid">document.getElementById</h3>
<pre><code>var el = document.getElementById(&quot;brand-title&quot;);</code></pre><p>-&gt; 아이디를 통해 요소를 가져오겠다.</p>
<pre><code>console.log(el.innerHTML);</code></pre><p>-&gt; HTML 태그만 제거</p>
<pre><code>console.log(el.innerText);</code></pre><p>-&gt; Text 자체만 출력</p>
<pre><code>el.innerText = &quot;안녕하세요 :);</code></pre><h3 id="documentgetelementbyclassname">document.getElementByClassName</h3>
<pre><code>var el2 = document.getElementByClassName(&#39;sub-title&#39;);</code></pre><p>class 값을 갖는 것 가져올 것 
<strong>(여러 개도 가능)</strong></p>
<pre><code>console.log(el2);</code></pre>]]></description>
        </item>
    </channel>
</rss>