<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sandy_ksh.log</title>
        <link>https://velog.io/</link>
        <description>한양대 학생입니다. 서울캠입니다.</description>
        <lastBuildDate>Sun, 23 Feb 2025 15:29:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sandy_ksh.log</title>
            <url>https://velog.velcdn.com/images/sandy_ksh/profile/6099ac03-8944-4fc0-9543-d93e7ca7461d/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sandy_ksh.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sandy_ksh" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[html와 css 유효성 검사 이유]]></title>
            <link>https://velog.io/@sandy_ksh/html%EC%99%80-css-%EC%9C%A0%ED%9A%A8%EC%84%B1-%EA%B2%80%EC%82%AC-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@sandy_ksh/html%EC%99%80-css-%EC%9C%A0%ED%9A%A8%EC%84%B1-%EA%B2%80%EC%82%AC-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Sun, 23 Feb 2025 15:29:54 GMT</pubDate>
            <description><![CDATA[<p><strong>HTML과 CSS 파일의 유효성 검사를 해야 하는 이유</strong></p>
<ol>
<li><strong>오류 발견:</strong>  <ul>
<li>유효성 검사를 하면 문법 오류나 태그 누락, 잘못된 속성 사용 등 코딩 실수를 쉽게 찾을 수 있어요.</li>
<li>예를 들어, <code>닫는 태그가 빠졌거나 오타가 있을 때</code> 브라우저가 제대로 해석하지 못할 수 있는데, 이런 문제를 미리 찾아서 고칠 수 있어요.</li>
</ul>
</li>
</ol>
<hr>
<ol start="2">
<li><strong>웹 표준 준수:</strong>  <ul>
<li>HTML과 CSS가 W3C 같은 웹 표준을 따르게 되면, 다양한 브라우저와 기기에서 일관되게 페이지가 보여지고 작동해요.</li>
<li>표준을 지키면 유지보수와 협업도 쉬워집니다.</li>
</ul>
</li>
</ol>
<hr>
<ol start="3">
<li><strong>접근성 및 SEO 개선:</strong>  <ul>
<li>올바른 코드 구조는 스크린 리더와 같은 보조 기술이 페이지 내용을 올바르게 읽어줄 수 있게 도와줘요.</li>
<li>검색 엔진도 표준에 맞는 코드를 선호하기 때문에, SEO(검색 엔진 최적화)에도 긍정적인 영향을 줍니다.</li>
</ul>
</li>
</ol>
<hr>
<ol start="4">
<li><strong>유지보수 용이성:</strong>  <ul>
<li>오류 없는, 깔끔한 코드는 나중에 수정하거나 기능을 추가할 때도 쉽고 빠르게 작업할 수 있도록 해줘요.<br>

</li>
</ul>
</li>
</ol>
<blockquote>
<p>이처럼 HTML과 CSS 파일을 유효성 검사를 하면, 
코드를 깔끔하게 유지하고, 
예기치 않은 문제를 예방하며,
사용자와 검색 엔진 모두에게 좋은 웹 페이지를 제공할 수 있습니다 :)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[event 등록 방법]]></title>
            <link>https://velog.io/@sandy_ksh/event-%EB%93%B1%EB%A1%9D-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@sandy_ksh/event-%EB%93%B1%EB%A1%9D-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sun, 23 Feb 2025 15:23:59 GMT</pubDate>
            <description><![CDATA[<p><strong>자바스크립트에서 이벤트를 등록하는 세 가지 방법</strong></p>
<hr>
<h3 id="1-인라인-방식-inline-event-handler">1. 인라인 방식 (Inline Event Handler)</h3>
<p><strong>예시 코드:</strong></p>
<pre><code class="language-html">&lt;!-- HTML 내에 직접 이벤트 핸들러를 작성 --&gt;
&lt;button onclick=&quot;alert(&#39;인라인 방식 이벤트&#39;)&quot;&gt;클릭하세요&lt;/button&gt;</code></pre>
<p><strong>장점:</strong>  </p>
<ul>
<li><strong>간단함:</strong> HTML 태그에 바로 작성하므로 빠르게 이벤트를 설정할 수 있어요.</li>
</ul>
<hr>
<h3 id="2-프로퍼티-리스너-property-listener">2. 프로퍼티 리스너 (Property Listener)</h3>
<p><strong>예시 코드:</strong></p>
<pre><code class="language-html">&lt;!-- HTML --&gt;
&lt;button id=&quot;propBtn&quot;&gt;클릭하세요&lt;/button&gt;</code></pre>
<pre><code class="language-javascript">// JavaScript
const propBtn = document.getElementById(&quot;propBtn&quot;);
propBtn.onclick = function() {
  alert(&quot;프로퍼티 리스너 이벤트&quot;);
};</code></pre>
<p><strong>장점:</strong>  </p>
<ul>
<li><strong>직관적 관리:</strong> 자바스크립트 코드 내에서 요소의 프로퍼티를 사용해 이벤트를 등록할 수 있어요.</li>
</ul>
<hr>
<h3 id="3-이벤트-등록-메서드-addeventlistener">3. 이벤트 등록 메서드 (addEventListener)</h3>
<p><strong>예시 코드:</strong></p>
<pre><code class="language-html">&lt;!-- HTML --&gt;
&lt;button id=&quot;eventBtn&quot;&gt;클릭하세요&lt;/button&gt;</code></pre>
<pre><code class="language-javascript">// JavaScript
const eventBtn = document.getElementById(&quot;eventBtn&quot;);
eventBtn.addEventListener(&quot;click&quot;, function() {  // 보통 on을 빼면 됨. 원래 onclick이었음.
  alert(&quot;addEventListener 이벤트&quot;);
});</code></pre>
<p><strong>장점:</strong>  </p>
<ul>
<li><strong>유연성:</strong> 한 요소에 여러 이벤트 핸들러를 등록할 수 있고, 이벤트 캡처링/버블링 등 다양한 옵션을 제어할 수 있어요.</li>
</ul>
<hr>
<blockquote>
<p>보통 유지보수와 기능 확장 측면에서 <strong>addEventListener</strong> 방식이 많이 사용됩니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[호이스팅 in javascript]]></title>
            <link>https://velog.io/@sandy_ksh/%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-in-javascript</link>
            <guid>https://velog.io/@sandy_ksh/%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-in-javascript</guid>
            <pubDate>Sun, 23 Feb 2025 15:19:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>함수 표현식으로 정의된 함수는 호이스팅에 의해 선언과 할당이 분리되므로
참조하려는 함수가 ~보다 반드시 위에 작성되어야 합니다.</p>
</blockquote>
<p>여기서 ~는 중요한게 아니고. 암튼 먼저 작성되어야 한다는 사실인데</p>
<h2 id="함수-표현식이란">함수 표현식이란?</h2>
<p>함수를 변수에 할당하거나 다른 곳에 전달할 때 사용하는 표현 방식</p>
<ol>
<li><p><strong>익명 함수 표현식 (Anonymous Function Expression)</strong><br>이름 없이 함수를 선언해서 변수에 할당해요.</p>
<pre><code class="language-javascript">var greet = function(name) {
  return &quot;Hello, &quot; + name;
};

console.log(greet(&quot;Alice&quot;)); // 출력: Hello, Alice</code></pre>
</li>
<li><p><strong>이름 있는 함수 표현식 (Named Function Expression)</strong><br>함수에 이름을 붙여서 디버깅이나 재귀 호출 시 유리해요. 단, 외부에서는 이름으로 직접 호출할 수 없고 변수로 접근해야 해요.</p>
<pre><code class="language-javascript">var greet = function sayHello(name) {
  return &quot;Hello, &quot; + name;
};

console.log(greet(&quot;Bob&quot;)); // 출력: Hello, Bob
// sayHello는 함수 내부에서만 사용 가능해요.</code></pre>
</li>
<li><p><strong>화살표 함수 표현식 (Arrow Function Expression)</strong><br>ES6부터 추가된 간결한 문법의 함수 표현식이에요. this를 상위 스코프에서 가져오고, 코드가 짧아지는 장점이 있어요.</p>
<pre><code class="language-javascript">const greet = name =&gt; &quot;Hello, &quot; + name;
console.log(greet(&quot;Charlie&quot;)); // 출력: Hello, Charlie</code></pre>
</li>
<li><p><strong>즉시 실행 함수 표현식 (Immediately Invoked Function Expression, IIFE)</strong><br>함수를 선언하자마자 바로 실행하는 형태예요. 주로 변수의 스코프를 제한할 때 사용됩니다.</p>
<pre><code class="language-javascript">(function() {
  console.log(&quot;즉시 실행 함수가 실행되었습니다!&quot;);
})();</code></pre>
</li>
</ol>
<p>이처럼 함수 표현식은 익명, 이름 있는, 화살표, IIFE 등 여러 종류로 나뉘며, 상황에 맞게 적절한 형태를 선택해서 사용합니다.</p>
<h2 id="선언과-할당부가-분리된다는-건">선언과 할당부가 분리된다는 건?</h2>
<p>함수 표현식을 예로 들면, 함수를 만드는 <strong>두 단계</strong>가 있다는 뜻이에요.</p>
<ol>
<li><p><strong>선언 단계:</strong><br>먼저, 변수 이름을 선언합니다. 이 단계에서는 아직 함수가 들어있지 않아서 변수는 비어 있거나 <code>undefined</code> 상태예요.</p>
</li>
<li><p><strong>할당 단계:</strong><br>나중에 그 변수에 실제 함수(함수의 코드)를 할당합니다. 이때부터 그 변수는 함수로 동작하게 돼요.</p>
</li>
</ol>
<pre><code class="language-javascript">// 1. 변수 선언 단계 (hoisting에 의해 변수는 선언되지만, 값은 아직 없음)
var myFunction;

console.log(myFunction); // 출력: undefined

// 2. 할당 단계: 변수에 함수가 할당됨
myFunction = function() {
  console.log(&quot;안녕하세요!&quot;);
};

myFunction(); // 출력: &quot;안녕하세요!&quot;</code></pre>
<p>이렇게 함수 표현식에서는 <strong>함수를 선언(변수 생성)한 후</strong>에 <strong>함수를 할당</strong>하기 때문에, 선언과 할당이 분리되어 있다고 말해요.</p>
<p><code>반면, 함수 선언문은 한 번에 함수의 이름과 내용을 모두 정의하기 때문에, 선언과 할당이 동시에 이루어집니다.</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<form></form> 내 요소]]></title>
            <link>https://velog.io/@sandy_ksh/formform-%EB%82%B4-%EC%9A%94%EC%86%8C</link>
            <guid>https://velog.io/@sandy_ksh/formform-%EB%82%B4-%EC%9A%94%EC%86%8C</guid>
            <pubDate>Sun, 23 Feb 2025 14:52:57 GMT</pubDate>
            <description><![CDATA[<h2 id="1-form의-목적">1. form의 목적</h2>
<blockquote>
<p><strong>form은</strong> 웹 페이지에서 사용자에게 정보를 입력받기 위해 사용됩니다.<br>  예) 회원가입, 로그인, 설문조사, 검색 등</p>
</blockquote>
<hr>
<h2 id="2-자주-쓰이는-form-요소">2. 자주 쓰이는 form 요소</h2>
<ol>
<li><strong>input</strong>  <ul>
<li>사용자로부터 한 줄의 텍스트, 숫자, 이메일, 비밀번호 등 다양한 데이터를 입력받을 때 사용.</li>
</ul>
</li>
<li><strong>select</strong>  <ul>
<li>드롭다운 목록을 만들어 사용자가 미리 정해진 옵션 중 하나를 선택.</li>
</ul>
</li>
<li><strong>label</strong>  <ul>
<li>폼 요소(input, select 등)에 어떤 내용(설명, 제목)이 들어가는지.<br>label을 클릭하면 연결된 입력 요소로 포커스가 이동해서 편리.</li>
</ul>
</li>
</ol>
<hr>
<h2 id="3-label-input-select의-관계">3. label, input, select의 관계</h2>
<p> <strong>관계:</strong><br>   <strong>label</strong> 태그는 <strong>input</strong>이나 <strong>select</strong> 같은 폼 요소의 설명을 붙여줍니다.  </p>
<blockquote>
<p>label의 <code>for</code> 속성에 폼 요소의 <code>id</code> 값을 지정하면, label과 폼 요소가 연결돼요.
  이렇게 연결하면 label을 클릭할 때 해당 폼 요소에 바로 포커스가 가요.</p>
</blockquote>
<p><strong>예시:</strong> 실제 웹페이지 &quot;프로필 등록&quot; 폼.
라디오 버튼(성별 선택), 체크박스(관심사 선택), 파일 첨부(프로필 사진), 그리고 콤보박스(국가 선택)가 포함</p>
<pre><code class="language-html">&lt;form id=&quot;profileForm&quot;&gt;
  &lt;h2&gt;프로필 등록&lt;/h2&gt;

  &lt;!-- 라디오 버튼: 성별 선택 --&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;성별 선택&lt;/legend&gt;
    &lt;label for=&quot;male&quot;&gt;
      &lt;input type=&quot;radio&quot; id=&quot;male&quot; name=&quot;gender&quot; value=&quot;male&quot;&gt;
      남성
    &lt;/label&gt;
    &lt;label for=&quot;female&quot;&gt;
      &lt;input type=&quot;radio&quot; id=&quot;female&quot; name=&quot;gender&quot; value=&quot;female&quot;&gt;
      여성
    &lt;/label&gt;
  &lt;/fieldset&gt;

  &lt;br&gt;

  &lt;!-- 체크박스: 관심사 선택 --&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;관심사 (여러 개 선택 가능)&lt;/legend&gt;
    &lt;label for=&quot;music&quot;&gt;
      &lt;input type=&quot;checkbox&quot; id=&quot;music&quot; name=&quot;interests&quot; value=&quot;music&quot;&gt;
      음악
    &lt;/label&gt;
    &lt;label for=&quot;sports&quot;&gt;
      &lt;input type=&quot;checkbox&quot; id=&quot;sports&quot; name=&quot;interests&quot; value=&quot;sports&quot;&gt;
      스포츠
    &lt;/label&gt;
    &lt;label for=&quot;movies&quot;&gt;
      &lt;input type=&quot;checkbox&quot; id=&quot;movies&quot; name=&quot;interests&quot; value=&quot;movies&quot;&gt;
      영화
    &lt;/label&gt;
  &lt;/fieldset&gt;

  &lt;br&gt;

  &lt;!-- 파일 첨부: 프로필 사진 --&gt;
  &lt;div&gt;
    &lt;label for=&quot;profilePic&quot;&gt;프로필 사진 첨부:&lt;/label&gt;
    &lt;input type=&quot;file&quot; id=&quot;profilePic&quot; name=&quot;profilePic&quot;&gt;
  &lt;/div&gt;

  &lt;br&gt;

  &lt;!-- 콤보박스: 국가 선택 --&gt;
  &lt;div&gt;
    &lt;label for=&quot;countrySelect&quot;&gt;국가 선택:&lt;/label&gt;
    &lt;select id=&quot;countrySelect&quot; name=&quot;country&quot;&gt;
      &lt;option value=&quot;&quot;&gt;선택하세요&lt;/option&gt;
      &lt;option value=&quot;kr&quot;&gt;대한민국&lt;/option&gt;
      &lt;option value=&quot;us&quot;&gt;미국&lt;/option&gt;
      &lt;option value=&quot;jp&quot;&gt;일본&lt;/option&gt;
    &lt;/select&gt;
  &lt;/div&gt;

  &lt;br&gt;

  &lt;button type=&quot;submit&quot;&gt;제출&lt;/button&gt;
&lt;/form&gt;</code></pre>
<ol>
<li><p><strong>체크박스 (Checkbox):</strong>  </p>
<ul>
<li>여러 관심사를 선택할 수 있도록 합니다.  </li>
<li>예시에서는 &quot;음악&quot;, &quot;스포츠&quot;, &quot;영화&quot; 중 원하는 항목을 여러 개 선택할 수 있어요.</li>
</ul>
</li>
<li><p><strong>라디오 버튼 (Radio):</strong>  </p>
<ul>
<li>성별 같이 단 하나만 선택할 수 있는 옵션에 사용해요.  </li>
<li>같은 <code>name</code> 값을 가진 입력 중 하나만 선택됩니다.</li>
</ul>
</li>
<li><p><strong>파일 첨부 (File):</strong>  </p>
<ul>
<li>사용자가 컴퓨터에서 파일(예: 프로필 사진)을 선택할 수 있게 해줘요.</li>
</ul>
</li>
<li><p><strong>콤보박스 (Select):</strong>  </p>
<ul>
<li>드롭다운 목록을 제공하여 미리 정해진 옵션(국가) 중 하나를 선택할 수 있도록 합니다.</li>
</ul>
</li>
</ol>
<blockquote>
<p>이렇게 form을 구성하면, 사용자가 정보를 쉽게 입력하고 선택할 수 있으며, 
label 덕분에 어떤 정보를 입력해야 하는지 한눈에 알 수 있음!!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[get 메서드 vs. query 메서드]]></title>
            <link>https://velog.io/@sandy_ksh/get-%EB%A9%94%EC%84%9C%EB%93%9C-vs.-query-%EB%A9%94%EC%84%9C%EB%93%9C</link>
            <guid>https://velog.io/@sandy_ksh/get-%EB%A9%94%EC%84%9C%EB%93%9C-vs.-query-%EB%A9%94%EC%84%9C%EB%93%9C</guid>
            <pubDate>Sun, 23 Feb 2025 11:44:13 GMT</pubDate>
            <description><![CDATA[<h2 id="get-메서드">get 메서드</h2>
<ul>
<li>오래전부터 쓰여온 방법으로, 주로 <strong>id</strong>, <strong>class</strong>, <strong>태그 이름</strong> 등 특정 기준으로 요소를 찾을 때 사용해요.</li>
<li><em>예시:*</em>  <ul>
<li><code>document.getElementById(&quot;myId&quot;)</code>: id가 &quot;myId&quot;인 요소 하나를 찾아요.  </li>
<li><code>document.getElementsByClassName(&quot;myClass&quot;)</code>: class가 &quot;myClass&quot;인 모든 요소들을 찾아요.</li>
</ul>
</li>
</ul>
<pre><code class="language-javascript">// id로 요소 찾기
const elementById = document.getElementById(&quot;myId&quot;);
console.log(elementById);

// class로 여러 요소 찾기
const elementsByClass = document.getElementsByClassName(&quot;myClass&quot;);
console.log(elementsByClass);</code></pre>
<hr>
<h2 id="query-메서드">query 메서드</h2>
<ul>
<li>CSS 선택자 문법을 사용하여 요소를 찾는 방법이에요.<br>원하는 조건을 아주 유연하게 조합할 수 있어서, 요즘 많이 쓰여요.</li>
<li><strong>예시:</strong>  <ul>
<li><code>document.querySelector(&quot;#myId&quot;)</code>: id가 &quot;myId&quot;인 첫 번째 요소를 찾아요.  </li>
<li><code>document.querySelectorAll(&quot;.myClass&quot;)</code>: class가 &quot;myClass&quot;인 모든 요소들을 찾아요.</li>
</ul>
</li>
</ul>
<pre><code class="language-javascript">// CSS 선택자로 id로 요소 찾기
const elementByQuery = document.querySelector(&quot;#myId&quot;);
console.log(elementByQuery);

// CSS 선택자로 class로 여러 요소 찾기
const elementsByQuery = document.querySelectorAll(&quot;.myClass&quot;);
console.log(elementsByQuery);</code></pre>
<hr>
<h2 id="뭐가-더-자주-쓰이나요">뭐가 더 자주 쓰이나요?</h2>
<p><strong>query 메서드</strong>  </p>
<ul>
<li>요즘에는 <strong>querySelector</strong>와 <strong>querySelectorAll</strong>이 많이 쓰여요.  </li>
<li>이유는 CSS 선택자 문법을 사용하기 때문에, 복잡한 조건도 쉽게 적용할 수 있어서 편리해요.</li>
</ul>
<p><strong>get 메서드</strong>  </p>
<ul>
<li>단순하게 id나 class, 태그만 정확하게 찾을 때는 여전히 많이 사용돼요.  </li>
<li>특히, <strong>getElementById</strong>는 매우 빠르고 자주 사용됩니다.</li>
</ul>
<blockquote>
<p><strong>query 메서드</strong>가 더 유연해서 최근에는 많이 쓰이지만, 상황에 따라 <strong>get 메서드</strong>도 유용하게 사용.</p>
</blockquote>
<h3 id="여기서-유연이란">여기서 유연이란?</h3>
<p>&quot;유연하다&quot;는 말은 <strong>querySelector</strong>와 <strong>querySelectorAll</strong>을 사용할 때, CSS 선택자 문법을 그대로 활용할 수 있다는 의미. 
이를 통해 여러 조건을 한 번에 결합하여 복잡한 요소 선택 가능.</p>
<p>예,  </p>
<ul>
<li><p><strong>id와 class를 동시에 선택:</strong>  </p>
<pre><code class="language-javascript">document.querySelector(&quot;#myId.myClass&quot;);</code></pre>
<p>위 코드는 id가 &quot;myId&quot;이고, 동시에 class가 &quot;myClass&quot;인 요소를 찾습니다.</p>
</li>
<li><p><strong>특정 속성을 가진 요소 선택:</strong>  </p>
<pre><code class="language-javascript">document.querySelector(&quot;[data-role=&#39;admin&#39;]&quot;);</code></pre>
<p>위 코드는 <code>data-role</code> 속성이 &quot;admin&quot;인 요소를 찾습니다.</p>
</li>
</ul>
<blockquote>
<p>즉, 단순히 id나 class만 찾는 get 메서드보다, 
CSS 선택자처럼 다양한 조건을 조합해서 원하는 요소를 더 세밀하게 선택할 수 있는 
장점이 있어서 &quot;유연하다&quot;고 표현합니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[화살표 함수 ()=>]]></title>
            <link>https://velog.io/@sandy_ksh/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@sandy_ksh/%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98</guid>
            <pubDate>Sun, 23 Feb 2025 08:55:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>화살표 함수는 자바스크립트에서 함수를 더 짧고 간단하게 쓸 수 있도록 도와주는 문법! 
전통적인 함수 표현식보다 코드가 훨씬 깔끔.</p>
</blockquote>
<hr>
<h2 id="구조-비교">구조 비교</h2>
<ul>
<li><strong>전통적인 함수:</strong>  <pre><code class="language-javascript">function add(a, b) {
  return a + b;
}</code></pre>
</li>
<li><strong>화살표 함수:</strong>  <pre><code class="language-javascript">const add = (a, b) =&gt; {
  return a + b;
}</code></pre>
</li>
</ul>
<p>화살표 함수를 사용하면 <code>function</code> 키워드를 쓰지 않고, 대신 <code>=&gt;</code> 기호를 사용해서 함수를 정의할 수 있어요.</p>
<hr>
<h2 id="간단한-문법들">간단한 문법들</h2>
<h3 id="1-리턴문이-한-줄인-경우">1. 리턴문이 한 줄인 경우</h3>
<p>리턴할 내용이 한 줄이면, 중괄호와 <code>return</code> 키워드를 생략할 수 있어요.</p>
<pre><code class="language-javascript">const add = (a, b) =&gt; a + b;
console.log(add(2, 3)); // 출력: 5</code></pre>
<h3 id="2-매개변수가-하나인-경우">2. 매개변수가 하나인 경우</h3>
<p>매개변수가 하나일 때는 괄호를 생략할 수 있어요.</p>
<pre><code class="language-javascript">const square = x =&gt; x * x;
console.log(square(4)); // 출력: 16</code></pre>
<h3 id="3-매개변수가-없는-경우">3. 매개변수가 없는 경우</h3>
<p>매개변수가 없으면 빈 괄호를 사용해요.</p>
<pre><code class="language-javascript">const sayHello = () =&gt; console.log(&quot;안녕!&quot;);
sayHello(); // 출력: 안녕!</code></pre>
<hr>
<h2 id="자주-쓰이는-방식">자주 쓰이는 방식</h2>
<ul>
<li><p><strong>짧은 문법으로 코드 간결하게 만들기:</strong><br>화살표 함수는 특히 배열의 각 요소를 처리할 때 자주 사용돼요.</p>
<pre><code class="language-javascript">const numbers = [1, 2, 3, 4];
const squares = numbers.map(x =&gt; x * x);//매개변수가 하나라 괄호 없음
console.log(squares); // 출력: [1, 4, 9, 16]</code></pre>
</li>
<li><p><strong>콜백 함수로 사용하기:</strong><br>다른 함수에 인자로 넘길 때도 많이 쓰여요.</p>
<pre><code class="language-javascript">setTimeout(() =&gt; {
  console.log(&quot;3초 후에 실행됩니다.&quot;);
}, 3000);</code></pre>
</li>
</ul>
<hr>
<h2 id="정리">정리</h2>
<ul>
<li><strong>간단함:</strong> 전통적인 함수보다 코드가 짧고 읽기 easy</li>
<li><strong>문법:</strong>  <ul>
<li>여러 매개변수: <code>(a, b) =&gt; ...</code></li>
<li>하나의 매개변수: <code>x =&gt; ...</code></li>
<li>매개변수 없음: <code>() =&gt; ...</code></li>
</ul>
</li>
<li><strong>리턴:</strong> 한 줄로 리턴할 때는 중괄호와 <code>return</code> 생략 가능.</li>
</ul>
<blockquote>
<p>화살표 함수를 잘 활용하면 자바스크립트 코드를 더 깔끔하게 작성 가능!</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Switch 문의 기본 흐름]]></title>
            <link>https://velog.io/@sandy_ksh/Switch-%EB%AC%B8%EC%9D%98-%EA%B8%B0%EB%B3%B8-%ED%9D%90%EB%A6%84</link>
            <guid>https://velog.io/@sandy_ksh/Switch-%EB%AC%B8%EC%9D%98-%EA%B8%B0%EB%B3%B8-%ED%9D%90%EB%A6%84</guid>
            <pubDate>Sun, 23 Feb 2025 08:27:12 GMT</pubDate>
            <description><![CDATA[<h2 id="switch-문의-기본-흐름">Switch 문의 기본 흐름</h2>
<ol>
<li><p><strong>표현식 평가:</strong>  </p>
<ul>
<li><code>switch(표현식)</code> 내부의 값을 평가합니다.</li>
</ul>
</li>
<li><p><strong>case 매칭:</strong>  </p>
<ul>
<li>평가된 값과 각 <code>case</code>에 작성된 값들을 엄격 비교(===)합니다.</li>
<li>일치하는 <code>case</code>가 있으면, 그 위치로 <strong>점프</strong>하여 실행을 시작합니다.</li>
</ul>
</li>
<li><p><strong>코드 실행 및 fall-through:</strong>  </p>
<ul>
<li>일치한 <code>case</code>부터 시작해서 <code>break</code>를 만나기 전까지 아래쪽의 코드들이 모두 실행됩니다.</li>
<li>이 현상을 <strong>fall-through</strong>라고 부릅니다.</li>
</ul>
</li>
<li><p><strong>default 실행:</strong>  </p>
<ul>
<li>모든 <code>case</code>와 일치하지 않을 경우, <code>default</code> 블록의 코드가 실행됩니다.</li>
<li><code>default</code>는 보통 마지막에 작성하지만, 위치에 따라 실행 순서에 영향을 줄 수 있습니다.</li>
</ul>
</li>
<li><p><strong>break 의 역할:</strong>  </p>
<ul>
<li>각 <code>case</code>(또는 <code>default</code>) 끝에 <code>break</code>를 작성하면, 그 시점에서 switch 문을 종료시켜 이후 코드 실행을 막습니다.</li>
<li>만약 <code>break</code>가 없다면 fall-through 현상으로 다음 <code>case</code>의 코드도 실행됩니다.</li>
</ul>
</li>
</ol>
<hr>
<h2 id="예시-코드">예시 코드</h2>
<h3 id="예시-1-기본적인-switch-흐름과-fall-through">예시 1: 기본적인 switch 흐름과 fall-through</h3>
<pre><code class="language-javascript">let value = 2;

switch (value) {
  case 1:
    console.log(&quot;첫 번째 case&quot;);
    // break가 없으면 아래 case도 실행됨
  case 2:
    console.log(&quot;두 번째 case&quot;);
    // break가 없으므로, value가 2이면 fall-through 발생
  case 3:
    console.log(&quot;세 번째 case&quot;);
    break; // 여기서 switch 종료
  default:
    console.log(&quot;default case&quot;);
    break;
}
// value가 2인 경우 &quot;두 번째 case&quot;와 &quot;세 번째 case&quot;가 출력됩니다.</code></pre>
<h3 id="예시-2-default-위치에-따른-실행-흐름">예시 2: default 위치에 따른 실행 흐름</h3>
<pre><code class="language-javascript">let animal = &quot;rabbit&quot;;

switch (animal) {
  case &quot;dog&quot;:
    console.log(&quot;개&quot;);
    break;
  default:
    console.log(&quot;알 수 없는 동물&quot;);
    // break가 없으므로, default 실행 후 아래 case가 실행될 수 있음
  case &quot;cat&quot;:
    console.log(&quot;고양이&quot;);
    break;
}

// animal이 &quot;rabbit&quot;일 경우,
// &quot;알 수 없는 동물&quot;이 출력되고, break가 없으므로 이어서 &quot;고양이&quot;도 출력됩니다.
//
// animal이 &quot;cat&quot;일 경우,
// switch문은 &quot;cat&quot; case로 바로 점프하여 &quot;고양이&quot;만 출력됩니다.</code></pre>
<hr>
<h2 id="요약">요약</h2>
<ul>
<li><strong>점프:</strong> switch는 조건에 맞는 case를 찾으면 그 위치로 바로 이동하여 실행합니다.</li>
<li><strong>fall-through:</strong> break 없이 작성된 경우, 일치한 case 이후의 모든 코드가 실행됩니다.</li>
<li><strong>default:</strong> 모든 case와 일치하지 않을 때 실행되는 기본 코드 블록으로, 보통 마지막에 작성하지만 위치에 따라 실행 순서가 달라질 수 있습니다.</li>
<li><strong>break:</strong> 각 case나 default 뒤에 작성하여 해당 case 실행 후 switch문을 종료시킵니다.</li>
</ul>
<blockquote>
<p>switch 문의 흐름과 fall-through, 그리고 default의 역할을 쉽게 이해할 수 있습니다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[grid-column-start in css]]></title>
            <link>https://velog.io/@sandy_ksh/grid-column-start-in-css</link>
            <guid>https://velog.io/@sandy_ksh/grid-column-start-in-css</guid>
            <pubDate>Sat, 22 Feb 2025 12:09:41 GMT</pubDate>
            <description><![CDATA[<p>예) 4개의 열로 구성된 그리드 컨테이너가 있다고 가정해봅시다.</p>
<pre><code class="language-html">&lt;div class=&quot;grid-container&quot;&gt;
  &lt;div class=&quot;item item1&quot;&gt;1번 아이템&lt;/div&gt;
  &lt;div class=&quot;item item2&quot;&gt;2번 아이템&lt;/div&gt;
  &lt;div class=&quot;item item3&quot;&gt;3번 아이템&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>위 HTML을 위한 CSS는 다음과 같습니다.</p>
<pre><code class="language-css">.grid-container {
  display: grid;
  grid-template-columns: 100px 100px 100px 100px; /* 4개의 열, 각각 100px */
  gap: 10px; /* 아이템 사이에 10px 간격 */
  background-color: #eee;
  padding: 10px;
}

.item {
  background-color: #ccc;
  padding: 20px;
  text-align: center;
  font-weight: bold;
}

/* 2번 아이템의 시작 위치를 조정 */
.item2 {
  grid-column-start: 3; /* 이 아이템은 3번째 열에서 시작 */
}</code></pre>
<h2 id="이-코드의-동작-원리">이 코드의 동작 원리</h2>
<ol>
<li><p><strong>그리드 컨테이너 설정:</strong>  </p>
<ul>
<li><code>grid-template-columns: 100px 100px 100px 100px;</code>는 컨테이너 안에 4개의 열을 만들고, 각각의 너비를 100px로 설정합니다.</li>
<li><strong>그리드 라인:</strong>  <ul>
<li>열이 4개라면 왼쪽 가장자리부터 오른쪽 가장자리까지 총 5개의 <strong>그리드 라인</strong>(경계선)이 생깁니다.</li>
<li>이 라인들은 1, 2, 3, 4, 5번으로 번호가 붙습니다.</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>기본 배치:</strong>  </p>
<ul>
<li>특별한 위치 지정 없이 아이템은 첫 번째 그리드 라인부터 차례대로 배치됩니다.</li>
<li>따라서, <code>item1</code>은 1번째 열, <code>item2</code>는 기본적으로 2번째 열, <code>item3</code>은 3번째 열에 위치합니다.</li>
</ul>
</li>
<li><p><strong>grid-column-start 사용:</strong>  </p>
<ul>
<li><code>.item2 { grid-column-start: 3; }</code>는 2번 아이템이 기본 순서와 상관없이 <strong>3번째 그리드 라인에서 시작</strong>하도록 지시합니다.</li>
<li>즉, 아이템은 <strong>3번째 열</strong>에서 시작하게 됩니다.</li>
<li>만약 grid-column-end 속성과 함께 사용한다면, 아이템이 몇 개의 열을 차지할지도 지정할 수 있습니다.</li>
</ul>
</li>
</ol>
<h2 id="시각적-예시">시각적 예시</h2>
<ul>
<li><p><strong>원래 배치:</strong>  </p>
<ul>
<li>아이템1: 1번 열  </li>
<li>아이템2: 2번 열  </li>
<li>아이템3: 3번 열</li>
</ul>
</li>
<li><p><strong>grid-column-start: 3; 적용 후!!</strong>  </p>
<ul>
<li>아이템1: 여전히 1번 열  </li>
<li>아이템2: 3번 열부터 시작  </li>
<li>아이템3: 자동 배치되므로 4번 열(혹은 그리드 설정에 따라 달라짐)</li>
</ul>
</li>
</ul>
<blockquote>
<p>이처럼 <strong>grid-column-start</strong>를 사용하면, 
특정 아이템을 원하는 열에서 시작하게 하여 레이아웃을 보다 세밀하게 조정 가능~</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[@keyframes  in CSS]]></title>
            <link>https://velog.io/@sandy_ksh/keyframes-in-CSS</link>
            <guid>https://velog.io/@sandy_ksh/keyframes-in-CSS</guid>
            <pubDate>Sat, 22 Feb 2025 07:59:34 GMT</pubDate>
            <description><![CDATA[<h2 id="1-keyframes-애니메이션-정의">1. @keyframes 애니메이션 정의</h2>
<pre><code class="language-css">@keyframes example {
  0% {
    background-color: red;
    transform: translateX(0);
  }
  100% {
    background-color: blue;
    transform: translateX(100px);
  }
}</code></pre>
<ul>
<li><p><strong><code>@keyframes example { ... }</code></strong>  </p>
<ul>
<li>여기서 <strong>example</strong>은 애니메이션의 이름입니다. 이 이름을 통해 나중에 CSS 규칙에서 애니메이션을 참조하게 됩니다.</li>
</ul>
</li>
<li><p><strong>0% (시작 상태):</strong>  </p>
<ul>
<li><code>background-color: red;</code>  <ul>
<li>애니메이션 시작 시, 요소의 배경색을 빨간색으로 설정합니다.</li>
</ul>
</li>
<li><code>transform: translateX(0);</code>  <ul>
<li>요소의 위치를 수평 방향으로 0픽셀 이동, 즉 원래 위치에 있도록 지정합니다.</li>
</ul>
</li>
</ul>
</li>
<li><p><strong>100% (끝 상태):</strong>  </p>
<ul>
<li><code>background-color: blue;</code>  <ul>
<li>애니메이션이 끝날 때, 요소의 배경색을 파란색으로 변경합니다.</li>
</ul>
</li>
<li><code>transform: translateX(100px);</code>  <ul>
<li>요소를 오른쪽으로 100픽셀 이동시킵니다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<blockquote>
<p>중간 상태를 더 추가하고 싶다면 0%와 100% 사이에 25%, 50%, 75%와 같이 키프레임을 추가할 수 있어요.</p>
</blockquote>
<hr>
<h2 id="2-애니메이션-적용">2. 애니메이션 적용</h2>
<pre><code class="language-css">.element {
  width: 100px;
  height: 100px;
  animation: example 2s infinite;
}</code></pre>
<ul>
<li><p><strong><code>.element { ... }</code></strong>  </p>
<ul>
<li>이 클래스가 적용된 요소에 대해 스타일을 지정합니다.</li>
</ul>
</li>
<li><p><strong><code>width: 100px;</code>와 <code>height: 100px;</code></strong>  </p>
<ul>
<li>요소의 가로, 세로 크기를 100픽셀로 지정하여, 애니메이션 효과가 잘 보이도록 합니다.</li>
</ul>
</li>
<li><p><strong><code>animation: example 2s infinite;</code></strong>  </p>
<ul>
<li><strong>example:</strong> 위에서 정의한 애니메이션 이름을 참조합니다.</li>
<li><strong>2s:</strong> 애니메이션이 2초 동안 실행됩니다. (즉, 0%에서 100%까지 2초 걸림)</li>
<li><strong>infinite:</strong> 애니메이션을 무한 반복합니다. 즉, 2초마다 처음부터 다시 실행됩니다.</li>
</ul>
</li>
</ul>
<hr>
<h3 id="전체-동작-요약">전체 동작 요약</h3>
<ol>
<li><p><strong>시작:</strong>  </p>
<ul>
<li><code>.element</code>에 빨간색 배경과 원래 위치에서 시작합니다.</li>
</ul>
</li>
<li><p><strong>2초 동안 진행:</strong>  </p>
<ul>
<li>시간이 지나면서 요소의 배경색이 빨간색에서 파란색으로 점차 바뀌고,</li>
<li>동시에 요소가 오른쪽으로 100픽셀 이동합니다.</li>
</ul>
</li>
<li><p><strong>반복:</strong>  </p>
<ul>
<li>애니메이션이 끝나면 다시 처음 상태로 돌아가 같은 효과를 무한 반복하게 됩니다.</li>
</ul>
</li>
</ol>
<p>이 예제 코드를 통해 CSS의 <code>@keyframes</code>를 사용하여 간단한 애니메이션을 어떻게 정의하고 적용하는지, 그리고 애니메이션의 각 단계를 어떻게 설정하는지 이해할 수 있어요.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[html 속성값=문자열]]></title>
            <link>https://velog.io/@sandy_ksh/html-%EC%86%8D%EC%84%B1%EA%B0%92%EB%AC%B8%EC%9E%90%EC%97%B4</link>
            <guid>https://velog.io/@sandy_ksh/html-%EC%86%8D%EC%84%B1%EA%B0%92%EB%AC%B8%EC%9E%90%EC%97%B4</guid>
            <pubDate>Tue, 04 Feb 2025 07:54:26 GMT</pubDate>
            <description><![CDATA[<p>HTML에서 <code>value=&quot;1&quot;</code>와 <code>value=1</code>의 차이에 대해 설명하자면, 
이 둘은 HTML 문법적으로 약간의 차이는 있지만, 
<strong>브라우저에서 처리되는 방식은 동일</strong>합니다. 
즉, 결과적으로 브라우저는 <code>value=&quot;1&quot;</code>과 <code>value=1</code>을 동일하게 처리합니다.</p>
<hr>
<h3 id="detail">detail</h3>
<ol>
<li><p><strong><code>value=&quot;1&quot;</code> (따옴표 사용)</strong>  </p>
<ul>
<li>HTML 표준에서는 속성 값을 문자열로 인식합니다.</li>
<li>따라서 따옴표 안의 값은 항상 <strong>문자열</strong>로 간주됩니다.</li>
<li>예를 들어, <code>value=&quot;1&quot;</code>은 <code>&quot;1&quot;</code>이라는 문자열을 나타냅니다.</li>
</ul>
</li>
<li><p><strong><code>value=1</code> (따옴표 생략)</strong>  </p>
<ul>
<li>따옴표가 없을 경우, HTML에서는 기본적으로 속성 값을 <strong>문자열로 자동 변환</strong>합니다.</li>
<li>예를 들어, <code>value=1</code>을 작성하면 브라우저는 내부적으로 이를 <code>value=&quot;1&quot;</code>로 변환해서 처리합니다.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="정리">정리</h3>
<ul>
<li><strong>HTML에서는 따옴표가 있든 없든 결과적으로 속성 값은 문자열로 처리</strong>됩니다.</li>
<li>즉, <code>value=&quot;1&quot;</code>과 <code>value=1</code>은 브라우저 상에서 <strong>동일</strong>하게 동작합니다.</li>
</ul>
<hr>
<h3 id="그러면-왜-따옴표를-사용하는가">그러면 왜 따옴표를 사용하는가?</h3>
<ol>
<li>값에 공백이나 특수 문자가 포함된 경우에는 반드시 따옴표를 사용<pre><code class="language-html">&lt;option value=&quot;hello world&quot;&gt;Hello World&lt;/option&gt; &lt;!-- 따옴표 필수 --&gt;</code></pre>
</li>
<li>일관성 있는 코드 스타일을 유지</li>
</ol>
<hr>
<h3 id="요약">요약:</h3>
<ul>
<li><code>value=&quot;1&quot;</code>과 <code>value=1</code>은 <strong>브라우저에서 동일</strong>하게 처리됩니다.</li>
<li>하지만 <strong>HTML 표준</strong>에서는 따옴표를 사용하는 것이 더 안전하고 일관성 있는 작성법입니다. 😊</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[알람 설정 두가지 방법]]></title>
            <link>https://velog.io/@sandy_ksh/%EC%95%8C%EB%9E%8C-%EC%84%A4%EC%A0%95-%EB%91%90%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@sandy_ksh/%EC%95%8C%EB%9E%8C-%EC%84%A4%EC%A0%95-%EB%91%90%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Tue, 04 Feb 2025 07:52:12 GMT</pubDate>
            <description><![CDATA[<pre><code>for (let i = 0; i &lt; 24; i++) {
    const option = document.createElement(&quot;option&quot;);
    option.value = i;
    option.textContent = i.toString().padStart(2, &quot;0&quot;);
    hourSelect.appendChild(option);
  }</code></pre><p>위 코드는 알람 예약 선택지를 만드는 방법 중 하나이다.
for문을 쓰기에 -&gt; 내가 하나하나 모든 숫자를 입력할 필요가 없는 방법</p>
<pre><code>option.textContent = i.toString().padStart(2, &quot;0&quot;);</code></pre><p>이 부분은 i를 문자열로 바꾸고, padStart는 말 그대로 패드가 2개라는 것이다. 앞이 비면 0으로 채우겠다. 이런 뜻!
i가 3이면 03이겠지요?</p>
<hr>
<p>그치만 이것보다 더 UI/UX 쪽으로 좋은 방법이 있습니다.</p>
<pre><code>&lt;div&gt;
            &lt;input id=&quot;hour&quot; type=&quot;number&quot; class=&quot;time-input&quot; placeholder=&quot;시&quot; min=&quot;0&quot; max=&quot;23&quot; /&gt;
            :
            &lt;input id=&quot;minute&quot; type=&quot;number&quot; class=&quot;time-input&quot; placeholder=&quot;분&quot; min=&quot;0&quot; max=&quot;59&quot; /&gt;
            :
            &lt;input id=&quot;second&quot; type=&quot;number&quot; class=&quot;time-input&quot; placeholder=&quot;초&quot; min=&quot;0&quot; max=&quot;59&quot; /&gt;
            &lt;button id=&quot;add-alarm-button&quot; class=&quot;control-button&quot;&gt;추가&lt;/button&gt;
        &lt;/div&gt;</code></pre><p>이런 식으로 아예 input으로 받아버리는 방법
하루종일 스크롤할일 없겠죠?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[템플릿 리터럴]]></title>
            <link>https://velog.io/@sandy_ksh/%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%A6%AC%ED%84%B0%EB%9F%B4</link>
            <guid>https://velog.io/@sandy_ksh/%ED%85%9C%ED%94%8C%EB%A6%BF-%EB%A6%AC%ED%84%B0%EB%9F%B4</guid>
            <pubDate>Fri, 24 Jan 2025 09:30:43 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong>batteryStatus.textContent = `배터리: ${batteryLevel}%`;</strong> 
이건 <strong>템플릿 리터럴(template literal)</strong>이라는 자바스크립트 문법~!</p>
</blockquote>
<hr>
<h3 id="1-batterystatustextcontent">1. <strong><code>batteryStatus.textContent</code></strong></h3>
<p>이 부분은 HTML에 있는 특정 요소(여기선 <code>batteryStatus</code>라는 ID를 가진 요소)의 내용을 바꾸는 역할을 해요.</p>
<ul>
<li><strong><code>batteryStatus</code></strong>: 자바스크립트가 HTML에서 <code>id=&quot;batteryStatus&quot;</code>인 요소를 찾아서 저장한 변수.</li>
<li><strong><code>.textContent</code></strong>: 이 속성은 HTML 요소 안의 <strong>텍스트 내용을 가져오거나 바꾸는</strong> 기능이에요.</li>
</ul>
<p>예를 들어, 아래 HTML이 있다면:</p>
<pre><code class="language-html">&lt;div id=&quot;batteryStatus&quot;&gt;&lt;/div&gt;</code></pre>
<p>batteryStatus.textContent는 이 상자 안의 텍스트를 &quot;배터리: 50%&quot; 같은 내용으로 채우게 됩니다.</p>
<hr>
<h3 id="2-배터리-batterylevel">2. <strong><code>배터리: ${batteryLevel}%</code></strong></h3>
<p>이 부분은 템플릿 리터럴이라는 문법을 사용한 거예요. </p>
<h4 id="템플릿-리터럴이란">템플릿 리터럴이란?</h4>
<ul>
<li>템플릿 리터럴은 <strong>문자열을 만들 때 사용하는 새로운 방법</strong></li>
<li><strong>백틱(backtick)</strong>이라고 불리는 기호(<code>)를 사용해요. 보통 문자열을 만들 땐 작은따옴표(&#39;)나 큰따옴표(&quot;)를 쓰잖아요? 템플릿 리터럴은 백틱(</code>)을 씁니다.</li>
<li>문자열 안에 <strong>변수나 표현식을 쉽게 넣을 수 있는</strong> 장점이 있다.</li>
</ul>
<h4 id="batterylevel의-의미"><code>${batteryLevel}</code>의 의미</h4>
<ul>
<li><strong><code>${}</code></strong> 안에 변수를 넣으면, 그 값이 문자열 안에 자동으로 들어가요.</li>
<li>예를 들어 <code>batteryLevel</code>이 50이라면, <strong><code>${batteryLevel}</code></strong>은 <strong>50</strong>으로 바뀌어요.</li>
</ul>
<hr>
<h3 id="3-전체-문자열-만들기">3. <strong>전체 문자열 만들기</strong></h3>
<p><code>배터리: ${batteryLevel}%</code>는 두 가지를 합쳐서 하나의 문자열로 만드는 거예요:</p>
<ol>
<li><strong>고정된 텍스트</strong>: <code>배터리:</code>와 <code>%</code>는 그냥 문자열이에요. 항상 그대로 출력돼요.</li>
<li><strong>변수 값</strong>: <code>${batteryLevel}</code>은 변수의 값을 문자열에 끼워 넣는 역할을 해요.</li>
</ol>
<p>만약 <code>batteryLevel = 75</code>라면, 이 표현은 자동으로 이렇게 바뀝니다:</p>
<pre><code class="language-javascript">배터리: 75%</code></pre>
<hr>
<h3 id="전체-코드의-역할"><strong>전체 코드의 역할</strong></h3>
<pre><code class="language-javascript">batteryStatus.textContent = `배터리: ${batteryLevel}%`;</code></pre>
<p>이 한 줄 코드는</p>
<ol>
<li><strong>배터리 상태</strong>를 나타내는 문자열을 만들어서,<ul>
<li>예: &quot;배터리: 75%&quot;</li>
</ul>
</li>
<li>HTML 요소(<code>batteryStatus</code>)의 텍스트 내용을 그 문자열로 바꾸는 역할을 해요.</li>
</ol>
<hr>
<h3 id="템플릿-리터럴의-장점">템플릿 리터럴의 장점</h3>
<p>템플릿 리터럴을 쓰면 아래처럼 복잡한 코드가 간단해집니다:</p>
<pre><code class="language-javascript">batteryStatus.textContent = &#39;배터리: &#39; + batteryLevel + &#39;%&#39;;</code></pre>
<p>위처럼 문자열을 더하는 대신, <strong><code>배터리: ${batteryLevel}%</code></strong>로 쉽게 쓰는 거죠!</p>
<hr>
<h2 id="요약">요약</h2>
<p><strong>batteryStatus.textContent = `배터리: ${batteryLevel}%`;</strong>는 
템플릿 리터럴을 사용해서 <strong>&quot;배터리: 75%&quot; 같은 문자열을 만들고</strong>, 
그걸 HTML의 텍스트로 표시하는 코드예요! 😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[반응형 웹]]></title>
            <link>https://velog.io/@sandy_ksh/%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9</link>
            <guid>https://velog.io/@sandy_ksh/%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9</guid>
            <pubDate>Mon, 20 Jan 2025 03:38:04 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>반응형 웹은 화면 크기에 따라 웹사이트가 자동으로 예쁘게 변하는 거야.
핸드폰에서는 글씨가 작아지고, 사진이 한 줄로 나오는 거지~</p>
</blockquote>
<ol>
<li><p><strong>CSS 레이아웃</strong>  </p>
<ul>
<li>화면을 어떻게 나눌지 정하는 방법이야.  </li>
<li><strong>Float, Flexbox, Grid</strong>를 사용해서 정렬하고 배치해.</li>
</ul>
</li>
<li><p><strong>미디어 쿼리</strong>  </p>
<ul>
<li>화면 크기에 따라 다른 스타일을 적용해.  </li>
<li>예를 들어, 핸드폰 화면에서는 글씨를 크게 하고, 사진을 한 줄로 보여줘.</li>
</ul>
</li>
<li><p><strong>단위 사용법 (%, em, rem)</strong>  </p>
<ul>
<li><strong>%</strong>: 부모에 따라 비율로 크기를 정해.  </li>
<li><strong>em, rem</strong>: 글씨나 요소 크기를 조절(상대적)<img src="https://velog.velcdn.com/images/sandy_ksh/post/3b41cc35-d9fc-43cb-99d2-008f2f2c8911/image.png" alt="CSS 반응형 단위 설명 이미지" width="80%"/>
em은 부모의 ~배. 가장 바깥친구는 기본으로 배정되는 16px 기준이다.
<img src="https://velog.velcdn.com/images/sandy_ksh/post/3b6ba3e5-d528-4780-898a-4fdffa16907d/image.png" width="80%"/>
rem은 최고 루트의 ~배. 기본 브라우저에 16px 기준. 만약 내가 따로 24px로 설정했다면 그것에 따라 정해짐. 부모와 상관 없음. 
<img src="https://velog.velcdn.com/images/sandy_ksh/post/ffc880b2-e684-4c97-b957-e938d61d61e0/image.png
" width=80%>
%는 em 대신에 쓰일 수 있다. 부모의 ~ %니까.
<img src="https://velog.velcdn.com/images/sandy_ksh/post/9237afaf-d429-473e-a5ea-31d02789060e/image.png" width = 80%/>
기본적으로 ~v***는 브라우저 너비 or 높이의 ~%를 쓰겠다.
근데 이제 vmax는 너비와 높이 중에 큰 친구에 대한 값으로 쓰겠다.

</li>
</ul>
</li>
</ol>
<p>출처: <a href="https://www.youtube.com/watch?v=7Z3t1OWOpHo">https://www.youtube.com/watch?v=7Z3t1OWOpHo</a></p>
<hr>
<h3 id="참고">참고</h3>
<ul>
<li><a href="https://css-tricks.com/responsive-grid-magazine-layout-in-just-20-lines-of-css/">CSS 반응형 가이드</a>  </li>
<li><a href="https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Media_queries">미디어 쿼리 배우기</a>  </li>
<li><a href="https://youtu.be/7Z3t1OWOpHo?si=qwXIMqrzYQCPj-e_">동영상으로 배우기</a>  </li>
</ul>
<hr>
<h3 id="결론">결론</h3>
<p>반응형 웹은 어떤 화면에서도 깔끔하게 보이게 만드는 기술 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[스타일 초기화]]></title>
            <link>https://velog.io/@sandy_ksh/%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%B4%88%EA%B8%B0%ED%99%94</link>
            <guid>https://velog.io/@sandy_ksh/%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%B4%88%EA%B8%B0%ED%99%94</guid>
            <pubDate>Mon, 20 Jan 2025 02:44:59 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>스타일 초기화를 위한 간단한 reset.css 와 normalize.css</p>
</blockquote>
<hr>
<h2 id="1-resetcss">1. <strong>reset.css</strong></h2>
<ul>
<li><strong>완전히 리셋(초기화)</strong> 하는 스타일.  </li>
<li>모든 브라우저의 기본 스타일(여백, 크기, 폰트 등)을 <strong>없애버려서</strong> 완전히 깨끗한 상태.</li>
</ul>
<h4 id="예-자주-초기화되는-것들">예: 자주 초기화되는 것들</h4>
<pre><code class="language-css">/* 모든 여백 제거 */
body, h1, h2, h3, p, ul, ol {
  margin: 0;
  padding: 0;
}

/* 리스트 점 없애기 */
ul, ol {
  list-style: none;
}

/* 박스 크기 초기화 */
* {
  box-sizing: border-box;
}</code></pre>
<blockquote>
<p><strong>쉽게 말해</strong>: &quot;브라우저 기본 스타일 다 지우고, 내가 스타일을 처음부터 다 정리할게!&quot;라는 느낌이야.</p>
</blockquote>
<hr>
<h2 id="2-normalizecss">2. <strong>normalize.css</strong></h2>
<ul>
<li><strong>리셋하지 않고, 조정</strong>하는 스타일.  </li>
<li>브라우저마다 <strong>기본 스타일이 다르니까, 비슷하게 맞추기 위해 조정</strong>만.</li>
</ul>
<h4 id="예-자주-조정되는-것들">예: 자주 조정되는 것들</h4>
<pre><code class="language-css">/* HTML5 요소 스타일 정리 */
article, aside, footer, header, nav, section {
  display: block;
}

/* 폰트 상속 문제 해결 */
button, input {
  font: inherit;
}

/* 테이블 테두리 조정 */
table {
  border-collapse: collapse;
  border-spacing: 0;
}</code></pre>
<blockquote>
<p><strong>쉽게 말해</strong>: &quot;브라우저 기본 스타일을 완전히 없애지는 않고, 조정해서 보기 좋게 만들자!&quot;라는 느낌이야.</p>
</blockquote>
<hr>
<h2 id="차이점">차이점</h2>
<table>
<thead>
<tr>
<th><strong>reset.css</strong></th>
<th><strong>normalize.css</strong></th>
</tr>
</thead>
<tbody><tr>
<td>모든 스타일을 <strong>다 없앰</strong></td>
<td>스타일을 <strong>조정하고 통일</strong></td>
</tr>
<tr>
<td>초기화 후, 스타일을 처음부터 정해야 함</td>
<td>기본 스타일을 보존하면서 수정</td>
</tr>
<tr>
<td>강력하고 깔끔하게 초기화됨</td>
<td>더 자연스럽고 부드러운 결과</td>
</tr>
</tbody></table>
<blockquote>
<p><strong>table에 관한 코드가 reset.css와 normalize.css 둘 다에 해당할 수 있느냐</strong>를 따져보면, <strong>상황에 따라 다르다</strong>고 할 수 있다.</p>
</blockquote>
<h3 id="1-resetcss의-경우"><strong>1. reset.css의 경우</strong></h3>
<p>reset.css는 기본적으로 <strong>스타일을 전부 제거</strong>하거나 <strong>0으로 초기화</strong>하는 데 집중해.<br>따라서 <code>border-collapse: collapse;</code>와 <code>border-spacing: 0;</code> 같은 코드는 <strong>기본 브라우저 스타일을 없애는 역할</strong>로 볼 수 있어.<br>즉, reset.css에서 충분히 등장할 수 있는 코드야.</p>
<h3 id="2-normalizecss의-경우"><strong>2. normalize.css의 경우</strong></h3>
<p>normalize.css는 브라우저마다 다른 기본 스타일을 <strong>통일</strong>하는 데 집중해.  </p>
<ul>
<li>테이블의 <code>border-collapse</code>와 <code>border-spacing</code>은 일부 브라우저에서 기본값이 다를 수 있기 때문에, normalize.css에서도 등장할 가능성이 있어.<br>다만, normalize.css에서는 테이블의 기본 스타일을 완전히 초기화하기보다는 <strong>적당한 초기값</strong>으로 조정하는 방향으로 다룬다고 보면 돼.</li>
</ul>
<hr>
<h3 id="결론"><strong>결론</strong></h3>
<p><code>table { border-collapse: collapse; border-spacing: 0; }</code>는 reset.css와 normalize.css <strong>둘 다에서 등장할 수 있는 코드</strong>야.  </p>
<ul>
<li><strong>reset.css</strong>: 테이블 스타일을 완전히 제거하는 목적.  </li>
<li><strong>normalize.css</strong>: 브라우저 간 차이를 줄이고, 기본값을 통일하기 위한 목적.  </li>
</ul>
<h3 id="언제-어떤-걸-쓰지">언제 어떤 걸 쓰지?</h3>
<ul>
<li><strong>reset.css</strong>: 완전히 깨끗한 상태에서 시작하고 싶을 때.  </li>
<li><strong>normalize.css</strong>: 기본 스타일을 살리면서 편하게 작업하고 싶을 때.</li>
</ul>
<hr>
<h3 id="자주-쓰이는-코드-설명"><strong>자주 쓰이는 코드 설명</strong></h3>
<h4 id="1-html-body">1. <code>html, body</code></h4>
<pre><code class="language-css">html, body {
  margin: 0;
  padding: 0;
  border: 0;
}</code></pre>
<ul>
<li><strong>기본 여백 제거</strong>: 브라우저는 <code>body</code>나 <code>html</code>에 기본적으로 여백(<code>margin</code>)과 안쪽 여백(<code>padding</code>)을 추가하는데, 이걸 없애서 레이아웃을 깔끔하게 만들어.</li>
<li><strong>테두리 제거</strong>: 기본적으로 붙는 테두리(<code>border</code>)도 없앰.</li>
</ul>
<hr>
<h4 id="2-ol-ul">2. <code>ol, ul</code></h4>
<pre><code class="language-css">ol, ul {
  list-style: none;
}</code></pre>
<ul>
<li><strong>리스트 스타일 초기화</strong>: 브라우저는 <code>ul</code>(순서 없는 리스트)과 <code>ol</code>(순서 있는 리스트)에 점이나 숫자 같은 리스트 스타일을 붙여. 이걸 없애서 깔끔한 리스트를 만들도록 초기화한 거야.</li>
</ul>
<hr>
<h4 id="3-table">3. <code>table</code></h4>
<pre><code class="language-css">table {
  border-collapse: collapse;
  border-spacing: 0;
}</code></pre>
<ul>
<li><strong>테이블 간격 없애기</strong>:<ul>
<li><code>border-collapse: collapse;</code>: 테이블 셀(border) 사이의 간격을 없앰.</li>
<li><code>border-spacing: 0;</code>: 셀 사이의 간격을 0으로 설정.</li>
</ul>
</li>
<li>테이블이 붙어 있는 깔끔한 스타일을 만들 때 필요해.</li>
</ul>
<hr>
<p><strong>reset.css</strong>랑 <strong>normalize.css</strong>는 <strong>스타일 초기화</strong>를 위한 CSS 파일인데, 웹 브라우저마다 기본 스타일이 다르기 때문에, <strong>모두 비슷하게 보이도록 만들어주는 역할</strong>을 해.</p>
<hr>
<h3 id="참고-😊">참고 😊</h3>
<ul>
<li>이 초기화 스타일은 <strong>필수는 아니지만</strong> 많은 개발자들이 레이아웃 작업 전에 사용하는 기본 템플릿이야.  </li>
<li>프로젝트의 성격에 맞게 필요한 태그를 추가하거나, 불필요한 부분은 빼려무나. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS의 구체성 w. html]]></title>
            <link>https://velog.io/@sandy_ksh/CSS%EC%9D%98-%EA%B5%AC%EC%B2%B4%EC%84%B1-w.-html</link>
            <guid>https://velog.io/@sandy_ksh/CSS%EC%9D%98-%EA%B5%AC%EC%B2%B4%EC%84%B1-w.-html</guid>
            <pubDate>Mon, 20 Jan 2025 02:16:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><strong><code>.card__button--primary</code></strong>와 <strong><code>.card__button</code></strong> 중에서 <strong>누가 우선 적용되느냐</strong>(누가 &quot;높냐&quot;)는 <strong>CSS의 &quot;구체성&quot;</strong>에 따라 달라져. 
구체성이 높다 → 더 우선적으로 적용된다 (강한 스타일). 이름이 길다.
구체성이 낮다 → 덮어씌워질 가능성이 크다 (약한 스타일).</p>
</blockquote>
<hr>
<h3 id="css-구체성의-기본-규칙"><strong>CSS 구체성의 기본 규칙</strong></h3>
<ol>
<li><strong>인라인 스타일</strong>: <code>&lt;div style=&quot;...&quot;&gt;</code> → 가장 우선 적용됨</li>
<li><strong>아이디 선택자</strong>: <code>#id-name</code> → 두 번째로 강함</li>
<li><strong>클래스, 속성 선택자</strong>: <code>.class-name</code>, <code>[attr]</code> → 세 번째</li>
<li><strong>요소 선택자</strong>: <code>div</code>, <code>h1</code>, <code>button</code> → 가장 낮음</li>
</ol>
<hr>
<h3 id="card__button과-card__button--primary의-구체성-비교"><code>.card__button</code>과 <code>.card__button--primary</code>의 구체성 비교</h3>
<ol>
<li><p><strong><code>.card__button</code></strong>:</p>
<ul>
<li>구체성 점수: <strong>0, 0, 1</strong> (클래스 선택자 1개)</li>
<li>카드의 모든 버튼에 적용되는 기본 스타일.</li>
</ul>
</li>
<li><p><strong><code>.card__button--primary</code></strong>:</p>
<ul>
<li>구체성 점수: <strong>0, 0, 1</strong> (클래스 선택자 1개)</li>
<li><code>.card__button</code>보다 더 세부적인 스타일(수정자)을 적용하기 위한 선택자.</li>
</ul>
</li>
</ol>
<blockquote>
<p>둘 다 구체성 점수는 <strong>동일</strong>하지만, HTML에서 <strong>뒤</strong>에 선언된 스타일이 우선 적용돼.<br>   즉, CSS에서 <code>.card__button</code>이 먼저 선언되고, <code>.card__button--primary</code>가 나중에 선언되었다면 <strong><code>.card__button--primary</code>가 우선 적용</strong>돼.</p>
</blockquote>
<hr>
<h3 id="코드-예시">코드 예시</h3>
<h4 id="html">HTML</h4>
<pre><code class="language-html">&lt;button class=&quot;card__button card__button--primary&quot;&gt;버튼&lt;/button&gt;</code></pre>
<h4 id="css">CSS</h4>
<pre><code class="language-css">/* 기본 버튼 스타일 */
.card__button {
  background-color: gray;
  color: white;
}

/* 수정자 버튼 스타일 */
.card__button--primary {
  background-color: blue;
}</code></pre>
<h4 id="결과-😊">결과 😊</h4>
<ul>
<li><code>.card__button</code>은 기본적으로 <strong>회색 배경</strong>을 설정하지만,</li>
<li><code>.card__button--primary</code>는 <strong>파란색 배경</strong>으로 덮어써.  </li>
</ul>
<blockquote>
<p>수정자 클래스(<code>--primary</code>)는 기본 클래스(<code>.card__button</code>) 위에 <strong>추가로 스타일을 덧씌우지롱</strong>.</p>
</blockquote>
<hr>
<h3 id="정리">정리</h3>
<ol>
<li><strong>구체성은 CSS 규칙의 우선순위를 결정하는 점수 체계</strong>로, 선택자가 더 구체적일수록 높은 우선순위를 가짐.  </li>
<li><strong>구체성 점수 체계</strong>: 인라인 스타일 &gt; 아이디 선택자 &gt; 클래스/속성/가상 클래스 선택자 &gt; 태그 선택자.  </li>
<li>동일한 구체성이라면, <strong>나중에 선언된 스타일이 우선 적용됨</strong>. </li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[BEM(Block Element Modifier) in CSS]]></title>
            <link>https://velog.io/@sandy_ksh/BEMBlock-Element-Modifier-in-CSS</link>
            <guid>https://velog.io/@sandy_ksh/BEMBlock-Element-Modifier-in-CSS</guid>
            <pubDate>Mon, 20 Jan 2025 02:06:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>BEM(BEM: Block, Element, Modifier)은 <strong>CSS를 체계적으로 쓰는 방법</strong>! 
코드가 많아질수록 정리가 안 되고 헷갈리기 쉬운데, BEM은 그걸 깔끔하게 관리하도록 도와줌~</p>
</blockquote>
<p>쉽게 말하면, <strong>블록(Block), 요소(Element), 수정자(Modifier)</strong>라는 3가지 규칙으로 CSS 이름을 짓는 것!</p>
<h3 id="1-block블록">1. Block(블록)</h3>
<ul>
<li>웹 페이지에서 독립적인 한 덩어리.</li>
<li>예 ➡️ 네비게이션 바, 버튼, 카드 같은 큰 덩어리!</li>
<li>이름 예시➡️ <code>menu</code>, <code>card</code>, <code>button</code></li>
</ul>
<h3 id="2-element요소">2. Element(요소)</h3>
<ul>
<li>블록 안에 있는 작은 부분들.</li>
<li>예➡️ 버튼 안의 텍스트, 카드 안의 이미지 같은 것!</li>
<li>이름 예시➡️ <code>menu__item</code>, <code>card__image</code> (<code>블록 이름__요소 이름</code>)</li>
</ul>
<h3 id="3-modifier수정자">3. Modifier(수정자)</h3>
<ul>
<li>블록이나 요소의 모양이나 상태를 바꿀 때 쓰는 거야.</li>
<li>예 ➡️ &quot;초록색 버튼&quot;이나 &quot;활성화된 메뉴 항목&quot; 같은 상태.</li>
<li>이름 예시➡️ <code>button--primary</code>, <code>menu__item--active</code> (<code>이름--수정자</code>)</li>
</ul>
<hr>
<h2 id="참고">참고</h2>
<h3 id="--수정자의-역할"><strong>--(수정자)의 역할</strong></h3>
<p><code>--</code>는 <strong>수정자(Modifier)</strong>를 나타내는 표시야.
 ➡️ <strong>&quot;원래 있던 것에서 조금 다른 버전&quot;</strong>이라고 생각하면 돼.</p>
<h4 id="예시-버튼">예시: 버튼</h4>
<ul>
<li><strong>기본 버튼</strong><pre><code class="language-html">&lt;button class=&quot;button&quot;&gt;기본 버튼&lt;/button&gt;</code></pre>
</li>
<li><strong>파란색 버튼</strong><pre><code class="language-html">&lt;button class=&quot;button button--blue&quot;&gt;파란 버튼&lt;/button&gt;</code></pre>
</li>
<li><strong>작은 버튼</strong><pre><code class="language-html">&lt;button class=&quot;button button--small&quot;&gt;작은 버튼&lt;/button&gt;</code></pre>
</li>
</ul>
<p><strong><code>button--blue</code></strong>와 <strong><code>button--small</code></strong>처럼 <code>--</code>를 붙이면 <strong>기본 버튼의 변형(blue, small)</strong>을 만들 수 있어.</p>
<hr>
<h4 id="비유-아이스크림-🍦">비유: 아이스크림 🍦</h4>
<ul>
<li>기본 아이스크림: <strong><code>ice-cream</code></strong></li>
<li>초콜릿 맛: <strong><code>ice-cream--chocolate</code></strong></li>
<li>딸기 맛: <strong><code>ice-cream--strawberry</code></strong></li>
</ul>
<blockquote>
<p>이렇게 하면 &quot;이건 기본 아이스크림인데, 초콜릿 맛이네!&quot; 하고 쉽게 알아볼 수 있어.  </p>
</blockquote>
<pre><code class="language-css">/* Block: 기본 카드 스타일 */
.card {
  border: 1px solid #ddd;
  padding: 20px;
  border-radius: 5px;
  background-color: white;
}

/* Modifier: 특수한 카드 스타일 */
.card--featured {
  background-color: #f0f8ff; /* 파란색 배경 */
  border-color: #007bff; /* 파란색 테두리 */
}

/* Element: 카드 제목 */
.card__title {
  font-size: 1.5em;
  margin-bottom: 10px;
}

/* Element: 버튼 스타일 */
.card__button {
  padding: 10px 15px;
  font-size: 1em;
  border: none;
  border-radius: 3px;
  cursor: pointer;
}

/* Modifier: 버튼 색상 */
.card__button--primary {
  background-color: #007bff;
  color: white;
}

.card__button--secondary {
  background-color: #6c757d;
  color: white;
}</code></pre>
<hr>
<h3 id="언제-쓰이나"><strong>언제 쓰이나?</strong></h3>
<ol>
<li><p><strong>큰 프로젝트에서 CSS 관리</strong><br>예를 들어, 쇼핑몰 사이트처럼 복잡한 페이지에서는 버튼, 카드, 네비게이션 등 요소가 많아. 이런 경우 이름이 중복되거나 어디에 쓰이는지 헷갈릴 수 있어.<br>BEM은 규칙에 따라 이름을 정하기 때문에 <strong>클래스 이름이 중복되지 않고, 이해하기 쉽게 관리</strong>할 수 있어.</p>
</li>
<li><p><strong>팀 프로젝트에서 협업</strong><br>여러 명이 CSS를 작성하면, 누가 만든 코드인지 파악하기 어려울 수 있어.<br>BEM을 쓰면 모두가 같은 규칙으로 이름을 정하니까 <strong>코드가 일관성 있게 유지</strong>돼.</p>
</li>
<li><p><strong>스타일 재사용</strong><br>BEM은 블록, 요소, 수정자로 나눠져 있어서 <strong>필요한 부분만 수정하거나 재사용하기 쉬워.</strong></p>
</li>
</ol>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[justify-content VS text-align]]></title>
            <link>https://velog.io/@sandy_ksh/justify-content-VS-text-align</link>
            <guid>https://velog.io/@sandy_ksh/justify-content-VS-text-align</guid>
            <pubDate>Sun, 19 Jan 2025 16:00:25 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>justify-content <strong>vs</strong> text-align</p>
</blockquote>
<h3 id="공통점"><strong>공통점</strong></h3>
<p> 두 속성 모두 <strong>수평 방향 정렬</strong>에 사용</p>
<hr>
<h3 id="차이점"><strong>차이점</strong></h3>
<ol>
<li><strong>적용 대상</strong><ul>
<li><strong>Flexbox (<code>display: flex</code>)</strong>:  
모든 자식 요소(<code>block</code> 요소: <code>div</code>, <code>section</code> 등, <code>inline</code> 요소: <code>span</code>, <code>a</code> 등)를 정렬할 수 있음.</li>
<li><strong>Text-align</strong>:  
텍스트나 <code>inline</code> 요소(<code>span</code>, <code>a</code> 등)를 정렬할 때 주로 사용.</li>
</ul>
</li>
</ol>
<hr>
<ol start="2">
<li><strong>정렬 방식</strong><ul>
<li><strong>Flexbox (<code>justify-content</code>)</strong>:  
부모 요소 안에서 자식 요소들의 위치와 간격을 유연하게 제어.<br>예) <code>justify-content: center;</code> (가운데), <code>justify-content: flex-end;</code> (오른쪽 끝)</li>
<li><strong>Text-align</strong>:  
<code>text</code>나 <code>inline</code> 요소를 부모 요소 기준으로 정렬.<br>예) <code>text-align: center;</code> (가운데), <code>text-align: right;</code> (오른쪽 끝)</li>
</ul>
</li>
</ol>
<hr>
<ol start="3">
<li><strong>언제 사용?</strong><ul>
<li><strong>Flexbox</strong>:  
여러 자식 요소(<code>div</code>, <code>button</code> 등)를 동적으로 정렬하거나,
수평뿐 아니라 <strong>수직 정렬</strong>(Flexbox는 수평뿐만 아니라 수직 정렬도 가능. 이를 위해 align-items나 align-self를 사용함.)이 필요할 때.</li>
<li><strong>Text-align</strong>:  
단순히 텍스트(<code>h1</code>, <code>p</code>)나 <code>inline</code> 요소(<code>a</code>, <code>span</code>)를 정렬할 때.</li>
</ul>
</li>
</ol>
<hr>
<h3 id="예시"><strong>예시</strong></h3>
<h4 id="flexbox">Flexbox</h4>
<pre><code class="language-css">.parent {
  display: flex;
  justify-content: center; /* 자식 요소를 가운데 정렬 */
}</code></pre>
<ul>
<li>자식 요소: <code>div</code>, <code>button</code> 같은 <strong>block 요소</strong> 정렬 가능.</li>
</ul>
<h4 id="text-align">Text-align</h4>
<pre><code class="language-css">.parent {
  text-align: center; /* 텍스트와 inline 요소를 가운데 정렬 */
}</code></pre>
<ul>
<li>자식 요소: <code>span</code>, <code>a</code> 같은 <strong>inline 요소</strong>와 텍스트 정렬에 적합. </li>
</ul>
<hr>
<h3 id="결론"><strong>결론</strong></h3>
<ul>
<li><strong>Flexbox</strong>: 다양한 자식 요소를 동적이고 유연하게 정렬.</li>
<li><strong>Text-align</strong>: 텍스트 중심의 간단한 정렬.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[parameter (name, value) in HTML]]></title>
            <link>https://velog.io/@sandy_ksh/parameter-name-value-in-HTML</link>
            <guid>https://velog.io/@sandy_ksh/parameter-name-value-in-HTML</guid>
            <pubDate>Fri, 17 Jan 2025 04:57:42 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>HTML에서 <strong>parameter (name, value)</strong>는 태그에 정보를 추가하는 역할.
쉽게 말해, 태그가 &quot;어떻게 동작해야 하는지&quot; 알려줌.
<em>태그의 형식: *</em>&lt;와 &gt;**로 감싸여 있다.</p>
</blockquote>
<h3 id="기본-형식">기본 형식</h3>
<pre><code class="language-html">name=&quot;value&quot;</code></pre>
<ul>
<li><strong>name</strong>: 설정의 이름  </li>
<li><strong>value</strong>: 설정의 값</li>
</ul>
<hr>
<h3 id="예시">예시</h3>
<h4 id="1-링크">1. 링크</h4>
<pre><code class="language-html">&lt;a href=&quot;https://example.com&quot;&gt;이동하기&lt;/a&gt;</code></pre>
<ul>
<li><code>href</code> (name): 링크의 주소를 알려줌  </li>
<li><code>https://example.com</code> (value): 이동할 URL</li>
</ul>
<hr>
<h4 id="2-이미지">2. 이미지</h4>
<pre><code class="language-html">&lt;img src=&quot;image.jpg&quot; alt=&quot;예쁜 그림&quot;&gt;</code></pre>
<ul>
<li><code>src</code> (name): 이미지의 파일 경로  </li>
<li><code>image.jpg</code> (value): 표시할 이미지 파일  </li>
<li><code>alt</code> (name): 이미지가 안 보일 때 대신 나올 텍스트</li>
</ul>
<hr>
<h4 id="3-입력폼">3. 입력폼</h4>
<pre><code class="language-html">&lt;form action=&quot;/submit&quot; method=&quot;GET&quot;&gt;
    &lt;input type=&quot;text&quot; name=&quot;username&quot; value=&quot;학생&quot;&gt;
    &lt;button type=&quot;submit&quot;&gt;보내기&lt;/button&gt;
&lt;/form&gt;</code></pre>
<ul>
<li><code>name</code> (name): 서버로 보낼 데이터의 이름 (<code>username</code>)  </li>
<li><code>value</code> (value): 기본 값 (<code>학생</code>)</li>
</ul>
<hr>
<h3 id="요약">요약</h3>
<ul>
<li><strong>name</strong>: 설정의 이름 (뭘 설정할지 알려줌)  </li>
<li><strong>value</strong>: 설정의 값 (어떤 값을 사용할지 알려줌)  </li>
<li>예: <code>href=&quot;https://example.com&quot;</code>은 링크가 어디로 가야 하는지 알려주는 역할!</li>
</ul>
<hr>
<h2 id="참고">참고</h2>
<p>HTML에서는 name=&quot;value&quot; 형식을 사용하지만, 
<strong>parameter (name, value)</strong>로 표현한 이유는 프로그래밍 전반에서 &quot;파라미터&quot;를 설명할 때 흔히 사용하는 표현 방식 때문이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[1급 객체와 object]]></title>
            <link>https://velog.io/@sandy_ksh/1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EC%99%80-object</link>
            <guid>https://velog.io/@sandy_ksh/1%EA%B8%89-%EA%B0%9D%EC%B2%B4%EC%99%80-object</guid>
            <pubDate>Fri, 17 Jan 2025 01:46:19 GMT</pubDate>
            <description><![CDATA[<h3 id="1-1급-객체-first-class-object"><strong>1. 1급 객체 (First-class Object)</strong></h3>
<blockquote>
<ul>
<li>JavaScript에서 <strong>함수는 1급 객체</strong>입니다.  </li>
</ul>
</blockquote>
<ul>
<li>1급 객체란, <strong>다른 값처럼 자유롭게 다룰 수 있는 객체</strong>를 말합니다.</li>
</ul>
<p><strong>이게 무슨 뜻?</strong></p>
<ul>
<li>함수를 <strong>변수에 저장</strong>할 수 있습니다.</li>
<li>함수를 <strong>다른 함수의 인자로 전달</strong>할 수 있습니다.</li>
<li>함수를 <strong>다른 함수의 반환값으로 사용할 수 있습니다.</strong></li>
</ul>
<hr>
<h4 id="예시-코드"><strong>예시 코드</strong></h4>
<pre><code class="language-javascript">// 1. 함수는 변수에 저장 가능
const sayHello = function () {
  console.log(&quot;Hello!&quot;);
};
sayHello(); // 출력: Hello!

// 2. 함수는 다른 함수의 인자로 전달 가능
function callFunction(func) {
  func(); // 전달받은 함수 실행
}
callFunction(sayHello); // 출력: Hello!

// 3. 함수는 다른 함수의 반환값으로 사용 가능
function createGreeting() {
  return function () {
    console.log(&quot;Hi there!&quot;);
  };
}
const greeting = createGreeting();
greeting(); // 출력: Hi there!</code></pre>
<hr>
<h3 id="2-object의-개념">2. Object의 개념</h3>
<blockquote>
<ul>
<li><strong>키-값 쌍으로 데이터를 저장</strong>하는 구조.  </li>
</ul>
</blockquote>
<ul>
<li>사람의 정보를 저장하려고 할 때, 이름, 나이, 직업 등을 묶어서 하나로 표현하는 것이 객체.</li>
</ul>
<hr>
<h4 id="객체의-기본-구조"><strong>객체의 기본 구조</strong></h4>
<ul>
<li><strong>키(key):</strong> 데이터 이름.  </li>
<li><strong>값(value):</strong> 데이터 내용.</li>
</ul>
<hr>
<h4 id="예시-코드-1"><strong>예시 코드</strong></h4>
<pre><code class="language-javascript">// 객체 생성
const person = {
  name: &quot;Alice&quot;, // 키: name, 값: &quot;Alice&quot;
  age: 25,       // 키: age, 값: 25
  job: &quot;Developer&quot;, // 키: job, 값: &quot;Developer&quot;
};

// 객체 사용
console.log(person.name); // 출력: Alice
console.log(person.age);  // 출력: 25

// 키-값 추가
person.country = &quot;USA&quot;;
console.log(person.country); // 출력: USA

// 함수도 값이 될 수 있음
person.sayHello = function () {
  console.log(&quot;Hello, I&#39;m &quot; + this.name);
};
person.sayHello(); // 출력: Hello, I&#39;m Alice</code></pre>
<hr>
<h3 id="⭐요약">⭐요약</h3>
<ol>
<li><p><strong>1급 객체:</strong>  </p>
<ul>
<li>함수도 숫자나 문자열처럼 <strong>값처럼 사용 가능</strong>.  </li>
<li>변수에 저장, 전달, 반환이 자유롭다.</li>
</ul>
</li>
<li><p><strong>Object(객체):</strong>  </p>
<ul>
<li><strong>키-값 쌍</strong>으로 데이터를 저장하는 구조.  </li>
<li>다양한 데이터를 묶어서 한 번에 관리할 수 있다!!</li>
</ul>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[rest parameter와 arrow function]]></title>
            <link>https://velog.io/@sandy_ksh/rest-parameter%EC%99%80-arrow-function</link>
            <guid>https://velog.io/@sandy_ksh/rest-parameter%EC%99%80-arrow-function</guid>
            <pubDate>Fri, 17 Jan 2025 01:28:40 GMT</pubDate>
            <description><![CDATA[<h3 id="1-rest-parameter-나머지-매개변수">1. Rest Parameter (나머지 매개변수)</h3>
<p><strong>Rest Parameter</strong>는 함수에 전달되는 여러 개의 값을 <strong>하나의 배열로 모아주는 기능</strong>.  
쉽게 말해, 함수가 <strong>얼마나 많은 값을 받을지 모를 때</strong> 유용.</p>
<hr>
<h4 id="설명">설명</h4>
<ul>
<li>함수가 호출될 때 전달된 값(인자)을 배열로 처리할 수 있습니다.  </li>
<li><code>...</code> (점 세 개)를 사용합니다.</li>
</ul>
<hr>
<h4 id="예시-코드">예시 코드</h4>
<pre><code class="language-javascript">function sum(...numbers) {
  // numbers는 배열로 모든 인자를 받음
  return numbers.reduce((total, num) =&gt; total + num, 0);
}

console.log(sum(1, 2, 3)); // 6
console.log(sum(10, 20, 30, 40)); // 100</code></pre>
<h4 id="한-줄-요약">한 줄 요약</h4>
<p>함수에 여러 값을 넘겨주면 <code>Rest Parameter</code>가 <strong>배열로 묶어서 처리</strong>!!</p>
<hr>
<h3 id="2-arrow-function-화살표-함수">**2. Arrow Function (화살표 함수)</h3>
<p><strong>Arrow Function</strong>은 <strong>간단하게 함수를 작성</strong>할 수 있는 방법.<br>일반적인 함수 선언보다 코드가 짧아지고 간결.</p>
<hr>
<h4 id="설명-1">설명</h4>
<ul>
<li><code>function</code> 대신 <code>=&gt;</code> (화살표)를 사용하여 함수 작성.</li>
<li>코드가 짧아질 뿐 아니라, <strong>this</strong> 키워드가 다른 함수와 다르게 작동해서 더 직관적.
즉, 일반 함수(function)과 달리 this를 고정시킵니다.// 추가 공부 예정. 넘나 어려운 것.
this는 함수가 작성된 위치의 주인을 사용합니다. (헷갈리지 않음!)</li>
</ul>
<hr>
<h4 id="예시-코드-1">예시 코드</h4>
<pre><code class="language-javascript">// 일반 함수 선언
const add = function (a, b) {
  return a + b;
};

// 화살표 함수로 동일한 기능 작성
const addArrow = (a, b) =&gt; a + b;

console.log(add(2, 3)); // 5
console.log(addArrow(2, 3)); // 5</code></pre>
<h4 id="추가-예시-1줄-함수">추가 예시 (1줄 함수)</h4>
<p>화살표 함수로 <strong>한 줄</strong>로 작성이 가능:</p>
<pre><code class="language-javascript">const greet = (name) =&gt; `Hello, ${name}!`;

console.log(greet(&quot;Alice&quot;)); // Hello, Alice!</code></pre>
<hr>
<h3 id="요약">요약</h3>
<ul>
<li><strong>Rest Parameter</strong>: 여러 값을 함수로 전달할 때 <strong>배열로 처리</strong>.  </li>
<li><strong>Arrow Function</strong>: 함수를 짧고 간단하게 <strong>화살표(<code>=&gt;</code>)로 작성</strong>.  </li>
</ul>
<hr>
<h2 id="참고">참고</h2>
<h3 id="일반-함수에서의-this">일반 함수에서의 this</h3>
<p>예시 1: 객체 안에서 함수 호출</p>
<pre><code class="language-javascript">const obj = {
  name: &quot;Alice&quot;,
  sayName: function () {
    console.log(this.name); // &#39;this&#39;는 obj를 가리킴
  },
};

obj.sayName(); // 출력: Alice</code></pre>
<p>여기서 this는 obj를 가리켜. 왜냐하면 sayName()을 obj가 호출했기 때문!</p>
<p>예시 2: 그냥 호출하면?</p>
<pre><code class="language-javascript">function sayName() {
  console.log(this.name); // &#39;this&#39;는 전역 객체를 가리킴
}

sayName(); // 출력: undefined (브라우저에서는 window.name)</code></pre>
<p>함수가 독립적으로 호출되면, this는 브라우저에서는 window를, Node.js에서는 전역 객체를 가리켜.</p>
<h4 id="arrow-function에서의-this">Arrow Function에서의 this</h4>
<p>Arrow Function은 this를 &quot;고정&quot;시킴
일반 함수는 호출 방식에 따라 this가 바뀌지만, Arrow Function은 this가 작성된 위치의 주인을 사용해.</p>
<p>예시: 일반 함수와 Arrow Function의 차이</p>
<pre><code class="language-javascript">const obj = {
  name: &quot;Alice&quot;,
  sayName: function () {
    const inner = () =&gt; {
      console.log(this.name); // Arrow Function은 obj를 그대로 사용
    };
    inner();
  },
};

obj.sayName(); // 출력: Alice</code></pre>
<p>Arrow Function은 &quot;이 함수가 어디에 작성되었는지&quot;만 보고 this를 고정하기 때문에 <strong>obj</strong>를 가리킨다.</p>
]]></description>
        </item>
    </channel>
</rss>