<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yhc_94.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 29 Dec 2023 12:08:43 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yhc_94.log</title>
            <url>https://velog.velcdn.com/images/yhc_94/profile/ecf90f4e-7914-44b8-83a2-c9959eb78c21/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yhc_94.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yhc_94" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[JavaScript] let, const, scope]]></title>
            <link>https://velog.io/@yhc_94/JavaScript-let-const-scope</link>
            <guid>https://velog.io/@yhc_94/JavaScript-let-const-scope</guid>
            <pubDate>Fri, 29 Dec 2023 12:08:43 GMT</pubDate>
            <description><![CDATA[<h2 id="var">var</h2>
<ul>
<li>중복선언 가능하다.</li>
<li>함수 레벨 스코프</li>
<li>변수 호이스팅<pre><code>// 이 시점에는 변수 호이스팅에 의해 이미 abc 변수가 선언 되었다.(1.선언 단계)
// 변수 abc는 undefined로 초기화된다. (2.초기화 단계)
console.log(abc); // undefined
</code></pre></li>
</ul>
<p>// 변수에 값을 할당(3. 할당 단계)
abc = 94;</p>
<p>console.log(abc); // 94</p>
<p>// 변수 선언은 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 실행된다.
var abc;</p>
<pre><code>
## let
 - 변수 중복 선언 금지
 - 블록 레벨 스코프
</code></pre><p>let abc = 9; // 전역 변수
{
    let abc = 4; // 지역 변수
      let bca = 2;// 지역 변수
}
console.log(abc); //9
console.log(bca); // ReferenceError: bca is not defined</p>
<pre><code>- &lt;span style =&#39;color: violet&#39;&gt;__선언 단계__&lt;/span&gt;와 &lt;span style =&#39;color: violet&#39;&gt;__초기화 단계__&lt;/span&gt;가 분리되어 진행된다.

## TDZ
### 일시적 사각지대 / Temporal Dead Zone</code></pre><pre><code>// 런타임 이전에 선언 단계가 실행된다. 아직 변수가 초기화되지 않았다.
// 초기화 이전의 일시적 사각지대에서는 변수를 참조할 수 없다.
console.log(abc); // ReferenceError: abc is not defined

let abc; // 변수 선언문에서 초기화 단계가 실행된다.
console.log(abc); // undefined

abc = 94; // 할당문에서 할당 단계가 실행된다.
console.log(abc); // 94

위의 예시로는 호이스팅이 발생하지 않는 것처럼 보인다.

let qqq = 94; // 전역 변수
{
    console.log(qqq); // ReferencError: Cannot acces &#39;qqq&#39; before initialization
    let qqq = 1; // 지역 변수
}</code></pre><p>```</p>
<blockquote>
<p>호이스팅이 발생하지 않는다면 94가 출력 돼야한다. 하지만 분리된 선언 단계에 걸려 지역 변수의 qqq를 참조하게 돼고 참조 에러가 발생했다.</p>
</blockquote>
<h3 id="const">const</h3>
<ul>
<li>상수를 선언하기 위해 사용한다.</li>
<li>선언과 동시에 초기화 해야한다.</li>
<li>블록 레벨 스코프, 호이스팅이 발생하지 않는 것처럼 동작한다.</li>
<li>재할당 금지</li>
<li>const로 선언된 변수에 객체를 할당한 경우 값을 변경할 수 있다.<ul>
<li>객체의 주소값을 할당 했기 때문 </li>
</ul>
</li>
</ul>
<blockquote>
<p>참고: 모던 자바스크립트 Deep Dive</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모두의 네트워크] 네트워크의 기본 규칙]]></title>
            <link>https://velog.io/@yhc_94/%EB%AA%A8%EB%91%90%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B7%9C%EC%B9%99</link>
            <guid>https://velog.io/@yhc_94/%EB%AA%A8%EB%91%90%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B7%9C%EC%B9%99</guid>
            <pubDate>Thu, 28 Dec 2023 12:29:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이전 포스트에서 네트워크가 무엇인지 간략하게 알아봤었다.
오늘은 네트워크의 기본 규칙인 <strong>프로토</strong>콜에 대해 알아보자</p>
</blockquote>
<h3 id="프로토콜protocol">프로토콜(protocol)</h3>
<p><strong>네트워크</strong>에서 문제없이 통신하려면 규칙을 지켜야한다.
그런 규칙을 <span style='color: violet'>프로토콜(protocol)</span>이라고 한다.
<br>
<br></p>
<blockquote>
<p>네트워크에서는 데이터를 주고받기 위한 통신 규격이 정해져 있다.
<strong>국제표준화기구(ISO)</strong>의 OSI 모델과 TCP/IP 모델을 알아보자</p>
</blockquote>
<h3 id="osi-모델">OSI 모델</h3>
<p>데이터의 송수신이 일어날 때 컴퓨터 내부에서 <strong>7</strong>개의 <span style='color: violet'><strong>계층</strong>(레이어)</span>으로 나누어진다.</p>
<table>
<thead>
<tr>
<th align="center">계층</th>
<th align="left">이름</th>
<th align="left">설명</th>
<th align="center">송신</th>
<th align="center">수신</th>
</tr>
</thead>
<tbody><tr>
<td align="center">7계층</td>
<td align="left">응용 계층<br>(Application Layer)</td>
<td align="left">이메일, 파일 전송, 웹 사이트 조회 등 애플리케이션에 대한 서비스를 제공한다.</td>
<td align="center">|</td>
<td align="center">▲</td>
</tr>
<tr>
<td align="center">6계층</td>
<td align="left">표현 계층<br>(Presentation Layer)</td>
<td align="left">문자 코드, 압축, 암호화 등의 데이터를 변환한다.</td>
<td align="center">|</td>
<td align="center">|</td>
</tr>
<tr>
<td align="center">5계층</td>
<td align="left">세션 계층<br>(Session Layer)</td>
<td align="left">세션 체결, 통신 방식을 결정한다.</td>
<td align="center">|</td>
<td align="center">|</td>
</tr>
<tr>
<td align="center">4계층</td>
<td align="left">전송 계층<br>(Transport Layer)</td>
<td align="left">신뢰할 수 있는 통신을 구현한다.</td>
<td align="center">|</td>
<td align="center">|</td>
</tr>
<tr>
<td align="center">3계층</td>
<td align="left">네트워크 계층<br>(Network Layer)</td>
<td align="left">다른 네트워크와 통신하기 위한 경로 설정 및 논리 주소를 결정한다.</td>
<td align="center">|</td>
<td align="center">|</td>
</tr>
<tr>
<td align="center">2계층</td>
<td align="left">데이터 링크 계층<br>(Data Link Layer)</td>
<td align="left">네트워크 기기 간의 데이터 전송 및 물리 주소를 결정한다.</td>
<td align="center">|</td>
<td align="center">|</td>
</tr>
<tr>
<td align="center">1계층</td>
<td align="left">물리 계층<br>(Physical Layer)</td>
<td align="left">시스템 간의 물리적인 연결과 전기 신호를 변환 및 제어한다.</td>
<td align="center">▼</td>
<td align="center">|</td>
</tr>
</tbody></table>
<ul>
<li>통신할 때(<span style='color: violet'>송신 측</span>) 데이터는 맨 위의 <strong>응용 계층</strong>에서 부터 순서대로 아래 계층으로 전달된다.</li>
<li>통신할 때(<span style='color: violet'>수신 측</span>) 데이터는 맨 아래의 <strong>물리 계층</strong>에서 부터 순서대로 상위 계층으로 전달된다.</li>
</ul>
<br>
<br>

<h3 id="tcpip-모델">TCP/IP 모델</h3>
<p>4계층으로 이루어져 있다.</p>
<table>
<thead>
<tr>
<th align="center">계층</th>
<th align="center">TCP/IP 모델</th>
<th align="center">OSI 모델</th>
</tr>
</thead>
<tbody><tr>
<td align="center">4계층</td>
<td align="center">응용 계층</td>
<td align="center">응용 계층<br>표현 계층<br>세션 계층</td>
</tr>
<tr>
<td align="center">3계층</td>
<td align="center">전송 계층</td>
<td align="center">전송 계층</td>
</tr>
<tr>
<td align="center">2계층</td>
<td align="center">인터넷 계층</td>
<td align="center">네트워크 계층</td>
</tr>
<tr>
<td align="center">1계층</td>
<td align="center">데이터 링크 계층 or 네트워크 인터페이스 계층</td>
<td align="center">데이터 링크 계층<br>물리 계층</td>
</tr>
</tbody></table>
<blockquote>
<p>데이터를 송수신할 때는 캡슐화와 역캡슐화가 이루어진다.</p>
</blockquote>
<h3 id="캡슐화">캡슐화</h3>
<p>전송할 데이터에 헤더를 붙여 나가는것</p>
<ul>
<li>헤더(header)<ul>
<li>데이터를 보내려면 전송하는데 <strong>필요한 정보</strong>를 붙여서 다음 계층으로 보내야 한다.
이 정보를 <span style='color: violet'><strong>헤더(header)</strong></span>라고한다.</li>
<li>데이터를 전달받을 상대방에 대한 정보가 포함되어 있다.</li>
</ul>
</li>
</ul>
<h3 id="역캡슐화">역캡슐화</h3>
<p>데이터를 받는 쪽에서 헤더를 하나씩 제거하는것</p>
<blockquote>
<p>참고: 10일 만에 배우는 네트워크 기초 모두의 네트워크 / 미즈구치 카츠야 지음 / 이승룡 옮김</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[모두의 네트워크] - 네트워크의 기초]]></title>
            <link>https://velog.io/@yhc_94/%EB%AA%A8%EB%91%90%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@yhc_94/%EB%AA%A8%EB%91%90%EC%9D%98-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Wed, 27 Dec 2023 12:00:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>네트워크에 대해 알아보려고 정보를 찾다가 모두의 네트워크라는 책을 알게 되었고, 네트워크 지식을 쉽게 풀어  정리 되어있어 선택하게 되었다.
이 책을 읽으면서 공부한 내용들을 정리해보려 한다.</p>
</blockquote>
<h3 id="네트워크란">네트워크란?</h3>
<p>서로간의 연결, 사람과 사람, 도로와 철도, 물류 네트워크와 같이 다양한 네트워크가 있다.
우리(웹 개발자)가 보통 말하는 네트워크는 컴퓨터 네트워크라고 생각하면 된다.</p>
<h3 id="인터넷">인터넷</h3>
<p>TCP/IP 프로토콜을 사용하는, 전 세계의 큰 네트워크에서 작은 네트워크까지를 연결하는 거대한 네트워크</p>
<h3 id="패킷packet">패킷(packet)</h3>
<p>데이터를 주고받을 때 네트워크를 통해 전송되는 데이터의 작은조각</p>
<pre><code>웹 브라우저에는 크거나 작거나 패킷에 나누어서 보내야하는 규칙이있다.
큰 데이터가 네트워크의 대역폭(bandwidth)을 많이 점유해 다른 패킷의 흐름을 막을 휘험이 있기 때문이다.

용량이 큰 데이터가 패킷으로 분할 되어 전송될 때 각 패킷에 순서대로 번호가 붙여저 패킷이 네트워크가 지연되어서 늦게 도착하거나 누락되어도
원래대로 되돌릴 수 있다.

* 디지털 데이터이기에 가능하다. *

 - 디지털 데이터
     0과 1의 집합
 - 디지털 데이터의 단위
     비트(bit): 0과 1의 정보를 나타내는 최소 단위
    바이트(byte): 8비트가 1바이트가 된다.
                컴퓨터는 기본적으로 바이트 단위로 데이터를 읽고 쓰는 작업을 해 8비트를 1바이트로 다루는 것이 좋다.</code></pre><br>

<blockquote>
<p>네트워크에는 <strong>랜(LAN)</strong>이라는 좁은 범위의 네트워크와 <strong>왠(WAN)</strong>이라고 하는 넓은 범위의 네트워크가 있다.</p>
</blockquote>
<h3 id="랜lan">랜(LAN)</h3>
<ul>
<li>건물 안이나 특정 지역을 범위로 하는 네트워크이다.</li>
<li><strong>L</strong>ocal <strong>A</strong>rea <strong>N</strong>etwork(근거리 통신망)의 약어</li>
<li>연결하는 거리가 짧은 만큼 신호가 약해지거나 오류가 발생할 확률도 매우 낮고 속도도 빠르다.</li>
</ul>
<h3 id="왠wan">왠(WAN)</h3>
<ul>
<li>지리적으로 넓은 범위에 구축된 네트워크</li>
<li><strong>W</strong>ide <strong>A</strong>rea <strong>N</strong>etwork(광역 통신망)의 약어</li>
<li>인터넷 서비스 제공자(ISP)가 제공하는 서비스를 사용하여 구축한 네트워크</li>
<li>멀리 떨어져 있는 랜과 연결되어 있어 신호가 약해지거나 오류가 발생할 확률이 높지고 속도는 느리다.<br>
<br>
<br>

</li>
</ul>
<blockquote>
<p>네트워크에 대해 쉽게 이해하고 접근 하기위한 초급자 대상 입문서이기 때문에 내용이 부족한 부분이 있을수 있을것 같습니다.
정정해야 하거나 추가하거나 더 알아야할 내용이 있으면 댓글로 남겨 주시면 감사히 받아 먹어 공부하겠습니다.!!</p>
</blockquote>
<blockquote>
<p>참고 : 10일 만에 배우는 네트워크 기초 모두의 네트워크 (미즈구치 카츠야 지음, 이승룡 옮김)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 코딩 기초 트레이닝 - 코드처리하기]]></title>
            <link>https://velog.io/@yhc_94/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9-%EA%B8%B0%EC%B4%88-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%8B%9D-%EC%BD%94%EB%93%9C%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@yhc_94/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%BD%94%EB%94%A9-%EA%B8%B0%EC%B4%88-%ED%8A%B8%EB%A0%88%EC%9D%B4%EB%8B%9D-%EC%BD%94%EB%93%9C%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 26 Dec 2023 13:28:25 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<h2 id="문제">문제</h2>
<p>링크 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/181932?language=javascript">https://school.programmers.co.kr/learn/courses/30/lessons/181932?language=javascript</a><br>
문자열 code가 주어집니다.
code를 앞에서부터 읽으면서 문자가 &quot;1&quot;이면 mode를 바꿉니다.</p>
<ul>
<li>mode가 0일 때<ul>
<li>idx가 짝수일 때만 code[idx]를 추가합니다.</li>
</ul>
</li>
<li>mode가 1일 때<ul>
<li>idx가 홀수일 때만 code[idx]를 추가합니다.</li>
</ul>
</li>
<li>단, 시작할 때 mode는 0이며, return 하려는 추가된 문자열이 빈문자열이면 &quot;EMPTY&quot;를 return 합니다.</li>
</ul>
<blockquote>
<h3 id="입출력-예">입출력 예</h3>
<p>code : &quot;abc1abc1abc&quot;
result :  &quot;acbac&quot;</p>
</blockquote>
<h3 id="작성한-코드">작성한 코드</h3>
<pre><code class="language-javascript">function solution(code) {
    let answer = &#39;&#39;;
    let mode = 0;
    for (let idx = 0; idx &lt; code.length; idx++){
      if(mode==0&amp;&amp;code[idx]!=&#39;1&#39;&amp;&amp;idx%2==0){
        answer += code[idx];
      }else if(code[idx]===&#39;1&#39;){
        mode = !mode;
      }else if (mode==1&amp;&amp;code[idx]!=&#39;1&#39;&amp;&amp;idx%2==1){
        answer += code[idx];
      }
    }
    if (!answer) answer=&#39;EMPTY&#39;
    return answer;
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[html 태그에 대한 고민]]></title>
            <link>https://velog.io/@yhc_94/html-%ED%83%9C%EA%B7%B8%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EB%AF%BC</link>
            <guid>https://velog.io/@yhc_94/html-%ED%83%9C%EA%B7%B8%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EB%AF%BC</guid>
            <pubDate>Fri, 22 Dec 2023 13:17:01 GMT</pubDate>
            <description><![CDATA[<p>이번에 한 페이지의 html 뼈대 부분을 맡게 되었다.
오른쪽 검은 상자들안에 각 팀원들 캐릭터 프로필이 들어가고 클릭을 하면 해당 팀원들의 사진과 상세 정보들이 나오는 기능의 페이지이다.</p>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/70631cad-2d97-4a16-8eb5-e7da6a737156/image.png" alt=""></p>
<p>나는 여기서 크게 오른쪽과 왼쪽 두 구역으로 나누어 생각했다.</p>
<ul>
<li>사진과 세부내용이 있는 왼쪽 구역</li>
<li>팀원 캐릭터 프로필이 들어갈 오른쪽 구역<pre><code class="language-html">  &lt;section&gt;
      &lt;div&gt;
          &lt;img src=&quot;...&quot; /&gt;
          &lt;p&gt;
              &lt;h1&gt;
                  홍길동
              &lt;/h1&gt;
              &lt;ol&gt;
                  &lt;li&gt;mbti - istj&lt;/li&gt;
                  &lt;li&gt;객관적으로 살펴본 자신의 장점
                      &lt;ul&gt;
                          &lt;li&gt;
                              침착하다.
                          &lt;/li&gt;
                          &lt;li&gt;
                              객관화가 잘되어있다.
                          &lt;/li&gt;
                      &lt;/ul&gt;
                  &lt;/li&gt;
                  &lt;li&gt;자신의 협업 스타일 소개
                      &lt;ul&gt;
                          &lt;li&gt;
                              경청을 잘하는 스타일
                          &lt;/li&gt;
                      &lt;/ul&gt;
                  &lt;/li&gt;
                  &lt;li&gt;
                      블로그 주소 : ....
                  &lt;/li&gt;
              &lt;/ol&gt;
          &lt;/p&gt;
      &lt;/div&gt;
      &lt;div&gt;
          &lt;ul&gt;
              &lt;li&gt;
                  &lt;img src=&quot;...&quot;&gt;
              &lt;/li&gt;
                            .
                            .
                       &lt;!--생략--&gt;
                            .
                            .
              &lt;li&gt;
                  &lt;img src=&quot;...&quot;&gt;
              &lt;/li&gt;
          &lt;/ul&gt;
      &lt;/div&gt;
  &lt;/section&gt;</code></pre>
</li>
</ul>
<blockquote>
<h1 id="고민한-점">고민한 점</h1>
</blockquote>
<ul>
<li>최대한 div 태그 남발하지 않기 <br><ul>
<li>h tag <ul>
<li>이름에 사용을 했다. 이름이 제목은 아니지만 기획된 페이지에서는 이름이 제목의 역할을 한다 생각하여 선택하게 되었다. ( 이게 맞는지는 잘 모르겠다. )</li>
</ul>
</li>
<li>ol, li, ul <ul>
<li>와이어프레임에 리스트로 나열 되있기 때문에 목적에 맞춰 이 태그 요소들을 선택했다.</li>
</ul>
</li>
<li>오른쪽 구역은 어떻게 할까 고민하다 대기업이 사용하는 방식이 좀 더 정확하다고 생각해 네이버에서 개발자 도구로 찾아봤을 때(나열된 인터넷 기사 사진들이나 쇼핑 상품들) 각각 아이템마다 li 태그가 사용되고 있는 것을 보았다. 그래서 이 페이지의 프로필들도 나열돼있는 형태라 li를 선택했다.
<img src="https://velog.velcdn.com/images/yhc_94/post/833cb0ee-8018-440c-a871-4b14f7fb7ced/image.png" alt=""></li>
</ul>
</li>
</ul>
<blockquote>
<h2 id="느낌">느낌</h2>
<p>금방 하는 작업이지만 그전에 생각해야 하는 부분이 많다는 것을 느꼈다. 그런데 내가 찾는다고 찾은 정보와 한다고 한 고민이 맞는 것인가에 대한 의구심도 있다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[새로 시작]]></title>
            <link>https://velog.io/@yhc_94/new</link>
            <guid>https://velog.io/@yhc_94/new</guid>
            <pubDate>Thu, 21 Dec 2023 12:02:44 GMT</pubDate>
            <description><![CDATA[<p>작년 여름에 3개월 과정의 부트캠프를 수료하고 취업으로 이어가지 못하고 1년이란 시간을 흘러 보냈다. 
다시 처음부터 기초부터 하고 싶어 여러 교육기관을 찾아보았고 비교해 보았을 때 프론트엔드 스택만 커리큘럼이 짜여있는 괜찮은 곳을 발견해 5월까지 다시 교육에 들어가게 되었다.</p>
<br>
<br>

<blockquote>
<p>오늘은 기본적인 linux 명령어, git에 대하여 배웠고
html, css, javascript로 팀 소개 페이지를 만드는 미니프로젝트를 시작했다.</p>
</blockquote>
<h3 id="기본적인-linux-명령어를-알아보자">기본적인 Linux 명령어를 알아보자</h3>
<ol>
<li>linux 명령어</li>
</ol>
<ul>
<li>pwd(print working directory)<ul>
<li>현재 작업중인 폴더</li>
</ul>
</li>
<li>~ (root) 최 상위 경로</li>
<li>ls (list)<ul>
<li>내 폴더 안에 있는 폴더 &amp; 파일 내역을 보여줌 <ul>
<li>ls -a (list all)</li>
<li>숨겨진 파일(보통 . 으로 시작함)도 모두 볼 수 있음</li>
</ul>
</li>
</ul>
</li>
<li>cd 폴더명 (change directory)<ul>
<li>ls 명령어에서 확인된 폴더로 이동 가능</li>
<li>.. =&gt; 한 단계 위의 폴더라는 뜻</li>
<li>cd 폴더명/폴더명 으로 쉽게 들어갈 수도 있다.</li>
</ul>
</li>
<li>mkdir (make directory)<ul>
<li>폴더를 만든다.</li>
</ul>
</li>
<li>touch 파일명<ul>
<li>현재 경로에서 파일을 생성하는 명령어</li>
<li>참고: 정확히는 파일의 생성과 파일의 날짜, 시간을 변경하는 명령어</li>
</ul>
</li>
</ul>
<h2 id="git">git</h2>
<blockquote>
<p>git 코드 변경점 기록, 버전 관리 도구(형상 관리 도구), 소프트웨어의 <strong>변경사항</strong>을 <strong>체계적으로 추적</strong>하고 <strong>통제</strong>하는 것 등 많은 설명이 있지만 쉽게 이야기해 파일, 폴더의 <strong>변경점</strong>을 편리하게 관리하기 위해 git을 사용한다고 생각하면 될것 같다.</p>
</blockquote>
<h2 id="github">Github</h2>
<blockquote>
<p><strong>백업</strong>과 <strong>공유</strong>가 가능한 온라인 코드 저장소</p>
</blockquote>
<h3 id="git-필수-명령어">Git 필수 명령어</h3>
<ul>
<li>git init<ul>
<li>initialize(초기화하다, 초기 세팅하다)의 준말.</li>
<li>프로젝트 시작 전 <strong>딱 한 번만 입력</strong>하면 됨.</li>
<li><strong>정확한</strong> 프로젝트 폴더(경로)에서 입력해야 함.</li>
<li>.git  이라는 폴더(숨겨진 폴더)가 생성 -&gt; 코드 변경을 git에서 추적</li>
</ul>
</li>
</ul>
<h4 id="저장명령어">저장명령어</h4>
<ul>
<li>git add 파일명<ul>
<li>저장하기 전 저장할 파일 지정</li>
<li>git add . -&gt; . 은 현재 나의 경로의 <strong>모든 변경된 사항</strong>을 말함</li>
</ul>
</li>
<li>git commit -m &quot;메세지 작성&quot; (코드에 대한 내용 작성하는게 좋음)<ul>
<li><strong>실제로 저장</strong>하는 명령어</li>
</ul>
</li>
</ul>
<blockquote>
<p>working directory, staging area, repositoy 알아보기</p>
</blockquote>
<h4 id="수정된-코드-github에-반영하기">수정된 코드 github에 반영하기</h4>
<ul>
<li>git push<ul>
<li>코드 수정</li>
<li>코드 저장 명령어 실행<ul>
<li>git add . &amp; git commit -m &quot;메세지&quot;</li>
</ul>
</li>
<li>git push origin 브랜치명</li>
</ul>
</li>
</ul>
<h2 id="미니프로젝트---팀-소개-페이지-만들기">미니프로젝트 - 팀 소개 페이지 만들기</h2>
<blockquote>
<p>첫날 6명의 인원이 배정되었고 12월 27일 까지 미니프로젝트를 진행하게 되었다. 간단히 html css javascript로 팀 소개 페이지를 만들어야 한다.
첫날은 간단히 서로 알아가는 시간과 간단히 역할 분담을 했다.
내일부터 맡은 부분 구현 하면서 블로깅 해야겠다.</p>
</blockquote>
<h2 id="각오">각오</h2>
<blockquote>
<h3 id="다시-약-5개월이란-시간동안-취업을-바라보고-뛰어야하는데-이전-경험에서-후회했던-부분을-이번에도-똑같은-부분에서-후회하지-않도록-조심하고-노력하자">다시 약 5개월이란 시간동안 취업을 바라보고 뛰어야하는데 이전 경험에서 후회했던 부분을 이번에도 똑같은 부분에서 후회하지 않도록 조심하고 노력하자.</h3>
</blockquote>
<h2 id="느낀점">느낀점</h2>
<blockquote>
<h3 id="처음-공부-시작했을-때가-생각이-났다">처음 공부 시작했을 때가 생각이 났다.</h3>
</blockquote>
<h3 id="열심히-하자">열심히 하자!</h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 연산자]]></title>
            <link>https://velog.io/@yhc_94/JavaScript-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@yhc_94/JavaScript-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Thu, 21 Dec 2023 02:03:11 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<p><strong>연산자(operator)</strong>는 하나 이상의 표현식을 대상으로 <strong>산술, 할당, 비교, 논리, 타입, 지수</strong> 연산 등을 수행해 하나의 값을 만든다.</p>
<h3 id="산술-연산자">산술 연산자</h3>
<ul>
<li>이항 산술 연산자
2개의 피연산자를 산술 연산해 숫자 값을 만든다.<pre><code class="language-javascript">  9 + 4 // -&gt; 13     (덧셈)
  9 - 4 // -&gt; 5      (뺄셈)
  9 * 4 // -&gt; 36     (곱셈)
  9 / 4 // -&gt; 2.25   (나눗셈)
  9 % 4 // -&gt; 1      (나머지)</code></pre>
<br>

</li>
</ul>
<h3 id="단항-산술-연산자">단항 산술 연산자</h3>
<p> 1개의 피연산자를 산술 연산해 숫자 값을 만든다.</p>
<ul>
<li>증가 감소 연산자 ( ++ / -- )<pre><code class="language-javascript"> // 증가, 감소 연산자
 let num = 94;
 num++; // num = num + 1;
 num--; // num = num - 1;</code></pre>
</li>
</ul>
<hr>
<pre><code>// 연산자 위치에 따른 차이점
// num++, num-- 피연산자 뒤에 위치한 경우 먼저 다른 연산을 수행한 후
// 피연산자의 값을 증가/감소 시킨다.

let num = 94;
alert(num++); // 94, alert(num) 먼저 수행 후 num = num + 1 수행
alert(num); // 95, 증가된 num 값 95 출력

// ++num, --num 피연산자 앞에 위치한 경우 먼저 피연산자의 값을 증가/감소시킨 후
// 다른 연산을 수행한다.

let num = 94;
alert(--num); // 93, num = num - 1 수행 후 감소된 num 값 93 출력
alert(num); // 93, 위와 같은 값 출력</code></pre><pre><code>- \+ ,  \- 연산자
``` javascript
    // + 연산자 (산술 연산자)
    // 숫자 타입이 아닌 피연산자에 사용하면 숫자 타입으로 변환하여 변환한다.
    // 피연산자는 변경점 없고 숫자 타입으로 변환한 값을 생성해서 반환한다.
    let str = &#39;94&#39;;
    let test = 0;
    test = +str; 
    // 숫자 타입으로 변환한 값을 생성해서 반환하기 때문에
    // str은 &#39;94&#39; 그대로고 test에는 변환된 숫자타입 값 94가 출력 된다.
    console.log(str); // &#39;94&#39;
    console.log(test); // 94

    let t = true;
    let f = false;
    console.log(+a); // 1
    console.log(+f); // 0

    // 문자열은 숫자 타입으로 변환할 수 없음 NaN을 반환한다.
    // 숫자로 구성된 문자열과 다름
    str = &#39;ninetyFour&#39;;
    console.log(+str); // NaN

    // 암묵전 타입 변환/ 타입 강제 변환
    94 + true; // 95,  true는 1로 변환된다.
    94 + false; // 94,  false는 0으로 변환된다.
    94 + null; // 94,  null은 0으로 변환된다.
    +undefined; // NaN,  undefined는 숫자 타입으로 변환되지 않는다.
    1 + undefined; // NaN

    // + 연산자 (문자열 연결 연산자)
    // 피연산자 중 하나 이상이 문자열인 겨우 문자열 연결 연산자로 동작한다.
    &#39;9&#39; + 4; // &#39;94&#39;
    9 + &#39;4&#39;; // &#39;94&#39;

    // - 연산자
    // + 연산자와 같이 숫자 타입이 아닌 피연산자를 숫자타입으로 변환하여 변환한다.
    // 차이점은 피연산자의 부호를 반전한 값을 반환한다.
    -&#39;94&#39;; // -94
    -true; // -1
    -&#39;ninetyFour&#39;; // NaN</code></pre><br>

<h3 id="할당-연산자">할당 연산자</h3>
<ul>
<li><p>우항에 있는 피연산자의 평가 결과를 좌항에 있는 변수에 할당한다.</p>
<pre><code class="language-javascript">  x = 94
  x += 94 // x = x + 94
  x -= 94 // x = x - 94
  x *= 94 // x = x * 94
  x /= 94 // x = x / 94
  x %= 94 // x = x % 94

  // 할당문은 값으로 평가되는 표현식인 문으로서 할당된 값으로 평가된다.

  let a, b, c;
  // 연쇄 할당. 오른쪽에서 왼쪽으로 진행.
  // 1. c = 0 : 0으로 평가된다.
  // 2. b = 0 : 0으로 평가된다.
  // 3. a = 0 : 0으로 평가된다.
  a = b = c = 0;
  console.log(a,b,c); // 0 0 0</code></pre>
</li>
</ul>
<br>

<h3 id="비교-연산자">비교 연산자</h3>
<p>비교 연산자는 좌항과 우항의 피연산자를 비교한 다음 결과를 불리언 값으로 반환한다.</p>
<ul>
<li>동등 / 일치 비교 연산자<pre><code class="language-javascript">  ==  동등  비교 |  x == y   | x와 y의 값이 같음
  === 일치  비교 |  x === y  | x와 y의 값, 타입이 같음
  !=  부동등 비교 |  x != y   | x와 y의 값이 다름
  !== 불일치 비교 |  x !== y  | x와 y의 값, 타입이 다름</code></pre>
</li>
</ul>
<blockquote>
<p>참고: 모던 자바스크립트 Deep Dive</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] 데이터 타입]]></title>
            <link>https://velog.io/@yhc_94/JavaScript-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</link>
            <guid>https://velog.io/@yhc_94/JavaScript-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</guid>
            <pubDate>Mon, 18 Dec 2023 11:35:57 GMT</pubDate>
            <description><![CDATA[<h3 id="span-style--color-violet데이터-타입타입data-typetypespan"><span style = 'color: violet'><strong>데이터 타입/타입(data type/type)</strong></span></h3>
<ul>
<li><strong>원시타입(primitive type)</strong><ul>
<li>숫자 타입(number) - 숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재</li>
<li>문자열 타입(string) - 문자열</li>
<li>불리언 타입(boolean) - 논리적 참(true)과 거짓(false)</li>
<li>undefined 타입 - var 키워드로 선언된 변수에 암묵적으로 할당되는 값<ul>
<li>null 타입 - 값이 없다는 것을 의도적으로 명시할 때 사용하는 값</li>
<li>심벌 타입(symbol) - ES6에서 추가된 7번째 타입</li>
</ul>
</li>
<li>객체 타입<ul>
<li>객체,함수,배열 등</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="숫자-타입">숫자 타입</h3>
<ul>
<li><p><strong>하나의 숫자 타입</strong>만 존재한다.(C나 JAVA의 경우 int, long, float, double등 다양한 숫자 타입이 있음)</p>
</li>
<li><p>모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터 타입이 존재하지 않는다.</p>
<blockquote>
</blockquote>
<pre><code class="language-javascript">// 모두 숫자 타입이다.
let integer = 10; // 정수
let double = 10.12; // 실수
let negative = -20; // 음의 정수</code></pre>
</li>
<li><p>2진수, 8진수, 16진수를 표현하기 위한 데이터  타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로 해석된다.</p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/e2522d8f-470c-40ae-9fbb-5815f0eba332/image.png" alt=""></p>
</li>
<li><p>자바스크림트의 숫자 타입은 모든 수를 실수로 처리한다. </p>
</li>
<li><blockquote>
<p>정수로 표시되어도 사실은 실수라는 것 그래서 정수로 표시되는 수끼리 나누어도 실수가 나올 수 있다.
<img src="https://velog.velcdn.com/images/yhc_94/post/2a371a4e-7e6a-451c-b794-238bb0938f8e/image.png" alt=""></p>
</blockquote>
</li>
<li><p>숫자 타입에 세 가지 특별한 값도 있다.</p>
<ul>
<li>Infinity: 양의 무한대</li>
<li>-Infinity: 음의 무한대</li>
<li>NaN: 산술 연산 불가 (not-a-number)<blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/f5660ece-cd6f-4916-bb94-800a008fc4fe/image.png" alt=""></p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h3 id="문자열-타입">문자열 타입</h3>
<ul>
<li>작은따옴표(&#39; &amp;nbsp&amp;nbsp&#39;), 큰따옴표(&quot; &amp;nbsp&amp;nbsp&quot;), 백틱(` &amp;nbsp&amp;nbsp`)으로 텍스트를 감싸 사용한다. 일반적인 표기법은 작은따옴표를 사용한다.</li>
</ul>
<h3 id="템플릿-리터럴">템플릿 리터럴</h3>
<ul>
<li>ES6부터 도입된 새로운 문자열 표기법이다.</li>
<li>백틱(`&amp;nbsp&amp;nbsp`)을 사용해 표현한다.</li>
<li>멀티라인 문자열 기능을 제공한다.<blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/0432c2b3-e102-4491-9ed0-c25c22b912ef/image.png" alt="">
백틱으로 감싼 문자열은 줄바꿈(개행)이 가능하지만 작은 따옴표로 감싼 일반 문자열은 줄을 바꾸며 온전히 감싸지지 않아 multiline 부분이 키워드나 식별자 같은 토큰으로 인식되어 에러가 발생한다.</p>
</blockquote>
</li>
</ul>
<h3 id="표현식-삽입">표현식 삽입</h3>
<ul>
<li><p>일반 문자열은 연산자 + 를 사용해 표현식을 연결할 수 있다.</p>
<ul>
<li><strong>+ 연산자</strong>는 피연산자 중 하나 이상이 문자열인 겨우 문자열 연결 연산자로 동작하고, 그 외의 경우는 덧셈 연산자로 동작한다.<blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/c5ae7bb5-2812-45ee-9fa7-e7411caf552b/image.png" alt=""></p>
</blockquote>
</li>
</ul>
</li>
<li><p>템플릿리터럴은 ${&amp;nbsp&amp;nbsp&amp;nbsp}으로 표현식을 감싼다.</p>
<ul>
<li>이때 표현식의 평가는 문자열로 타입이 강제로 변환되어 삽입된다.<blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/2d8343dc-f2d5-4803-9f1d-33ca91cef24d/image.png" alt=""></p>
</blockquote>
</li>
</ul>
</li>
</ul>
<h3 id="불리언-타입">불리언 타입</h3>
<ul>
<li>논리적 참, 거짓을 나타내는 <strong>true</strong> 와 <strong>false</strong> 뿐이다.</li>
</ul>
<h3 id="undefined-타입">undefined 타입</h3>
<ul>
<li>undefined가 유일하다.</li>
<li>개발자가 의도적으로 할당하기 위한 값이 아니라 엔진이 변수를 초기화 할 때 사용하는 값이다.</li>
<li>JS엔진이  변수를 초기화하는 데 사용하는 undefined를 개발자가 의도적으로 변수에 할당하면 undefined의 본래 취지와 어긋나고, 혼란을 줄 수 있으므로 권장하지 않는다.<ul>
<li>변수에 값이 없다는 것을 명시하고 싶을 때는 null을 할당한다.</li>
</ul>
</li>
</ul>
<h3 id="null-타입">null 타입</h3>
<ul>
<li>null이 유일하다.</li>
<li>Null,NULL등과 다르다(자바스크립트는 대소문자를 구별하기 때문)</li>
<li>변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.</li>
<li>함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 바환하기도 한다.</li>
</ul>
<h3 id="symbol-타입">symbol 타입</h3>
<ul>
<li>변경 불가능한 원시 타입의 값이다.</li>
<li>다른 값과 중복되지 않는 유일무이한 값이다.</li>
<li>symbol 이외의 원시 값은 리터럴을 통해 생성하지만 symbol은 Symbol 함수를 호출해 생성한다. 이때 생성된 symbol값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 값이다.</li>
</ul>
<h3 id="객체-타입">객체 타입</h3>
<ul>
<li>숫자, 문자열, 불리언, undefined, null, symbol    이외의 값은 모두 객체 타입이다.</li>
</ul>
<blockquote>
<p>참고: 모던 자바스크립트 Deep Dive</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] - 표현식과 문]]></title>
            <link>https://velog.io/@yhc_94/JavaScript-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-%EB%AC%B8</link>
            <guid>https://velog.io/@yhc_94/JavaScript-%ED%91%9C%ED%98%84%EC%8B%9D%EA%B3%BC-%EB%AC%B8</guid>
            <pubDate>Thu, 14 Dec 2023 10:10:35 GMT</pubDate>
            <description><![CDATA[<h3 id="값value">값(value)</h3>
<p><span style='color: violet'>값(value)</span>은 <strong>식(표현식/expression)</strong>이 평가되어 생성된 결과를 말한다.</p>
<pre><code class="language-javascript">// 변수 sum에 10 + 20이 평가되어 값 30이 할당된다.
let sum = 10 + 20; </code></pre>
</br>

<h3 id="리터럴literal">리터럴(literal)</h3>
<p><span style='color: violet'>리터럴(literal)</span>은 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 약속된 기호(&#39;&#39;, . , [ ], { }, / / 등 )를 사용해 값을 생성하는 <strong>표기법(notation)</strong>을 말한다.
자바스크립트 엔진은 코드가 실행되는 시점인 <strong>런타임(runtime)</strong>에 리터럴을 평가해 값을생성한다. 즉, 리터럴은 값을 생성하기 위해 미리 <strong>약속한 표기법</strong>이라고 할 수 있다.</p>
<pre><code class="language-javascript">    100 // 정수리터럴
    10.5 // 부동소수 리터럴
    0b01000001 // 2진수 리터럴, 0b로 시작
    0o101 // 8진수 리터럴, ES6에서 도입. 0o로 시작
    0x41 // 16진수 리터럴, ES6에서 도입. 0x로 시작
    &#39;hello&#39;, &quot;world&quot; // 문자열 리터럴
    true, false // 불리언 리터럴
    null // null리터럴
    undefined // undefined리터럴
    { name: &#39;yang&#39;, mbti: &#39;INFP&#39; } // 객체 리터럴
    [ a, b, c ] // 배열 리터럴
    function() {} // 함수 리터럴
    /[A-Z]+/g // 정규 표현식 리터럴</code></pre>
</br>

<h3 id="표현식expression">표현식(expression)</h3>
<p><span style='color: violet'>표현식(expression)</span>은 값으로 평가될 수 있는 <strong>문(statement)</strong>이다. 즉 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.</p>
<pre><code class="language-javascript">    let score = 20; // 20은 리터럴이자 값이다
    let score2 = 10+30; // 리터럴과 연산자로 이루어짐. 값 40을 생성
    score; // 값 20
    score1; // 값 40</code></pre>
<p>표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이루어질 수 있다.</p>
<ul>
<li><strong>값으로 평가될 수 있는 문은 모두 표현식이다.</strong></li>
<li><strong>표현식은 값으로 평가되어 표현식은 값처럼 사용할 수 있다.</strong><pre><code class="language-javascript"> let sum = function (number) {
             return number + 5;
         }
 // 함수 sum 은 10으로 평가된다.
 sum(5)+5; // 15</code></pre>
</li>
</ul>
</br>

<h3 id="문statement">문(statement)</h3>
<p><span style='color: violet'>문(statement)</span>은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다.
문은 여러 <strong>토큰(token)</strong>으로 구성된다.</p>
<p><span style='color: violet'>토큰(token)</span>은 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.</p>
<pre><code class="language-javascript">    let sum = 5 + 5;
    // 키워드 let, 식별자 sum, 연산자 =, 리터럴 5, ;
    // 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰이다.</code></pre>
<ul>
<li><p>문은 명령문이라고도 부른다, 문은 컴퓨터에 내리는 명령이다.</p>
</li>
<li><p>문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.</p>
<pre><code class="language-javascript">  //변수 선언문
 let a;

  //할당문
 a = 10;

  //함수 선언문
 function abc () {}

   //조건문
 if ( a &gt; 1 ) { console.log(a); }

  //반목문
 for( let i = 0; i &lt; 2; i++ ) { console.log(i); }</code></pre>
</li>
</ul>
</br>

<h3 id="세미콜론--과-세미콜론-자동-삽입-기능">세미콜론( ; )과 세미콜론 자동 삽입 기능</h3>
<ul>
<li>세미콜론( ; )은 문의 종료를 나타낸다.</li>
<li>세미콜론으로 문이 종료한 위치를 파악하고 순차적으로 하나씩 문을 실행한다.</li>
<li>단 코드블록( { ... } ) 뒤에는 세미콜론을 붙이지 않는다.<ul>
<li><strong>if문, for문, 함수 등의 코드 블록 뒤에는 세미콜론을 붙이지 않는다.</strong> 이러한 코드 블록은 언제나 문의 종료를 의미하는 <strong>자체 종결성</strong>을 갖기 때문이다.</li>
<li>문의 끝에 세미콜론은 옵션이다.(생략가능)<ul>
<li>세미콜론 자동 삽입 기능 <strong>ASI</strong>( <strong>A</strong>utomatic <strong>S</strong>emicolon <strong>I</strong>nsertion )이 암묵적으로 수행되기 때문이다.</li>
</ul>
</li>
<li><strong>ASI 동작과 개발자의 예측이 일치하지 않는 경우가 있어 세미콜론 사용을 권장하는 분위기이다.</strong></li>
</ul>
</li>
</ul>
</br>

<blockquote>
<p>문(statement)에 대해서 공부를 하면서 통용되는 것이 많아 이것이 저것 같고 저것이 이것 같은 경우가 있어 조금 헷갈리는 부분이 있다.
<br>
정리하자면...</p>
</blockquote>
<ul>
<li>문(statement)는 프로그램을 구성하는 (기본/최소 실행) 단위, 명령문이라고도 하며 token(문법적으로 더이상 나눌 수 없는 코드의 기본 요소)으로 구성되어있다.<ul>
<li>선언문 할당문 조건문 반복문 등으로 구분 가능하다.</li>
<li>표현식(expression)은 값으로 평가되는 모든 문을 표현식이라고 한다. 표현식은 값처럼 사용할 수도 있다.</li>
<li>세미콜론은 문의 종료를 나태내며 코드블록은 자체 종결성을 가져 뒤에 세미콜론을 붙이지 않는다.</li>
<li>자바스크립트는 문의 끝에 세미콜론을 생략 가능하지만 권장하지 않는다.</li>
</ul>
</li>
</ul>
<blockquote>
<p>참고: 모던 자바스크림트 Deep Dive</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JavaScript] - 변수]]></title>
            <link>https://velog.io/@yhc_94/JavaScript-%EB%B3%80%EC%88%98</link>
            <guid>https://velog.io/@yhc_94/JavaScript-%EB%B3%80%EC%88%98</guid>
            <pubDate>Tue, 12 Dec 2023 11:03:18 GMT</pubDate>
            <description><![CDATA[<p><span style="color:violet"><strong>변수</strong>(variable)</span>는 하나의 값을 저장하기 위해 확보한메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.</p>
<pre><code class="language-javascript">    let result = 10 + 20;</code></pre>
<p>10 + 20은 연산을 통해 새로운 값 30을 생성한다. 그리고 연산을 통해 생성된 값 30은 메모리 공간에 저장된다. <em>이때 메모리 공간에 저장된 값 30을 다시 읽어 들여 재사용할 수 있도록 값이 저장된 메모리 공간에 <strong>상징적인 이름을 붙인 것</strong>이 바로 <span style="color:violet"><strong>변수</strong></span>다.</em></p>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/0cc572f1-ef13-49a7-924c-25e2b429fa16/image.png" alt=""></p>
<blockquote>
<p>메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
<strong>변수이름</strong>(변수명) : <strong>result</strong><br/>
변수에 저장된 값
<strong>변수 값</strong>: <strong>30</strong><br/>
<img src="https://velog.velcdn.com/images/yhc_94/post/09757f88-ce1d-4f52-9b9b-773bb358291b/image.png" alt="">
변수에 값을 저장하는 것을 <strong>할당/assignment(대입,저장)</strong>이라하고
변수에 저장된 값을 읽어 들이는 것을 <strong>참조/reference</strong>라 한다.</p>
</blockquote>
<h3 id="식별자">식별자</h3>
<p><strong>식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.</strong></p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/4f97fbbc-6a06-4ce7-a2db-449e4bafcbdc/image.png" alt=""></p>
<p><strong>식별자는 값이 아니라 메모리 주소를 기억하고 있다.</strong>
식별자가 값을 구별해서 식별한다는 것은 식별자가 기억하고 있는 메모리 주소를 통해 메모리 공간에 저장된 값에 접근할 수 있다는 의미다. 즉, 식별자는 메모리 주소에 붙인 이름이라고 할 수 있다.</p>
<p>식별자라는 용어는 변수 이름만이 아니라 <em>변수, 함수, 클래스 등의 이름은 모두 식별자다.</em> <strong>메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 부른다.</strong></p>
<p>변수, 함수, 클래스 등의 이름과 같은 식별자는 네이밍 규칙을 준수해야 하며, <strong>선언/declaration</strong>에 의해 자바스크립트 엔진에 식별자의 존재를 알린다.</p>
<h3 id="변수-선언">변수 선언</h3>
<p>변수 선언(variable declatation)이란 변수를 생성하는 것을 말한다.
값을 저장하기 위한 메모리 공간을 확보(allocate)하고 변수 이름과 확보된 메모리 공간의 주소를 연결(<a href="https://ko.wikipedia.org/wiki/%EB%84%A4%EC%9E%84_%EB%B0%94%EC%9D%B8%EB%94%A9">name binding</a>)해서 값을 저장할 수 있게 준비하는 것이다.</p>
<p><strong>변수를 선언할 때는 <span style='color: violet'>var, let, const</span> 키워드를 사용한다</strong></p>
<pre><code class="language-javascript">    var score; //변수 선언(변수 선언문)</code></pre>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/c59f90b2-2dd1-4bdb-950d-fccbc4d832db/image.png" alt=""></p>
<p>자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행한다.</p>
<ul>
<li><p>선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.</p>
</li>
<li><p>초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화(iniitialization) 한다.
<a href="https://262.ecma-international.org/11.0/#sec-variable-statement">https://262.ecma-international.org/11.0/#sec-variable-statement</a></p>
<ul>
<li>만약 초기화 단계를 거치지 않으면 확보된 메모리 공간에는 이전에 다른 애플리케이션이 사용했던 값이 남아 있을 수 있다.(쓰레기 값/garbage value)</li>
</ul>
</li>
</ul>
<p>변수를 사용하려면 반드시 선언이 필요하다(변수뿐만 아니라 모든 식별자 포함) 만약 선언하지 않은 식별자에 접근하면 <strong><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError">ReferenceError(참조에러)</a></strong>가 발생한다.</p>
<blockquote>
</blockquote>
<p><img src="https://velog.velcdn.com/images/yhc_94/post/c96ffb6c-ceee-4136-9d70-898e785760cf/image.png" alt=""></p>
<h3 id="값의-재할당">값의 재할당</h3>
<p>재할당이란 이미 값이 할당되어 있는 변수에 새로운 값을 또다시 할당하는것을 말한다.</p>
<pre><code class="language-javascript">    var score = 80; // 변수 선언과 값의 할당
    score = 90; // 값의 재할당</code></pre>
<p>값을 재할당할 수 없어서 변수에 저장된 값을 변경할 수 없다면 변수가 아니라 상수(constant)라 한다.</p>
<blockquote>
</blockquote>
<p>ES6에서 도입된 const 키워드를 사용해 선언한 변수는 재할당이 금지된다 즉 const 키워드는 단 한 번만 할당할 수 있는 변수를 선언한다.
<img src="https://velog.velcdn.com/images/yhc_94/post/cabef802-3b1e-4f62-acdd-a0ebaec72429/image.png" alt=""></p>
<h3 id="식별자-네이밍-규칙">식별자 네이밍 규칙</h3>
<ul>
<li>식별자는 특수문자를 제외한 <strong>문자, 숫자, 언더스코어( _ ), 달러 기호($)</strong>를 포함할 수 있다.</li>
<li>단, 식별자는 특수문자를 제외한 <strong>문자, 언더스코어( _ ), 달러 기호($)</strong>로 시작해야한다. <span style = 'color:red'><strong>숫자</strong></span> 로 시작하는 것은 허용하지 않는다.</li>
<li>예약어는 식별자로 사용할 수 없다.<blockquote>
</blockquote>
자바스크립트 예약어
<img src="https://velog.velcdn.com/images/yhc_94/post/2618c65f-f097-46f9-863b-079511003db9/image.png" alt=""></li>
</ul>
<blockquote>
<pre><code class="language-javascript">let person, $elem, _name, first_name, val1;
// (,)로 구분해 하나의 문에서 여러 개를 한번에 선언할 수 있다.
// 가독성이 나빠지므로 권장하지는 않는다.</code></pre>
</blockquote>
<hr>
<p>let 이름, やすお;
// ES5부터 식별자를 만들 때 유니코드 문자 허용
// 하지만 알파베 외의 유니코드 문자로 명명된 식별자를 사용하는 것은 바람직하지 않으므로 권장하지 않는다.</p>
<hr>
<p>let first-name; // SyntaxError: Unexpected token -
let 1st; // SyntaxError: Invalid or unexpected token
let this; // SyntaxError: Unexpected token this</p>
<hr>
<p>let firstname;
let firstName;
let FIRSTNAME;
// 대소문자를 구별하므로 각각 별개의 변수다.</p>
<hr>
<p>// 변수 이름은 목적을 쉽게 이해할 수 있도록 명확히 표현해야 한다.
let x = 10; // 변수 x가 의미하는 바르 알 수 없다.
let score = 100; // 변수 score 는 점수를 의미한다.</p>
<pre><code>
#### 네이밍 컨벤션
&gt;
하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 한눈에 구분하기 위해 규정한 명명 규칙이다.
자바스크립트에서는 일반적으로 변수나 함수의 이름에는 _카멜 케이스_를 사용하고 생성자 함수, 클래스의 이름에는 _파스칼 케이스_를 사용한다.

```javascript
// 카멜 케이스(camelCase)
let firstName;

// 스네이크 케이스(snake_case)
let first_name;

// 파스칼 케이스(PascalCase)
let FirstName;

// 헝가리언 케이서(typeHungarianCase)
let strFirstName; // type + identifier
let $elem = document.getElementById(&#39;myId&#39;); // DOM노드
let observavle$ = fromEvent(document, &#39;click&#39;); //RxJS 옵저버블</code></pre><blockquote>
<p>javascript를 공부하기 위해 많은 추천을 받은 모던 자바스크립트 Deep Dive를 선택하였다. 공부 한 내용을 작성하는데 대부분 교재 내용을 그대로 작성한 부분이 많이 보인다. 다음 포스트부터 좀 더 정리된 내용과 내것으로 만든 내용을 작성할 수 있도록 노력해야겠다.</p>
</blockquote>
<blockquote>
<p>참고: 모던 자바스크립트 Deep Dive</p>
</blockquote>
]]></description>
        </item>
    </channel>
</rss>