<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>promotion_dev.log</title>
        <link>https://velog.io/</link>
        <description>코드 한 줄</description>
        <lastBuildDate>Tue, 14 Mar 2023 07:28:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>promotion_dev.log</title>
            <url>https://velog.velcdn.com/images/promotion_dev/profile/11fd34cf-da39-4fe7-b0ec-d1a8fb2e6735/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. promotion_dev.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/promotion_dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[코딩테스트] 풀이 2일차]]></title>
            <link>https://velog.io/@promotion_dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%92%80%EC%9D%B4-2%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@promotion_dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%92%80%EC%9D%B4-2%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Tue, 14 Mar 2023 07:28:51 GMT</pubDate>
            <description><![CDATA[<h3 id="프로그래머스-스쿨-코딩테스트--양꼬치">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120830">양꼬치</a></h3>
<hr>
<h4 id="1-문제">1. 문제</h4>
<p>머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.</p>
<h4 id="2-나의-풀이">2. 나의 풀이</h4>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">// 함수 정규식
function solution(n, k) {
    let drink = k * 2000
    let sale = Math.trunc(n/10)
    return (12000*n) + ((k-sale)*2000)
}

}</code></pre>
<p>❷ Tilt틸드문법
<code>~</code> : 32비트 정수로 변환한 후 <code>NOT</code> 연산자를 실행
      결과적으로는 -(n+1)
<code>~~</code> : Math.floor와 동등하게 쓰이는 연산자</p>
<pre><code class="language-javascript">// 익명함수
let solution = function(n, k){
    k -= ~~(n/10); //n을 10개 이상 먹으면 K에서 뺴준다.
    if (k &lt; 0) k = 0; //k가 -갯수일 때에는 0 처리
    return (n*12000) + (k*2000)
}

solution();
</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--순서쌍의-개수">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120836">순서쌍의 개수</a></h3>
<hr>
<h4 id="1-문제-1">1. 문제</h4>
<p>순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-1">2. 나의 풀이</h4>
<p>❶ 함수 정규식을 이용한 풀이</p>
<ul>
<li>다중 for문을 통해서 곱셈을 반복해서 a*b = n이 나오는 식</li>
<li>조건이 성립하는 경우 result +1 값으로 순서쌍 체크</li>
<li>해당 코드는 무한루프 발생 &gt; 왜 그런지 잘 모르겠음<pre><code class="language-javascript">// 함수 정규식
function solution (n) {
  let result = 0;
  for(let a = 1; a &lt;= n; a++) {
      for(let b = 1; b &lt;= n; b++) {
      if((a * b) == n) result += 1;
  } 
}    
return result;
}</code></pre>
</li>
</ul>
<p>❷ 간단한 계산</p>
<ul>
<li>a로 n을 나누었을 때, 나머지가 0이면 성립</li>
<li>6 = (1<em>6) (2</em>3) (3<em>2) (6</em>1) 모두 성립</li>
<li>for문을 통해서 1개의 변수만으로 체크 가능</li>
</ul>
<pre><code class="language-javascript">function solution(n) {
    var answer = 0;
    for(let i = 0;i&lt;=n;i++){
        if(n % i === 0 ){
            answer += 1
        }
    }
    return answer;
}</code></pre>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[코딩테스트] 풀이 1일차]]></title>
            <link>https://velog.io/@promotion_dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%92%80%EC%9D%B4-1%EC%9D%BC%EC%B0%A8</link>
            <guid>https://velog.io/@promotion_dev/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%92%80%EC%9D%B4-1%EC%9D%BC%EC%B0%A8</guid>
            <pubDate>Mon, 13 Mar 2023 08:08:21 GMT</pubDate>
            <description><![CDATA[<h3 id="프로그래머스-스쿨-코딩테스트--두-수의-합">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120802">두 수의 합</a></h3>
<hr>
<h4 id="1-문제">1. 문제</h4>
<p>정수 num1과 num2가 주어질 때, num1과 num2의 합을 return하도록 soltuion 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이">2. 나의 풀이</h4>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">// 함수 정규식
function solution(num1, num2) {
    const result = num1 + num2
    return result;
}</code></pre>
<p>❷ 익명함수를 이용한 풀이</p>
<pre><code class="language-javascript">// 익명함수
let solution = function(a, b){
    const result = a + b
    return result;
}

solution();
</code></pre>
<p>❸ 화살표 함수를 이용한 풀이</p>
<pre><code class="language-javascript">// 화살표 함수
let solution = (a,b) =&gt; a + b;

solution();</code></pre>
<h4 id="3-다른-풀이">3. 다른 풀이</h4>
<p><code>num1</code>과 <code>num2</code>의 값의 범위를 다중조건으로 지정</p>
<pre><code class="language-javascript">function solution(num1, num2) {    
    if(-50000&lt;=num1 &amp;&amp; num1&lt;=50000){
        if(-50000&lt;=num2 &amp;&amp; num2&lt;=50000){
            const answer = num1 + num2;

            return answer;
        }
    }
}</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--두-수의-차">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120803">두 수의 차</a></h3>
<hr>
<h4 id="1-문제-1">1. 문제</h4>
<p>정수 num1과 num2가 주어질 때, num1에서 num2를 뺀 값을 return하도록 soltuion 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-1">2. 나의 풀이</h4>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">//정규식
function solution(num1, num2) {
    result = num1 - num2
    return result;
}</code></pre>
<p>❷ 익명함수를 이용한 풀이</p>
<pre><code class="language-javascript">//익명함수
const solution = function(a,b) {
    const result = a-b
    return result;
}

solution();</code></pre>
<p>❸ 화살표 함수를 이용한 풀이</p>
<pre><code class="language-javascript">const solution = (a,b) =&gt; {
    const result = a - b
    return result;
}

solution();</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--두-수의-곱">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120804">두 수의 곱</a></h3>
<hr>
<h4 id="1-문제-2">1. 문제</h4>
<p>정수 num1, num2가 매개변수 주어집니다. num1과 num2를 곱한 값을 return 하도록 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-2">2. 나의 풀이</h4>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">//정규식
function solution(num1, num2) {
    const result = num1 * num2
    return result;
}</code></pre>
<p>❷ 익명함수를 이용한 풀이</p>
<pre><code class="language-javascript">//익명함수
const solution = function(a,b) {
    const result = a*b
    return result;
}

solution();</code></pre>
<p>❸ 화살표 함수를 이용한 풀이</p>
<pre><code class="language-javascript">const solution = (a,b) =&gt; {
    const result = a * b
    return result;
}

solution();</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--몫-구하기">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120805">몫 구하기</a></h3>
<hr>
<h4 id="1-문제-3">1. 문제</h4>
<p>정수 num1, num2가 매개변수로 주어질 때, num1을 num2로 나눈 몫을 return 하도록 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-3">2. 나의 풀이</h4>
<p><code>parseInt</code>: 문자열로 변환 &gt; 정수를 반환 : 문자열에서 숫자를 추출하는 용도.
<code>Math.floor</code> : 작은 정수 중에서 가장 가까운 큰 수 
<code>Math.trunc</code>: 몫을 구하기 위해 함수를 이용하여, 소숫점 이하는 버리게 된다. (반올림X)</p>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">//정규식
function solution(num1, num2) {
    const result = Math.trunc(num1 / num2)
    return result;
}</code></pre>
<p>❷ 익명함수를 이용한 풀이</p>
<pre><code class="language-javascript">//익명함수
function solution(num1, num2) {
    const result = Math.trunc(num1 / num2)
    return result;
}
solution();</code></pre>
<p>❸ 화살표 함수를 이용한 풀이</p>
<pre><code class="language-javascript">const solution = (a,b) =&gt; {
    const result = Math.trunc(a/b)
    return result; 
}

solution();</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--나머지-구하기">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120810">나머지 구하기</a></h3>
<hr>
<h4 id="1-문제-4">1. 문제</h4>
<p>정수 num1, num2가 매개변수로 주어질 때, num1를 num2로 나눈 나머지를 return 하도록 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-4">2. 나의 풀이</h4>
<p><code>Math.trunc</code>: 몫을 구하기 위해 함수를 이용하여, 소숫점 이하는 버리게 된다. (반올림X)</p>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">//정규식
function solution(num1, num2) {
    const result = (num1 % num2)
    return result
}</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--나이-출력">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120820">나이 출력</a></h3>
<hr>
<h4 id="1-문제-5">1. 문제</h4>
<p>머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-5">2. 나의 풀이</h4>
<ol>
<li>나이를 연도로 변환해라 : ( 2022년 - age ) + 1</li>
<li>우리가 나이를 세는 것과 동일</li>
</ol>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">function solution(age) {
    const birth = (2022 - age) + 1;
    return birth;
}</code></pre>
<p>❷ 화살표 함수를 이용한 풀이</p>
<pre><code class="language-javascript">const solution = (age) =&gt; {
    const birth = (2022 - age) +1;
    return birth;
}
solution();</code></pre>
<h4 id="3-다른-풀이-1">3. 다른 풀이</h4>
<ul>
<li><code>Date()</code> : 날짜를 저장하거나 / 날짜와 관련된 메서드 저장</li>
<li><code>getFullYear()</code> : 연도 (네 자릿수)를 반환합니다.</li>
</ul>
<p>1.현재의 날짜를 출력 가능</p>
<pre><code class="language-javascript">let now = new Date();
alert( now ); // 현재 날짜 및 시간이 출력됨</code></pre>
<p>2.날짜의 구성요소 얻기</p>
<ul>
<li>getFullYear()
연도(네 자릿수)를 반환합니다.</li>
<li>getMonth()
월을 반환합니다(0 이상 11 이하).</li>
<li>getDate()
일을 반환합니다(1 이상 31 이하). 어! 그런데 메서드 이름이 뭔가 이상하네요.</li>
<li>getHours(), getMinutes(), getSeconds(), getMilliseconds()
시, 분, 초, 밀리초를 반환합니다.</li>
</ul>
<pre><code class="language-javascript">//getFullYear에서 2023년이 출력된다.
function solutin(age) {
    return new Date().getFullYear() - age + 1;
}</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--각도기">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120829">각도기</a></h3>
<hr>
<h4 id="1-문제-6">1. 문제</h4>
<p>각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.</p>
<h4 id="2-나의-풀이-6">2. 나의 풀이</h4>
<ol>
<li>다중 조건을 이용한 각도계산</li>
</ol>
<p>❶ 함수 정규식을 이용한 풀이</p>
<pre><code class="language-javascript">function solution(angle) {
    if (angle &gt; 0 &amp;&amp; angle &lt; 90) {
        return 1;  
    } else if (angle === 90) { 
        return 2;
    } else if (angle &gt; 90 &amp;&amp; angle &lt; 180) {
        return 3; 
    } else if (angle === 180) {
        return 4
    } else {
        console.log(&quot;각도를 다시 입력해주세요.&quot;)
    }
}</code></pre>
<h4 id="3-다른-풀이-2">3. 다른 풀이</h4>
<p>❶ 삼항연산자를 이용한 풀이
조금 더 코드가 깔끔해진다.
하지만 190도인 경우에도 4가 나와서 이 코드는 &#39;예외처리&#39; 에서 100% 정확하지는 않는 것 같다.</p>
<pre><code class="language-javascript">function solution(angle) {
    return angle &lt; 90 ? 1 : angle === 90 ? 2 : angle &lt; 180 ? 3: 4;
}</code></pre>
<p>❷ filter를 이용한 풀이</p>
<ul>
<li>filter() 메서드는 주어진 함수의 테스트를 통과(true)하는 모든 요소를 모아 새로운 배열로 반환합니다.</li>
<li>length를 통해서 [0,90,91,180] 가 배열값이 1,2,3,4 값을 갖게 했습니다.</li>
<li>배열의 길이 = length</li>
</ul>
<pre><code class="language-javascript">function solution(angle){
    return [0,90,91,180].filter(x =&gt; angle&gt;=x).length;
}</code></pre>
<hr>
<h3 id="프로그래머스-스쿨-코딩테스트--짝수의-합">프로그래머스 스쿨 코딩테스트 : <a href="https://school.programmers.co.kr/learn/courses/30/lessons/120831">짝수의 합</a></h3>
<hr>
<h4 id="1-문제-7">1. 문제</h4>
<p>정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.</p>
<h4 id="2-나의-풀이-7">2. 나의 풀이</h4>
<ol>
<li>다중 조건을 이용한 각도계산</li>
</ol>
<p>❶ 함수 정규식을 이용한 풀이</p>
<ul>
<li>초큼 어려웠다..</li>
<li><code>n</code> 이하의 짝수를 어떻게 구하지? : 반복문</li>
<li>수들을 어떻게 담지 ? : 빈 객체 result 생성후 반복문</li>
<li>그들의 합은 : result += i를 통해 조건이 통하가면 더해가는 방식</li>
</ul>
<pre><code class="language-javascript">function solution(n) {
    let result = 0; 
    for (let i = 0; i &lt;= n; i++) {
        if (i % 2 === 0) result += i
    }
    return result
}</code></pre>
<h4 id="3-다른-풀이-3">3. 다른 풀이</h4>
<p>❶ 수열 공식을 이용한 풀이</p>
<ol>
<li>n이하의 짝수의 합의 패턴을 찾아라.</li>
</ol>
<p><em><strong>(n/2)*(n+1)</strong></em></p>
<p>1 = 1 &gt; 1 &gt; <code>1*0</code>
2 = 2 &gt; 2 &gt; <code>2*1</code>
3 = 2 &gt; 2 &gt; <code>2*1</code>
4 = 2,4 &gt; 6 &gt; <code>3*2</code>
5 = 2,4 &gt; 6 &gt; <code>3*2</code>
6 = 2,4,6 &gt; 12 &gt; <code>4*3</code>
7 = 2,4,6 &gt; 12 &gt; <code>4*3</code>
8 = 2,4,6,8 &gt; 20 &gt; <code>5*4</code>
9 = 2,4,6,8 &gt; 20 &gt; <code>5*4</code>
10 = 2,4,6,8,10 &gt; 30 &gt; <code>6*5</code></p>
<ol start="2">
<li>함수에 그대로 대입</li>
</ol>
<pre><code class="language-javascript">function solution(n) {
    var half = Math.floor(n/2);
    return half*(half+1)
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] 객체 순회]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-%EC%88%9C%ED%9A%8C</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-%EC%88%9C%ED%9A%8C</guid>
            <pubDate>Sun, 12 Mar 2023 13:39:40 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 객체 순회를 잘 알아두면 남들이 읽은 코드에 대해서 두려움을 줄여준다고 합니다.</p>
</blockquote>
<h2 id="객체-순회">객체 순회</h2>
<hr>
<h3 id="objectkeysvaluesentries">Object.keys,values,entries</h3>
<p>개별 자료 구조에서 순회(iteration)에 관한 메서드들은 여러개가 있습니다.
<code>map.keys()</code> <code>map.values()</code> <code>map.entires()</code> 이 메서드들은 포괄적인 용도로 만들어졌기 때문에
메서드를 적용할 자료구조는 일련의 합의를 준수해야 합니다. </p>
<hr>
<p>Oject keys, values, entries
일반 객체엔 다음과 같은 메서드를 사용할 수 있습니다.</p>
<ul>
<li><strong>Object.keys()</strong> : 객체 <strong>속성의 이름</strong>을 배열로 반환합니다.</li>
<li><strong>Object.values()</strong> : 객체 <strong>속성의 값</strong>들을 반환합니다.</li>
<li><strong>Object.entries()</strong> : 객체 <strong>쌍<code>[키, 값]</code>의 배열</strong>을 반환합니다.</li>
</ul>
<hr>
<pre><code class="language-javascript">// Object.keys()의 예시
const object1 = {
  a: &#39;somestring&#39;,
  b: 42,
  c: false
};

console.log(Object.keys(object1));
// Expected output: Array [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;]


// Object.entries()의 예시
const object1 = {
  a: &#39;somestring&#39;,
  b: 42
};

for (const [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

// Expected output:
// &quot;a: somestring&quot;
// &quot;b: 42&quot;

</code></pre>
<hr>
<h3 id="객체-변환하기">객체 변환하기</h3>
<p>객체엔 <code>map</code> <code>filter</code> 같은 배열 전용 메서드를 사용할 수 없습니다.
하지만 Object.entries와 Object.fromEntries를 순차적으로 적용하면 객체에도 배열 전용 메서드 사용할 수 있습니다.</p>
<hr>
<h2 id="구조-분해-할당">구조 분해 할당</h2>
<p>개발을 하다 보면 함수에 객체나 배열을 전달해야 하는 경우가 생기곤 합니다.
가끔은 객체나 배열에 저장된 데이터 전체가 아닌 일부만 필요한 경우가 생기기도 하죠.</p>
<p>이럴 때 객체나 배열을 변수로 &#39;분해&#39;할 수 있게 해주는 구조 분해 할당(destructuring assignment)을
사용할 수 있습니다. 이 외에도 함수의 매개변수가 많거나 매개변수 기본값이 필요한 경우 등에서 구조 분해는 그 진가를 발휘합니다.</p>
<h3 id="배열-분해하기">배열 분해하기</h3>
<p>배열은 어떻게 분해할 수 있을까요?
구조 분해 할당을 이용할 수 있습니다.</p>
<pre><code class="language-javascript">let arr = [&quot;Bora&quot;, &quot;Lee&quot;]

//구조 분해 할당을 이용해 firstNamer과 surname을 할당
let [firstName, surname] = arr;

alert(firstName); //Bora
alert(surname); //Lee</code></pre>
<p><strong><code>split</code>를 이용한 방법</strong>
분해(destructuring)는 파괴(destructive)를 의미하지 않습니다.</p>
<pre><code class="language-javascript">let [firstName, surname] = &quot;Bora Lee&quot;.split(&#39;&#39;);</code></pre>
<p><strong>기본값 설정하기</strong>
<code>=</code>를 이용하면 할당할 값이 없을 때 기본으로 할당해 줄 값인 기본값(default value)을 설정할 수 있습니다.</p>
<pre><code class="language-javascript">let [name = &quot;당근마겟&quot;,  surname = &quot;0203&quot;] = [&quot;Julius&quot;];

alert(name);
alert(surname);</code></pre>
<p>콜론은 &#39;분해하려는 객체의 프로퍼티: 목표 변수&#39; 와 같은 형태로 사용합니다.
배열 혹은 함수의 매개변수에서 했던 것처럼 객체에도 표현식이나 함수 호출을 기본값으로 할당할 수 있습니다.</p>
<p><strong>let없이 구조 분해하여 할당하기</strong></p>
<ol>
<li>let 없이 변수 선언하기</li>
<li>(...) 중괄호를 통해 표현식으로 인식하게 만들기<pre><code class="language-javascript">let title, width, height;
</code></pre>
</li>
</ol>
<p>// 에러가 발생하지 않습니다.
({title, width, height} = {title: &quot;Menu&quot;, width: 200, height: 100});</p>
<p>alert( title ); // Menu</p>
<pre><code>
**중첩 구조 분해**
객체나 배열이 다른 객체나 배열을 포함하는 경우, 좀 더 복잡한 패턴을 사용하면 중첩 배열이나
객체의 정보를 추출할 수 있습니다. 이를 중첩 구조 분해(nested destructuring)이라고 합니다.
```javascript
let options = {
    size: {
        width: 100,
        height: 200
    },
    items: [&quot;Cake&quot;, &quot;Donut&quot;],
    extra: true
};

//코드를 여러 줄에 걸쳐 작성해 의도하는 바를 명확히 드러냄
let {
    size: {
        width,
        height
},
      items: [item1, item2],
    title = &quot;Menu&quot;
} = options;</code></pre><p><strong>함수 매개변수</strong>
함수에 매개변수가 많은데 이 중 상당수는 선택적으로 쓰이는 경우가 있습니다.</p>
<pre><code class="language-javascript">let options = {
    title: &quot;My menu&quot;,
    items: [&quot;Item1&quot;, &quot;Item2&quot;]
};

//똑똑한 함수는 전달받은 객체를 분해해 변수에 즉시 할당함
function showMenu({title = &quot;Untitled, width = 200, height= 300, items = []}) {
    alert(`${title} ${width} ${height}`);
    alert(item);
}

showMenu(options);</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript]  객체 new연산자와 생성자 함수]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-new%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-%EC%83%9D%EC%84%B1%EC%9E%90-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-new%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-%EC%83%9D%EC%84%B1%EC%9E%90-%ED%95%A8%EC%88%98</guid>
            <pubDate>Fri, 10 Mar 2023 11:54:51 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 new 연산자와 생성자 함수에 대해서 알아봅니다. 객체를 보다 쉽게 복제하여 유사한 객체 여러 개를 쉽게 만들 수 있습니다</p>
</blockquote>
<h2 id="new연산자와-생성자-함수">new연산자와 생성자 함수</h2>
<hr>
<h3 id="1new-연산자">1.new 연산자</h3>
<p>우리가 서비스를 구성할 때 {이름과 주민등록번호를 넣는 객체}가 있습니다.
매번 신규고객이 생길때마다 새로운 객체들을 매번 생성하기는 힘든 부분인데요.</p>
<p>이것을 <code>new</code>라는 생성자로 해결할 수 있습니다.
재사용 할 수 있는 함수를 만들어 신규고객이 생기면 {이름, 주민등록번호} 를 가지는 객체를 매번 생성하는 것입니다.</p>
<hr>
<p>객체 리터럴 <code>{...}</code>을 사용하면 객체를 쉽게 만들 수 있습니다. 그런데 개발을 하다 보면 유사한 객체를 여러 개 만들어야 할 때가 생기곤 합니다. 복수의 사용자, 메뉴 내 다양한 아이템을 객체로 표현 하는 경우가 그런데, <strong>new 연산자와 생성자 함수를 사용하면 유사한 객체 여러 개를 쉽게 만들 수 있습니다.</strong></p>
<p><strong>생성자 함수</strong></p>
<p>생성자함수(constructor function)와 일반 함수에 기술적 차이는 없습니다.
다만 생성자 함수는 아래 두 관례를 따릅니다.</p>
<ol>
<li>함수 이름의 첫 글자는 대문자로 시작합니다.</li>
<li>반드시 <code>new</code> 연산자를 붙여 실행합니다.</li>
</ol>
<pre><code class="language-javascript">function User(name) {
    this.name = name;
    this.isAdmin = false;
}

let user = new User(&quot;보라&quot;);

alert(user.name);
alert(user.isAdmin);</code></pre>
<p>new User(...)를 써서 함수를 실행하면 아래와 같은 알고리즘이 동작합니다.</p>
<ol>
<li>빈 객체를 만들어 <code>this</code>에 할당합니다.</li>
<li>함수 본문을 실행합니다. <code>this</code>에 새로운 프로퍼티를 추가해 <code>this</code>를 수정합니다.</li>
<li><code>this</code>를 반환합니다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/193b35b2-a4cd-4958-b5ee-d105fd484459/image.png" alt=""></p>
<p>** prototype**</p>
<p>Number.prototype.sample = 10</p>
<h3 id="생성자와-return문">생성자와 return문</h3>
<p>생성자 함수엔 <code>return</code>문이 존재하지 않는다.
반환해야 할 것들은 모두 <code>this</code>에 저장되고, 자동으로 반환되기 때문에.</p>
<p>그런데 <code>return</code> 문이 있다면 어떤 일이 벌어질까요?
<strong><em>사실 리턴문이 있는 생성자 함수는 거의 없다.</em></strong></p>
<ul>
<li>객체를 <code>return</code>한다면 <code>this</code> 대신 객체가 반환됩니다.</li>
<li>원시형을 <code>return</code>한다면 <code>return</code>문이 무시됩니다.</li>
</ul>
<pre><code class="language-javascript">function BigUser(){
    this.name = &quot;원숭이&quot;;

    return {name: &quot;고릴라&quot;};
}

alert( new BigUser().name); // 고릴라가 나온다. return이 this문을 무시했다.</code></pre>
<hr>
<h3 id="생성자-내-메서드">생성자 내 메서드</h3>
<pre><code class="language-javascript">function User(name) {
    this.name = name;

    this.sayHi = function(){
        alert(&quot;제 이름은&quot; + this.name + &quot;입니다.&quot;);
    }

let bora = new User(&quot;이보라&quot;); //&quot;이보라&quot;가 들어가는 User todtjd
bora.sayHi(); // 제 이름은 이보라 입니다.
}</code></pre>
<h3 id="연습문제">연습문제</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/0e0c7b77-3db9-4977-84a2-93b826819207/image.png" alt=""></p>
<p>[오답] num은 기본 자료형이므로 메소드가 추가되지 않습니다.
num과 같은 기본 자료형은 자료형에 prototype에 메소드를 추가해야 합니다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/632a78c3-b273-4769-b222-a38bc6a89855/image.png" alt=""></p>
<ol>
<li>한국어</li>
<li>영어</li>
</ol>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/089a11f1-d52c-4c5e-afb1-cac259a2c763/image.png" alt=""></p>
<p>Math.sin()안에는 각도는 꼭 라디안 단위를 써줘야 한다.</p>
<pre><code class="language-javascript">라디안 = (도수 * Math.PI) / 180;</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/11bb95cd-d89d-4546-98ec-252d72c11472/image.png" alt=""></p>
<p>라디안(단위 : rad) = 반지름일 때의 중심각 : 57.3도</p>
<ul>
<li>360도 = 2pirad</li>
<li>180도 = 1pirad</li>
</ul>
<p>라디안을 사용하는 이유는 &#39;중심각에 따라서 호의 길이와 그 넓이는 정비례 하기 때문에&#39;
호의 길이나 넓이를 구하는데 용이하기 때문이다.</p>
<p>라디안으로 단위를 변환하여 값을 구하면 1이 나온다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/2302a089-4b62-4a7d-b366-1c988977a06a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/cfcd0a73-fe4f-48f4-b284-6935ab3da994/image.png" alt=""></p>
<p>2.prototype
3.sample 같은 특성을 가지는 샘플 값을 만들어 낼 때 사용한다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/0645b712-d41f-4c80-acd6-500220bf2c18/image.png" alt=""></p>
<p>[정답풀이]
const output = _.orderBy(book, (book) =&gt; book.name)</p>
<ul>
<li>프로퍼티의 이름은 상관없다.</li>
<li>orders는 기본값으로 하면 오름차순으로 정렬된다.
console.log(output);</li>
</ul>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/fa0a8d4a-9478-4574-996c-f4dd8f63722b/image.png" alt=""></p>
<p>정답은 2. ...은 전개연산자에 사용된다. 객체나 배열을 그대로 받아와 사용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/52bee4d7-c7aa-421b-ac7e-add1fdf702bf/image.png" alt=""></p>
<p>![](<a href="https://velog.velcdn.com/images/promotion_dev/post/a570a21b-e060-421d-8326-771d97290b85/image.png">https://velog.velcdn.com/images/promotion_dev/post/a570a21b-e060-421d-8326-771d97290b85/image.png</a></p>
<p>[<a href="https://kinsta.com/blog/javascript-libraries/%5D">https://kinsta.com/blog/javascript-libraries/]</a></p>
<ol>
<li><p>Data visualization in Maps and Charts
통계를 보거나 퍼포먼스 대시보드, 패널 등을 구현하기 위한 </p>
</li>
<li><p>DOM Manipulation
자바스크립트를 통해서 화면을 구현합니다. style, 화면랜더링 등을 브라우저에서 직접 작업하지 않고
가상환경에서 빠르게 계산한 후 화면 브라우저에 나타냅니다.</p>
</li>
<li><p>Data Handling
매일 처리하는 엄청난 양의 데이터를 처리합니다.</p>
</li>
<li><p>Database
데이터베이스를 구축하고 테이블 생성, 데이터 동기화 등을 지원합니다.</p>
</li>
<li><p>Forms
JS 라이브러리를 사용하여 양식 유효성 검사, 동기화, 필드 제어 등을 처리합니다.</p>
</li>
<li><p>Animations
애니메이션을 활용하여 웹 페이지를 대화형이고 더 매력적으로 만들 수 있습니다.</p>
</li>
<li><p>Image Effects
JS 라이브러리를 사용하여 이미지에 효과를 추가하고 눈에 띄게 만들 수 있습니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] 객체 메서드/this]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-%EB%A9%94%EC%84%9C%EB%93%9Cthis</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4-%EB%A9%94%EC%84%9C%EB%93%9Cthis</guid>
            <pubDate>Fri, 10 Mar 2023 08:31:41 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 객체의 특성은 메서드를 삽입할 수 있다는 점입니다. 객체와 this를 사용하여 메서드 내에서 동작하는 객체들을 만들어보는 것이 포인트입니다.</p>
</blockquote>
<h2 id="객체와-메서드">객체와 메서드</h2>
<hr>
<h3 id="1메서드의-사용">1.메서드의 사용</h3>
<p><strong>1. 객체의 형태</strong></p>
<p>객체는 아래와 같이 key:value로 구성되어 있지만, value에 메서드 형태를 넣어줄 수 있습니다.</p>
<pre><code class="language-javascript">let user = {     // 객체
  name: &quot;John&quot;,  // 키: &quot;name&quot;,  값: &quot;John&quot;
  age: 30        // 키: &quot;age&quot;, 값: 30
};</code></pre>
<p><strong>2. 메서드가 들어간 객체</strong>
아래와 같이 <code>user</code>에게 인사할 수 있는 능력을 메서드를 통해 부여해줍시다.</p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  age: 30
};

user.sayHi = function() {
  alert(&quot;안녕하세요!&quot;);
};

user.sayHi(); // 안녕하세요!</code></pre>
<p><code>user.sayHi</code>라는 함수를 객체 프로퍼티에 할당해주었는데요.
이를 통해 객체의 함수를 호출하면 user가 인사해줍니다.</p>
<p>이렇게 객체 프로퍼티에 할당된 함수를 메서드(method)라고 합니다.</p>
<p><strong>3.객체 지향 프로그래밍</strong>
이처럼 객체 단위로 특정 기능과 값을 수행하도록 만든 것을 객체 지향 프로그래밍이라고 합니다.</p>
<p><strong>4. 메서드 단축구문</strong></p>
<pre><code class="language-javascript">//일반적인 표기 방법
user = {
    sayHi: function(){
    alert(&quot;Hello&quot;);
    }    
};

//단축 구문
user = {
    sayHi()
        alert(&quot;Hello&quot;);
}</code></pre>
<h3 id="메서드와-this">메서드와 this</h3>
<p>메서드는 객체에 저장된 정보에 접근할 수 있어야 제 역할을 할 수 있습니다.
메서드 내부에서 <code>this</code>를 사용하여 객체에 접근할 수 있습니다.
this는 객체를 나타냅이다. <em>(메서드를 호출할 때 사용된 객체)</em></p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  age: 30,

  sayHi() {
    // &#39;this&#39;는 &#39;현재 객체&#39;를 나타냅니다.
    alert(this.name);
  }

};

user.sayHi(); // John</code></pre>
<p>함수 내에서 해당 객체만을 불러오길 희망한다면
this를 통하여 사용하면 됩니다.</p>
<p><strong>this가 없는 화살표 함수</strong>
화살표 함수는 일반 함수와 달리 고유한 this를 가지지 않습니다.
화살표 함수에서 this를 참조하면, 화살표 함수가 아닌 평범한 외부 함수에서 this 값을 가져옵니다.</p>
<pre><code class="language-javascript">let user = {
  firstName: &quot;보라&quot;,
  sayHi() {
    let arrow = () =&gt; alert(this.firstName);
    arrow();
  }
};

user.sayHi(); // 보라</code></pre>
<h3 id="객체-연습문제">객체 연습문제</h3>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/4d5adc7d-90b8-4d07-84fe-4f34be486afa/image.png" alt=""></p>
<pre><code class="language-javascript">const book = {
    name: &quot;혼자 공부하는 파이썬&quot;,
    price: 18000,
    publisher: &quot;한빛미디어&quot;,
};</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/f5cc9163-0151-4d82-b274-76289fbef555/image.png" alt=""></p>
<ol>
<li></li>
<li></li>
<li>대괄호 []를 통하여 객체에 값을 넣어줄 수 있다.</li>
<li></li>
</ol>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/898ac827-69ed-4659-8c97-8267f1ca35c2/image.png" alt=""></p>
<ol>
<li>delete객체[속성]을 이용하여 제거할 수 있다.</li>
<li></li>
<li></li>
<li></li>
</ol>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/41192ff5-52e5-490c-9dc2-f78b039e9d12/image.png" alt=""></p>
<p>메소드 print : object.ko 값을 넣었을 때 번역을 해주는 메소드</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] 객체]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%EA%B0%9D%EC%B2%B4</guid>
            <pubDate>Fri, 10 Mar 2023 07:15:18 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 javascript에서 key : value 형태로 이루어진 객체를 많이 사용합니다. 객체에 구조와 사용 방법에 대해서 알아봅시다.</p>
</blockquote>
<h2 id="객체">객체</h2>
<hr>
<h3 id="1객체란">1.객체란</h3>
<p><strong>1. 객체의 형태</strong>
key와 value 쌍으로 이루어진 데이터타입로
{...}안에 key : value 형태로 집어넣습니다.</p>
<p>여기서 우리는 key와 value를 <strong>프로퍼티</strong>라고 부릅니다.</p>
<pre><code class="language-javascript">let user = {     // 객체
  name: &quot;John&quot;,  // 키: &quot;name&quot;,  값: &quot;John&quot;
  age: 30        // 키: &quot;age&quot;, 값: 30
};</code></pre>
<ul>
<li>첫 번째 프로퍼티 - <code>name</code>과 <code>John</code></li>
<li>두 번째 프로퍼티 - <code>age</code>와 <code>30</code></li>
</ul>
<p>객체는 서랍장과 같습니다. 내 파일을 열면 나의 이름, 나이가 나와있고, 그렇게 수백개 혹은 수만개의 자료들을 쌓을 수 있습니다. key값과 value값을 알 수 있어 가독성 또한 좋습니다.</p>
<p><strong>원하는 프로퍼티 값 얻기</strong></p>
<pre><code class="language-javascript">// 프로퍼티 값 얻기
alert( user.name ); // John
alert( user.age ); // 30</code></pre>
<p><strong>원하는 프로퍼티 삭제</strong></p>
<pre><code class="language-javascript">delete user.age;</code></pre>
<p><strong>여러 단어를 조합해 만든 프로퍼티는 따옴표 처리</strong>
likes + birds 는 &quot;likes birds&quot;로 처리한다.</p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  age: 30,
  &quot;likes birds&quot;: true  // 복수의 단어는 따옴표로 묶어야 합니다.
};</code></pre>
<p><strong>따옴표 처리한 객체의 변수는 []대괄호 표기법</strong>
 &#39;대괄호 표기법(square bracket notation)&#39;</p>
<pre><code class="language-javascript">let user = {};

// set
user[&quot;likes birds&quot;] = true;

// get
alert(user[&quot;likes birds&quot;]); // true

// delete
delete user[&quot;likes birds&quot;];</code></pre>
<h3 id="프로퍼티">프로퍼티</h3>
<hr>
<p><code>key</code>를 활용하여 원하는 프로퍼티를 추출할 수 있게끔 구현할 수 있다.</p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  age: 30
};

let key = prompt(&quot;사용자의 어떤 정보를 얻고 싶으신가요?&quot;, &quot;name&quot;);

// 변수로 접근
alert( user[key] ); // John (프롬프트 창에 &quot;name&quot;을 입력한 경우)</code></pre>
<p><strong>계산된 프로퍼티(computed property)</strong>
프로퍼티 키가 대괄호로 둘러싸여 있는 경우, 이를 계산된 프로퍼티라고 부릅니다. </p>
<ul>
<li>객체를 아래와 같이 [fruit]로 정해 가변적으로 바꿀 수 있습니다.<pre><code class="language-javascript">let fruit = prompt(&quot;어떤 과일을 구매하시겠습니까?&quot;, &quot;apple&quot;);
</code></pre>
</li>
</ul>
<p>let bag = {
  [fruit]: 5, // 변수 fruit에서 프로퍼티 이름을 동적으로 받아 옵니다.
};</p>
<p>alert( bag.apple ); // fruit에 &quot;apple&quot;이 할당되었다면, 5가 출력됩니다.</p>
<pre><code>
- 객체를 비워두고, 마지막에 가변적인 변수를 []대괄호를 이용해 추가할 수 있습니다.
```javascript
let fruit = prompt(&quot;어떤 과일을 구매하시겠습니까?&quot;, &quot;apple&quot;);
let bag = {};

// 변수 fruit을 사용해 프로퍼티 이름을 만들었습니다.
bag[fruit] = 5;</code></pre><p><strong>프로퍼티 함축하기</strong>
프로퍼티의 이름과 값이 동일하면 함축이 가능합니다.
이를 프로퍼티 값 단축 구문(propery value shorthand)라고 합니다.</p>
<pre><code class="language-javascript">function makeUser(name, age) {
  return {
    name, // name: name 과 같음
    age,  // age: age 와 같음
    // ...
  };
}</code></pre>
<p><strong>프로퍼티 이름의 제약사항</strong></p>
<p>변수에는 예약어를 사용하면 안되지만, 프로퍼티는 가능하다.</p>
<pre><code class="language-javascript">// 예약어를 키로 사용해도 괜찮습니다.
let obj = {
  for: 1,
  let: 2,
  return: 3
};

alert( obj.for + obj.let + obj.return );  // 6</code></pre>
<p><strong>in 연산자로 프로퍼티 존재 여부 파악하기</strong>
javascript에서는 존재하지 않는 프로퍼티에 접근하려 해도 에러가 발생하지 않습니다.
모두 undefined 로 반환하기 때문입니다.</p>
<ol>
<li>noSuchProperty 메서드를 이용하여 확인하기<pre><code class="language-javascript">let user = {};
</code></pre>
</li>
</ol>
<p>alert( user.noSuchProperty === undefined ); // true는 &#39;프로퍼티가 존재하지 않음&#39;을 의미합니다.</p>
<pre><code>
2. in을 사용하기
``` javascript
&quot;key&quot; in object</code></pre><ol start="3">
<li>객체의 값이 undefined의 경우를 대비하여, 아래처럼 검사해줍니다.<pre><code class="language-javascript">let obj = {
test: undefined
};
</code></pre>
</li>
</ol>
<p>alert( obj.test ); // 값이 <code>undefined</code>이므로, 얼럿 창엔 undefined가 출력됩니다. 그런데 프로퍼티 test는 존재합니다.</p>
<p>alert( &quot;test&quot; in obj ); // <code>in</code>을 사용하면 프로퍼티 유무를 제대로 확인할 수 있습니다(true가 출력됨).</p>
<pre><code>

### 객체 순회하기
---
**for in 반복문**
아래처럼 for..in 반복문을 사용해서 객체의 모든 키를 순회할 수 있ㅅ브니다.
아래 예시를 실행하면 객체 `user`의 모든 프로퍼티가 출력됩니다.
```javascript
let user = {
  name: &quot;John&quot;,
  age: 30,
  isAdmin: true
};

for (let key in user) {
  // 키
  alert( key );  // name, age, isAdmin
  // 키에 해당하는 값
  alert( user[key] ); // John, 30, true
}</code></pre><h3 id="객체-프로퍼티-동작">객체 프로퍼티 동작</h3>
<p>프로퍼티에는 순서가 있을까?
반복문을 실행하면 어떤 순서로 순회할까?</p>
<p>객체는 &#39;특별한 방식으로 정렬&#39;됩니다.</p>
<ul>
<li>정수 프로퍼티 : 자동으로 정렬 (1부터 오름차순으로 차례대로)</li>
<li>그 외 프로퍼티 : 객체에 추가한 순서 그대로 정렬</li>
</ul>
<pre><code class="language-javascript">let codes = {
  &quot;49&quot;: &quot;독일&quot;,
  &quot;41&quot;: &quot;스위스&quot;,
  &quot;44&quot;: &quot;영국&quot;,
  // ..,
  &quot;1&quot;: &quot;미국&quot;
};

for (let code in codes) {
  alert(code); // 1, 41, 44, 49
}</code></pre>
<p>위의 예시로 for..in 반복문을 실행하면</p>
<ul>
<li>정수 프로퍼티에 인해서 <code>1</code>번인 미국부터 41,44,49 차례대로 정렬됩니다.</li>
</ul>
<h3 id="참조에-의한-객체-복사">참조에 의한 객체 복사</h3>
<p>객체와 원시 타입의 근본적인 차이 중 하나는 객체는 ‘참조에 의해(by reference)’ 저장되고 복사된다는 것입니다.</p>
<pre><code class="language-javascript">let message = &quot;Hello!&quot;;
let phrase = message;</code></pre>
<p>예를 들면) 두개의 독립된 변수에 각각 문자열 <code>Hello!</code>가 저장이 됩니다.
객체의 동작방식은 이와 다릅니다.</p>
<p><strong>변수엔 객체가 그대로 저장되는 것이 아닌, 객체가 저장되어 있는 &#39;메모리 주소&#39;인 객체에 대한 &#39;참조값&#39; 이 저장됩니다.</strong>
이 말이 무슨 말이냐면</p>
<ul>
<li>객체는 메모리 내에 따로 저장되고 실행됩니다. </li>
<li>따라서, 객체가 할당된 변수를 복사할 땐 객체의 참조 값이 복사되고 객체는 복사되지 않습니다.<pre><code class="language-javascript">let user = { name: &#39;John&#39; };
</code></pre>
</li>
</ul>
<p>let admin = user;</p>
<p>admin.name = &#39;Pete&#39;; // &#39;admin&#39; 참조 값에 의해 변경됨</p>
<p>alert(user.name); // &#39;Pete&#39;가 출력됨. &#39;user&#39; 참조 값을 이용해 변경사항을 확인함</p>
<pre><code>
admin의 name을 수정하더라도 user의 name이 수정된 채로 출력되는 것을 볼 수 있습니다.

### 객체 복사, 병합과 Object.assign

객체가 할당된 변수를 복사하면 동일한 객체에 대한 참조 값이 하나 더 만들어진다는 걸 배웠습니다.
그런데 객체를 복제하고 싶다면 어떻게 해야 할까요?

- 아래와 같이 for...in을 통해서 clone이라는 객체 안에 모두 복사할 수 있습니다.
```javascript
let user = {
  name: &quot;John&quot;,
  age: 30
};

let clone = {}; // 새로운 빈 객체

// 빈 객체에 user 프로퍼티 전부를 복사해 넣습니다.
for (let key in user) {
  clone[key] = user[key];
}

// 이제 clone은 완전히 독립적인 복제본이 되었습니다.
clone.name = &quot;Pete&quot;; // clone의 데이터를 변경합니다.

alert( user.name ); // 기존 객체에는 여전히 John이 있습니다.</code></pre><ul>
<li>그리고 Object.assign을 사용하는 방법도 있습니다.</li>
</ul>
<p>dest객체를 목표로하여 src1, src2, scr3을 dest객체에 모두 병합시켜 줍니다.</p>
<pre><code class="language-javascript">Object.assign(dest, [src1, src2, src3...])</code></pre>
<p>예시는 아래와 같습니다.</p>
<pre><code class="language-javascript">let user = { name: &quot;John&quot; };

let permissions1 = { canView: true };
let permissions2 = { canEdit: true };

// permissions1과 permissions2의 프로퍼티를 user로 복사합니다.
Object.assign(user, permissions1, permissions2);

// now user = { name: &quot;John&quot;, canView: true, canEdit: true }</code></pre>
<h3 id="중첩-객체-복사">중첩 객체 복사</h3>
<p>중첩 안에 중첩이 있는 경우는 어떻게 해야 할까요? 이를 <strong>중첩 객체</strong>라고 합니다.</p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  sizes: {
    height: 182,
    width: 50
  }
};

alert( user.sizes.height ); // 182</code></pre>
<p>아래와 같이 객체 속의 객체를 변경하기 위해서는
객체.key.key 값을 통해 깊은 복사(deep cloning)를 해주어야 합니다.</p>
<pre><code class="language-javascript">let user = {
  name: &quot;John&quot;,
  sizes: {
    height: 182,
    width: 50
  }
};

let clone = Object.assign({}, user);

alert( user.sizes === clone.sizes ); // true, 같은 객체입니다.

// user와 clone는 sizes를 공유합니다.
user.sizes.width++;       // 한 객체에서 프로퍼티를 변경합니다.
alert(clone.sizes.width); // 51, 다른 객체에서 변경 사항을 확인할 수 있습니다.</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] 함수 표현식]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%ED%95%A8%EC%88%98-%ED%91%9C%ED%98%84%EC%8B%9D</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%ED%95%A8%EC%88%98-%ED%91%9C%ED%98%84%EC%8B%9D</guid>
            <pubDate>Fri, 10 Mar 2023 05:44:38 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 함수 표현식에 대해 알아봅니다.</p>
</blockquote>
<h2 id="함수표현식">함수표현식</h2>
<hr>
<h3 id="함수표현식-1">함수표현식</h3>
<p>함수를 생성하고 변수에 함수를 할당해 주는 것.</p>
<h3 id="콜백함수">콜백함수</h3>
<p>함수를 함수의 인수로 전달하고, 필요하다면 인수로 전달한 그 함수를 &quot;나중에 호출(called back)&quot;하는 것이 콜백 함수의 개념.</p>
<p>자바스크립트의 함수 실행</p>
<ol>
<li>스크립트 실행 전 선언된 함수 선언문을 찾는다.</li>
<li>실행되기 전 &quot;초기화 단계&quot;에서 함수 선언 방식으로 정의한 함수가 생성</li>
<li>함수 선언문이 모두 처리된 이후에서야 실행됩니다.</li>
<li>따라서, 스크립트 어디서든 함수 선언문으로 선언한 함수에 접근할 수 있는 것.</li>
</ol>
<p>함수표현식은 표현식에 다다랐을 때 만들어집니다.
따라서, 표현식은 선언식과 다르게 코드의 흐름에 따라 실행됩니다.</p>
<p><strong>함수 선언문과 함수 표현식 중 무엇을 선택해야 하나요?</strong>
제 경험에 따르면 <strong>함수 선언문을 이용해 함수를 선언하는 걸 먼저 고려</strong>하는 게 좋습니다. 함수 선언문으로 함수를 정의하면, 함수가 선언되기 전에 호출할 수 있어서 코드 구성을 좀 더 자유롭게 할 수 있습니다.</p>
<p><strong>함수 선언문을 사용하면 가독성도 좋아집니다.</strong> 코드에서 let f = function(…) {…}보다 function f(…) {…} 을 찾는 게 더 쉽죠. 함수 선언 방식이 더 “눈길을 사로잡습니다”.
그러나 어떤 이유로 함수 선언 방식이 적합하지 않거나, (위 예제와 같이) 조건에 따라 함수를 선언해야 한다면 함수 표현식을 사용해야 합니다.</p>
<h3 id="화살표-함수-기본">화살표 함수 기본</h3>
<p><em><strong>화살표 함수는 본문이 한 줄인 함수를 작성할 때 유용합니다.</strong></em></p>
<ul>
<li>중괄호 없이 작성: (...args) =&gt; expression – 화살표 오른쪽에 표현식을 둡니다. 함수는 이 표현식을 평가하고, 평가 결과를 반환합니다.</li>
<li>중괄호와 함께 작성: (...args) =&gt; { body } – 본문이 여러 줄로 구성되었다면 중괄호를 사용해야 합니다. 다만, 이 경우는 반드시 return 지시자를 사용해 반환 값을 명기해 주어야 합니다.</li>
</ul>
<p>함수 표현식보다 단순하고 간결한 문법으로 함수를 만들 수 있는 방법이 있습니다.
바로 화살표 <strong>함수(arrow function)</strong>를 사용하는 것입니다. 화살표 함수라는 이름은 문법의 생김새를 차용해 지어졌습니다.</p>
<h3 id="나머지-매개변수">나머지 매개변수</h3>
<p>...rest는 항상 마지막에 있어야 합니다.
arguments도 있으나 잘 사용하지 않는다.</p>
<h3 id="스프레드-문법-spread-syntax">스프레드 문법 (spread syntax)</h3>
<p>반대로 배열을 매개변수에 넘겨줄 때 쓰는 문법</p>
<p>Array.from은 유사 배열 객체와 이터러블 객체 둘 다에 사용할 수 있습니다.
스프레드 문법은 이터러블 객체에만 사용할 수 있습니다.</p>
<h3 id="연습문제">연습문제</h3>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/71cc8b2a-2741-418f-8bd4-59263273b757/image.png" alt=""></p>
<pre><code class="language-javascript">// 윤년을 확인하는 함수 만들기
let year = prompt(&quot;해당 년도를 입력해주세요&quot;, &quot;&quot;);
let confirmLeapyear =
  (year % 4 === 0 &amp;&amp; year % 100 !== 0) || year % 400 === 0
    ? () =&gt; alert(&quot;윤년입니다.&quot;)
    : () =&gt; alert(&quot;윤년이 아닙니다.&quot;);

confirmLeapyear();</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/a1a4ac9f-9c96-40d4-ae16-308ea05cd3af/image.png" alt=""></p>
<pre><code class="language-javascript">let a = Number(prompt(&quot;A부터 B까지 더하는 함수의 &#39;A&#39; 값을 입력하시오&quot;, &quot;&quot;));
let b = Number(prompt(&quot;A부터 B까지 더하는 함수의 &#39;B&#39; 값을 입력하시오&quot;, &quot;&quot;));

function sumAll(a, b) {
  let output = 0;
  for (let i = a; i &lt;= b; i++) {
    output += i;
  }
  return output;
}

alert(`${a}부터 ${b}까지 모든 수의 합은 ${sumAll(a, b)} 입니다.`);</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/fc9b4f9c-6eee-4ce1-b034-8b88c3972a31/image.png" alt=""></p>
<pre><code class="language-javascript">//최솟값 구하는 함수 만들기

function min(array){
    let output = array[0]
    for (const item of array) {
        if (output &gt; item){
        output = item        
}
}
    return output
}

const testArray = [23,54,643,52,12]
console.log(`${min(testArray)}`)</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/c69286ee-e3a6-405e-8373-f5e4bb076899/image.png" alt=""></p>
<pre><code class="language-javascript">function multiplyAll(a, b) {
  let output = 1
  for (let i = a; i &lt;= b; i++) {
    output *= i
  }
  return output;
}
console.log(multiplyAll(1,2));
console.log(multiplyAll(1,3));</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/4f20d171-2d59-4c1d-ac77-72f3320df38c/image.png" alt=""></p>
<pre><code class="language-javascript">//array 매개변수로 받아들여 연산

const max = function(array) {
    let output = array[0]
    for (const item of array) {
        if(output &lt; item)
        output = item
    }
    return output
}

console.log(max([1,2,3,4]))</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/0aac52a5-5234-4b1e-bf44-d41df9461144/image.png" alt=""></p>
<pre><code class="language-javascript">//...array를 사용하여 배열로 받아들임
const max = function(...array) {
    let output = array[0]
    for (const item of array) {
        if(output &lt; item)
        output = item
    }
    return output
}

console.log(max(1,2,3,4))</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/e1daebaf-9932-4560-9814-7e49370a1b1e/image.png" alt=""></p>
<pre><code class="language-javascript">const max = function(first, ...rests) {
    //변수 선언하기
    let output
    let items

    if(Array.isArray(first)) {
        output = first[0]
        items = first
    } else if (typeof(first) === &#39;number&#39;) {
        output = first
        items = rests
    }

    for (const item of items){
        if(output &lt; items)
        output = items
    }
    return output
}


console.log(`max(배열): ${max([1,2,3,4])}`)
console.log(`max(숫자, ...): ${max(1,2,3,4)}`)</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/72556d96-9d0f-495a-b9d7-59cfa7487146/image.png" alt=""></p>
<pre><code class="language-javascript">// number에 filter를 이용하여 조건에 맞는 배열 추출
let numbers = [273,25,75,52,103,32,57,24,76]

numbers = numbers.filter((x) =&gt; x % 2 == 1)
numbers = numbers.filter((x) =&gt; x &lt;= 100)
numbers = numbers.filter((x) =&gt; x % 5 == 0)


console.log(numbers)</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/2b1c4f7e-1567-426e-b765-7a9b9d263914/image.png" alt=""></p>
<pre><code class="language-javascript">//forEach를 이용하여 value와 index 값 호출
const array = [&#39;사과&#39;,&#39;배&#39;,&#39;귤&#39;,&#39;바나나&#39;]

array.forEach((value, index) =&gt; {
    console.log(index)
})
array.forEach((value, index) =&gt; {
    console.log(value)
})</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] 배열과 반복문]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@promotion_dev/Javascript-%EB%B0%B0%EC%97%B4%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Thu, 09 Mar 2023 05:54:43 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 배열과 반복문에 대해서 공부합니다. 자바스크립트에서 배열이라는 자료구조를 이용하고 반복문을 통하여 반복되는 행동에 대한 자동화를 만들 수 있습니다.</p>
</blockquote>
<p><strong>배열</strong></p>
<p>배열의 구조는 아래와 같습니다. </p>
<pre><code class="language-javascript">let arr = new Array();
let arr = [];</code></pre>
<ul>
<li>[] 브라킷</li>
<li>배열은 자료를 엑셀처럼 구조화 하는데 용이합니다.</li>
<li>새로운 변수를 입력하기 용이합니다.</li>
<li><code>switch</code>문 = 복수의 if 조건을 switch문으로 변환 가능</li>
</ul>
<p>각자의 문법이 어떻게 쓰이는지 
예시를 들어가면서 알아보겠습니다.</p>
<p><strong>반복문</strong></p>
<p>&nbsp; 
&nbsp; </p>
<h2 id="배열">배열</h2>
<hr>
<h3 id="1-배열">1. 배열</h3>
<p>배열은 순서가 있는 형태의 데이터를 담기에 용이합니다.
데이터의 순서가 없다면 매번 &quot;해당이름&quot;을 출력해야 합니다.</p>
<h3 id="선언">선언</h3>
<p><strong>1. 빈 배열 선언하기</strong></p>
<pre><code class="language-javascript">let arr = new Array();
let arr = [];</code></pre>
<ul>
<li>위에서도 잠시 언급했지만 new Array() 문법을 사용해도 배열을 만들 수 있습니다.</li>
<li>대괄호 []를 사용하면 더 짧은 문법으로 배열을 만들 수 있기 때문에 new Array()는 잘 사용되지 않는 편입니다.</li>
</ul>
<p><strong>2. 요소를 넣어 배열 선언하기</strong></p>
<pre><code class="language-javascript">let animals = [&quot;원숭이&quot;, &quot;사자&quot;, &quot;호랑이&quot;];</code></pre>
<p><strong>3. 다차원 배열(multidimensional array)</strong> - 행렬</p>
<pre><code class="language-javascript">let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

alert( matrix[1][1] ); // 5, 중심에 있는 요소</code></pre>
<h3 id="특성--idex-순서에서-나오는-특성">특성 : idex 순서에서 나오는 특성</h3>
<hr>
<p><strong>1. 각 배열에는 순서가 생기는데 이를 index라고 합니다.</strong></p>
<ul>
<li>index는 0부터 시작합니다.</li>
<li>원숭이는 0번, 사자는 1번, 호랑이는 2번 인덱스<pre><code class="language-javascript">let animals = [&quot;원숭이&quot;, &quot;사자&quot;, &quot;호랑이&quot;];</code></pre>
</li>
</ul>
<hr>
<p><strong>2. 특정 요소만 뽑아낼 수 있습니다.</strong></p>
<pre><code class="language-javascript">let animals = [&quot;원숭이&quot;, &quot;사자&quot;, &quot;호랑이&quot;];

alert(animals[0]); //원숭이
alert(animals[1]); //사자
alert(animals[2]); //호랑이</code></pre>
<hr>
<p><strong>3. 특정 요소를 수정 또는 추가 할 수 있습니다.</strong></p>
<pre><code class="language-javascript">let animals = [&quot;원숭이&quot;, &quot;사자&quot;, &quot;호랑이&quot;];

//2번에 사자를 빼고 고래를 넣자
animals[2] = &#39;고래&#39;; // 사자 대신 고래를 넣습니다.
console.log(animals); // [원숭이, 고래, 호랑이] 가 출력

//3번에 고릴라를 추가하고 싶어
animals[3] = &#39;고릴라&#39;; // 고릴라를 3번에 추가할게
console.log(animals); // [원숭이, 고래, 호랑이, 고릴라] 가 출력</code></pre>
<hr>
<p><strong>4. <code>length</code>를 사용하면 배열에 담긴 요소가 몇 개인지 알 수 있습니다.</strong></p>
<pre><code class="language-javascript">let animals = [&quot;원숭이&quot;, &quot;사자&quot;, &quot;호랑이&quot;];

console.log(animal.length); // 요소가 3개 있어 3이 출력됩니다.</code></pre>
<hr>
<p><strong>5. 배열 요소의 자료형에 제약이 없습니다.</strong></p>
<ul>
<li>이름, 숫자, Boolean, 함수를 넣을 수 있습니다.<pre><code class="language-javascript">// 요소에 여러 가지 자료형이 섞여 있습니다.
let arr = [ &#39;사과&#39;, { name: &#39;이보라&#39; }, true, function() { alert(&#39;안녕하세요.&#39;); } ];
</code></pre>
</li>
</ul>
<p>// 인덱스가 1인 요소(객체)의 name 프로퍼티를 출력합니다.
alert( arr[1].name ); // 이보라</p>
<p>// 인덱스가 3인 요소(함수)를 실행합니다.
arr<a href="">3</a>; // 안녕하세요.</p>
<pre><code>---
### 스택 (STACK), 큐(QUEUE) 개념/비교 /활용 예시

[표] 한 눈에 비교하기

|    |큐(QUEUE) |스택(STACK)
|:----:|:----|:----
|사전적의미|롤에서 &#39;큐&#39;를 돌린다.|영어단어 &#39;쌓다&#39;의 의미
|구조설명|자료가 들어와 차례대로 나간다.   |자료를 위에서 차곡차곡 쌓는 형태  
|선출방식|**FIFO**, First In FirstOut   |  **LIFO**, Last In First Out  
|설명|먼저 들어온 놈이 먼저 나간다   |책을 빼려면 맨 위에부터 뺴야해
|데이터삽입|**push** 로 위부터 쌓는다.|**push** 로 위부터 쌓는다.  
||**unshift** 로 맨앞에 쌓는다. (느림)   |
|데이터삭제|**shift** 로 맨 밑에부터 꺼낸다.(느림)  |**pop** 로 위부터 빼낸다.
|실제사례|롤에서 큐 돌릴 때 / 캐치테이블 |웹 방문기록 / 실행취소(undo)  

---

#### pop / push, shift / unshift 이 뭐야?
- push - 맨 끝에 요소를 추가합니다.
- pop - 스택 끝에 요소를 추출합니다.
- shift - 맨 밑 요소를 꺼내 제거한 후, 모든 요소들을 앞으로 밀어줍니다.
- unshift - 맨 앞에 쌓는다. 모든 요소들의 순서(index) 뒤로 밀린다. 

--- 
#### 배열 주의사항
배열은 **순서가 있는 자료구조**로, 자바스크립트 엔진은 이런 특성을 고려하여 배열을 신중하게 조정하고, 처리하므로 배열을 사용할 땐 이런 목적에 맞게 사용해햐 합니다.
- 자바스크립트의 배열은 순서대로 읽는 구조로 효율화.
- 배열에서 **순서의 중간을 빼먹거나 하면 좋지 않다.**
- **요소를 역순으로 채우는 경우**도 좋지 않다.

&amp;nbsp;
&amp;nbsp;

### 반복문 for

**기본구조 **
조건을 ()안에 넣으면 {}를 실행합니다.
``` javascript
// 기본구조
for (조건) {실행문}</code></pre><p>*<em>실행예시 *</em>
선언은 let으로 보통 합니다. (변수할당의 변화가 있을 때 대비)</p>
<pre><code class="language-javascript">// 실행예시
let arr = [&quot;사과&quot;, &quot;포도&quot;]; 
for (i = 0; i &lt; arr.length; i++) { // i가 arr.length까지 i++(계속 더하며) 반복된다.
    alert(arr[i]); // arr[i] 번째 객체를 반복하여 알럿노출
} // arr.length 번째까지 무한반복 -&gt; 이후 종료</code></pre>
<hr>
<p><strong>of : 배열요소에서 반복 작업을 간단한 조건으로 실행 가능</strong> </p>
<ul>
<li>let으로 새로운 객체로 할당하여 진행</li>
<li>값만 얻을 수 있음 (배열의 순서(index)는 얻을 수 없음.)<pre><code class="language-javascript"></code></pre>
</li>
</ul>
<p>// 실행예시
let fruits = [&quot;사과&quot;, &quot;포도&quot;]; 
for (let friut of fruits) { // i가 arr.length까지 i++(계속 더하며) 반복된다.
    alert(fruit); // arr[i] 번째 객체를 반복하여 알럿노출
} // arr.length 번째까지 무한반복 -&gt; 이후 종료</p>
<pre><code>---
**in : 반복문을 실행할 수 있음.**
```javascript
let arr = [&quot;사과&quot;, &quot;오렌지&quot;, &quot;배&quot;];

for (let key in arr) {
  alert( arr[key] ); // 사과, 오렌지, 배
}</code></pre><p>&nbsp;
<strong>주의사항 : <code>in</code> 은 모든 프로퍼티를 읽기 때문에, 메서드를 읽을 수 있습니다.</strong></p>
<ul>
<li>key : value로 이루어진 모든 프로퍼티 대상으로 순회함</li>
<li>메서드나 함수에도 프로퍼티가 존재함.</li>
<li>모든 메서드를 읽으면서 내려가 문제가 생길 수 있음</li>
</ul>
<p><strong>주의사항 : <code>in</code> 은 배열에는 되도록 쓰지 말 것.</strong></p>
<ul>
<li>객체를 읽는데에 최적화 되어 있음.</li>
<li>배열에 사용하면 객체에 사용하는 것보다 10~100배 느림</li>
<li>배열에는 되도록 쓰지 말 것.</li>
</ul>
<hr>
<p><strong>length</strong>
<strong>1. length 프로퍼티는 배열 내 요소의 갯수가 아닙니다.</strong>
= 가장 <em><strong>큰 인덱스에 +1을 더한 값</strong></em></p>
<pre><code class="language-javascript">let fruits = [];
fruits[123] = &quot;사과&quot;;

alert( fruits.length ); // 124</code></pre>
<p>fruits[123]은 123번째에 사과를 넣어주었고,
length는 가장 큰 index 값 = &quot;사과&quot;에 +1 을 하여 124 출력
<img src="https://velog.velcdn.com/images/promotion_dev/post/9b16fb1e-d38b-4265-92b4-ec721000e9bc/image.png" alt=""></p>
<p><strong>2.배열을 줄이면 되돌릴 수 없습니다.</strong></p>
<pre><code class="language-javascript">let arr = [1, 2, 3, 4, 5];

arr.length = 2; // 요소 2개만 남기고 잘라봅시다.
alert( arr ); // [1, 2]

arr.length = 5; // 본래 길이로 되돌려 봅시다.
alert( arr[3] ); // undefined: 삭제된 기존 요소들이 복구되지 않습니다.</code></pre>
<p>이런 특징으로 <code>arr.length = 0;</code> 을 이용해서 배열을 비울 수 있음</p>
<hr>
<p><strong>tooString</strong>
배열엔 toString 메서드가 구현되어 있어 이를 호출하면 요소를 쉼표로 구분한 <strong>문자열이 반환</strong>됩니다.</p>
<pre><code class="language-javascript">let arr = [1, 2, 3];

alert( arr ); // 1,2,3
alert( String(arr) === &#39;1,2,3&#39; ); // true</code></pre>
<hr>
<h3 id="배열과-메서드">배열과 메서드</h3>
<p>요소를 더하거나 지우는 메서드 (7개)
push
pop
shift
unshift
splice
splice(
contact</p>
<p>원하는 요소 찾기 메서드 (5개)
indexOF/lastIndexOf(item,pos)
includes(value)
find/filter(func) - func의 반환 값을 true로 만드는 첫 번째/정체 요소를 반환함
findIndex </p>
<p>배열전체순회하기
forEACH(func) 모든 요소에 func를 호출함. 결과는 반환되지 않음</p>
<p>배열 변형하기
map(func)
sort(func)
reverse()
split/jion
reduce</p>
<hr>
<p><strong>splice</strong></p>
<ol>
<li>특정 요소를 지웁니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/5453c8d6-7fad-4cf9-8230-b01ee97d1605/image.png" alt=""></li>
<li>특정 요소를 지우고 추가합니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/70b708fb-bef4-4e9a-8fce-2aabe665f29e/image.png" alt=""></li>
<li>삭제된 요소를 변수에 넣어 반환도 가능합니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/0eee195b-f922-4210-98cd-9875ae7747e0/image.png" alt=""></li>
</ol>
<hr>
<p><strong>slice</strong>
특정 배열을 반환시켜 줍니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/b86a4256-bfd9-4253-a792-2eab094c50d4/image.png" alt=""></p>
<hr>
<p><strong>concat</strong>
배열끼리 합쳐줍니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/b08c8af4-746b-455d-81eb-b98eb957cb68/image.png" alt=""></p>
<hr>
<p><strong>forEach와 map</strong>
map, forEach 메소드는 모두 배열을 조회한다는 기능은 동일합니다. 다만 <code>forEach</code>는 <strong>별다른 return이 없는 반면 *<em><code>map</code>은 *</em>새로운 배열을 반환(return)합니다.</strong></p>
<p><strong>forEach</strong>
배열을 반복하는데, forEach는 함수를 인수로 받습니다.</p>
<ul>
<li>함수? (item, index, arr)를 의미</li>
</ul>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/3bfe6f3b-97e2-49e2-aec5-ed4e66e8fe82/image.png" alt=""></p>
<ul>
<li>정해진 값을 불러오지만, 반복되는 작업이면 forEach로 해결 가능</li>
</ul>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/66ec1ec8-de63-4073-a014-e22454e9db79/image.png" alt=""></p>
<p><strong>map</strong>
map은 배열 요소 전체를 대상으로 함수를 호출하고, 
함수 호출 결과를 배열로 반환해줍니다.</p>
<pre><code class="language-javascript">//productNames는 각 product의 name이 들어간 배열이다
var productNames = products.map((product, index) =&gt; { 
     return product.name;
});

//React에서는 다음과 같은 방식으로 데이터가 담긴 배열을 화면에 표시합니다.
var productElements = products.map((product,index) =&gt;{ 
    return (
        &lt;div&gt;
            &lt;span&gt;{product.name}&lt;/span&gt;
            ...
        &lt;/div&gt;
    )
})</code></pre>
<p><strong>indexOf와 lastIndexof</strong>
배열에서 특정 값을 찾아냅니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/ff03fbbe-6266-4ebe-9333-b3d315e3c29f/image.png" alt=""></p>
<hr>
<p><strong>find와 findIndex</strong>
find는 값을 찾아내고 findIndex는 조건에 맞는  Index 값을 찾아낸다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/77bb4098-17da-45e2-b994-e7a2dd76e6fa/image.png" alt=""></p>
<pre><code class="language-javascript">let result = arr.find(function(item, index, array) {
  // true가 반환되면 반복이 멈추고 해당 요소를 반환합니다.
  // 조건에 해당하는 요소가 없으면 undefined를 반환합니다.
});</code></pre>
<p>사용예제
<img src="https://velog.velcdn.com/images/promotion_dev/post/5c133d41-abe2-4607-aa4f-e4491ba9a3f5/image.png" alt=""></p>
<hr>
<p><strong>filter</strong>
<code>filter</code>는 만족하는 <strong>모든 요소를 배열로 변환</strong>
<code>find</code>는 만족하는 조건의 단 &#39;하나의 값&#39; 을 찾아낸다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/8960af91-8d48-4d6e-bb23-c0702167ef3a/image.png" alt=""></p>
<p>sort
배열의 요소를 정리해줍니다</p>
<ul>
<li>숫자는 숫자 순으로</li>
<li>문자는 사전 편집 순으로</li>
</ul>
<p><strong>compare</strong>
두 인자를 비교</p>
<hr>
<p><strong>reverse</strong>
역순으로 정렬시켜주는 메소드<img src="https://velog.velcdn.com/images/promotion_dev/post/ef3149db-6513-4082-b83a-37a1a53c0e0a/image.png" alt=""></p>
<hr>
<p><strong>split</strong> 
문자열을 나눠서 배열로 만들어 줍니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/e3311e30-8f0c-4048-ba37-dab1584c4132/image.png" alt=""></p>
<hr>
<p><strong>join</strong>
배열이 쉼표로 구분되서 합쳐진다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/574aefb9-321a-41a4-9bcf-b826b28ddfd0/image.png" alt="">
중간에 &quot;ㅋ&quot;처럼 문자열을 입력할 수 있다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/eb267f56-e0c7-4184-aff6-7cc6a210751d/image.png" alt=""></p>
<hr>
<h3 id="반복문">반복문</h3>
<h4 id="while-반복문">while 반복문</h4>
<pre><code class="language-javascript">let i = 0;
while (i &lt; 3) { // 0, 1, 2가 출력됩니다.
  alert( i );
  i++;
}</code></pre>
<p>*<em>do while *</em>
조건이 맨 마지막에 온다.
한번이라도 실행하고 싶을 때</p>
<p><strong>break</strong> - 해당 조건 만족 시 종료
<strong>continue</strong> - 조건 다음부터 실행</p>
<pre><code class="language-javascript">for (let i = 0; i &lt; 10; i++) {

  // 조건이 참이라면 남아있는 본문은 실행되지 않습니다.
  if (i % 2 == 0) continue;

  alert(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}</code></pre>
<p>labelName : for - 중첩 반복문을 빠져나오기 위해 사용
break labelName;</p>
<p>④⑤</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/ba44b4df-9f7b-4875-afbb-770bc0d13597/image.png" alt="">
① &quot;3&quot;
② &quot;바나나&quot;
③ &quot;32&quot;</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/3d5c129d-be54-4176-b28d-b1bcb5ddd6ec/image.png" alt=""></p>
<p>console.log(array.length) = 4
console.log(array.push(5)) = <del>[1,2,3,4,5]</del>
[오답] push()를 진행하면 요소의 갯수를 반환함으로 5이다.</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/d2372be3-b2ec-4815-a390-b52b7ced9822/image.png" alt="">
① 비파괴적처리 - split은 복사하기 때문에 비파괴
② 파괴적처리 - 원본 데이터에 감이 추가됨
③ 비파괴적처리 - 원본의 변화없이 map 함수 실행
④ 비파괴적처리 - trim이 원본의 공백을 삭제하지 하지 않음</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/5efe6eb4-e62d-4073-9616-0fc169ab0826/image.png" alt=""></p>
<p>#for in 반복문
0
1
2
3</p>
<p>#for of 반복문 
사과
배
귤
바나나</p>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/97e834e6-d17d-40a2-8de7-7aa36e09d764/image.png" alt=""></p>
<p>[오답[
for에서 const로 선언하면 안된다. <code>let</code>으로 해야한다.</p>
<ul>
<li>let은 재선언이 불가, 할당 가능</li>
<li>const는 재선언, 할당도 불가하기 때문에 변수를 추가할 수 없어서 사용하면 안된다.
arry = [3, 6, 9]</li>
</ul>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/76927904-f09e-422f-9be7-c5a9be316371/image.png" alt=""></p>
<pre><code class="language-javascript">let output = 1

for(i=1; i&lt;101; i++){
    output.push(ouput * i);
}

console.log(`1~100의 숫자를 모두 곱하면, &amp;{output}입니다.`)</code></pre>
<p><strong>[오답풀이]</strong> 대입연산자 개념</p>
<pre><code class="language-javascript">let output = 1 //output은 1이라고 선언

for(let i=1; i&lt;101; i++){
    output *=i // *= i를 곱한후 output에 대입
}

console.log(`1~100의 숫자를 모두 곱하면, &amp;{output}입니다.`)</code></pre>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/a86526cc-3e47-4718-9ec2-a7d304a22332/image.png" alt=""></p>
<pre><code class="language-javascript">for (let = i; i &lt;=5 ; i++) {
    console log(2n-1)    
}</code></pre>
<p>13579 2n-1
7531</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Javascript] if/switch 조건문]]></title>
            <link>https://velog.io/@promotion_dev/Javascript-ifswitch%EC%A1%B0%EA%B1%B4%EB%AC%B8%EC%9D%B4-%EB%AD%98%EA%B9%8C</link>
            <guid>https://velog.io/@promotion_dev/Javascript-ifswitch%EC%A1%B0%EA%B1%B4%EB%AC%B8%EC%9D%B4-%EB%AD%98%EA%B9%8C</guid>
            <pubDate>Tue, 07 Mar 2023 11:01:22 GMT</pubDate>
            <description><![CDATA[<h2 id="이-글의-목적">이 글의 목적</h2>
<blockquote>
<p>📌 Javascript의 선언문의 기초에 대해 다뤄봅시다. _if_문과 _switch_문을 통한 코딩을 해봅니다.</p>
</blockquote>
<p>Javascript에서 <strong>조건에 따라서 값이 변하는 형태를 표현할 때 
쓰이는 조건문</strong> 문법입니다.</p>
<ul>
<li><code>if</code>문 = 단수의 조건을 설정</li>
<li><code>if else</code> = if에서 여러개 조건을 추가</li>
<li><code>switch</code>문 = 복수의 if 조건을 switch문으로 변환 가능</li>
</ul>
<p>각자의 문법이 어떻게 쓰이는지 
예시를 들어가면서 알아보겠습니다.
&nbsp; 
&nbsp; </p>
<h2 id="조건문이란-무엇일까">조건문이란 무엇일까?</h2>
<hr>
<h3 id="1-조건문이란">1. 조건문이란?</h3>
<p>조건문은 <strong>조건(Condition)에 따라서 로직을 다르게 수행</strong>하도록 돕습니다.</p>
<p>예를 들면) 
일상생활에서는 나이가 N살 이상 술을 구매할 수 있다.
플랫폼을 예를 들면 유튜브의 악성 컨텐츠는 특정 나이 이하인 고객들에게 노출된다.</p>
<p>주로 사용되는 문법에는 <code>if</code>문과 있습니다.</p>
<h4 id="문법">문법</h4>
<p>중괄호()안에 조건을 넣으면 //로직이 출력 되는 간단한 문법입니다.</p>
<pre><code class="language-javascript">if(조건) {
    //로직
}</code></pre>
<p><strong>예시</strong>
제가 태어난 년도를 입력하는 퀴즈를 낼 수 있습니다.</p>
<pre><code class="language-javascript">let year = prompt(&#39;제가 태어난 년도는 언제일까요?&#39;, &#39;&#39;);
if (year == 1991) {
    console.log(&quot;정답입니다&quot;);
}</code></pre>
<p><strong>코드 실행</strong>
Chrome을 실행하고, <code>F12</code> 를 눌러 개발자도구를 열어줍니다.</p>
<ul>
<li><code>let</code>을 통해 정의한 year를 입력하는 prompt창이 뜹니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/fae940cf-b086-423f-8e2c-1a0fdf1bc318/image.png" alt=""></li>
</ul>
<ul>
<li><code>prompt</code> 에 맞는 변수를 입력해줍니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/455dfa25-8206-4d37-a3ab-e31fd60e150f/image.png" alt=""></li>
</ul>
<ul>
<li>console.log를 통해서 &quot;정답입니다&quot; 라는 텍스트를 반환합니다.
<img src="https://velog.velcdn.com/images/promotion_dev/post/d01aabdf-b98c-47bf-9b6b-7cca63cc514c/image.png" alt=""></li>
</ul>
<p>&nbsp;</p>
<h3 id="2-if문의-특징">2. if문의 특징</h3>
<ol>
<li>if문은 괄호 안의 표현식을 평가하고 그 결과를 Boolean갑으로 변환합니다.
true와 flase가 되는 조건은 아래와 같습니다.</li>
</ol>
<ul>
<li><code>false</code>가 되는 조건 (falsy값)</li>
<li><code>0</code> 0의 경우</li>
<li><code>&quot;&quot;</code> 빈 값</li>
<li><code>null</code> 값이 비어있는 경우</li>
<li><code>undefined</code> 변수가 <strong>할당</strong>되지 않았을 때</li>
<li><code>NaN</code> Not A Number - 연산과정에서 잘못된 입력 (0으로 나누는 경우)</li>
</ul>
<pre><code class="language-javascript">//0을 넣는 경우
if (0) { // 0은 falsy입니다.
  ...
}

//1을 넣는 경우
if (1) { // 0은 f입니다.
  ...
}</code></pre>
<p><strong>Console창 입력 예시</strong>
<img src="https://velog.velcdn.com/images/promotion_dev/post/a21229ec-3d60-482e-ad25-446ca5bf5d27/image.png" alt=""></p>
<p>&nbsp;</p>
<h3 id="3-조건문---switch">3. 조건문 - switch</h3>
<p>아까 말씀드렸듯이 복수의 <code>if</code> 조건문은 <code>switch</code> 문으로 바꿀 수 있습니다.</p>
<p>switch문은 결과값이 여러개임에 따라서 다른 결과를 호출하게 해줍니다.
따라서 특정 변수를 다양한 상황에서 비교할 수 있게 해줍니다.
그래서 코드 자체가 비교 상활을 잘 설명한다는 장점이 있습니다.</p>
<h4 id="문법-1">문법</h4>
<ul>
<li><p><strong>요약</strong> : switch (x) 라는 변수의 결과값이 case의 &#39;value&#39; 에 따라서
다른 값이 출력되고, 출력되면 동작이 break되어 다른 case를 실행하지 않습니다.</p>
</li>
<li><p>switch 중괄호 안에 <code>변수</code>를 넣어줍니다.
또는 <code>계산식</code>(x/2)등도 넣어줄 수 있습니다.</p>
</li>
<li><p><code>case</code> : 뒤의 ...의 명령문을 실행해줍니다.</p>
</li>
</ul>
<p><strong>예시</strong></p>
<pre><code class="language-javascript">
switch(x) { 
  case &#39;value1&#39;: //if (x === &#39;value1&#39;)와 같습니다.
    ...          // ...을 실행합니다.
    [break]      // ...을 실행한 후, 멈춥니다. (다른 케이스가 실행되지 않습니다)

  case &#39;value2&#39;: //if (x === &#39;value2&#39;)와 같습니다.
    ...
    [break]

  default :
    ...
    [break]
}</code></pre>
<p>&nbsp;
&nbsp;</p>
<h2 id="예제풀이를-통해서-다루는-개념적용을-해봅니다">예제풀이를 통해서 다루는 개념적용을 해봅니다.</h2>
<ul>
<li>출처 : 혼자 공부하는 자바스크립트 (윤인성 지음 | 한빛미디어)</li>
</ul>
<h4 id="문제-1번">문제 1번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/af38af0b-9b2e-4e78-8a1f-60a328379960/image.png" alt=""></p>
<p>① <code>false</code> 출력 : x는 4보다 작기 때문에
② <code>false</code> 출력 : x는 4보다 작기 때문에
③ <code>true</code> 출력 : x는 10으로 4보다 크기 때문에</p>
<h4 id="문제-2번">문제 2번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/017fa574-b4d5-43f9-a197-581d98ac27cc/image.png" alt=""></p>
<p>정답은 
<code>Number</code>
<code>Number</code>
<code>a &gt; b</code>
<code>a == b</code></p>
<h4 id="문제-3번">문제 3번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/d4841dd4-fbd6-4538-811b-63cb88283963/image.png" alt=""></p>
<p>정답은 <code>&amp;&amp;</code></p>
<h4 id="문제-4번">문제 4번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/ed8e2fe8-9bf3-4c1f-bc58-cd0c24b54d97/image.png" alt="">
<strong>[문제풀이]</strong></p>
<ul>
<li>prompt는 숫자를 입력해도 string으로 출력하기에 <strong>Number로 문자를 숫자열</strong>로 변환 필수</li>
</ul>
<ol>
<li>경우의 수는 양수, 0, 음수 그리고 문자의 경우의 수 존재</li>
<li>조건연산자 <code>?</code>를 이용해서 풀이</li>
<li>alert로 result 출력</li>
</ol>
<pre><code class="language-javascript">//prompt에서 받은 값을 result에서 연산   
let result = (a &gt; 0) ? &quot;양수입니다.&quot; :  //양수의 경우
             (a &lt; 0) ? &quot;음수입니다.&quot; : //음수의 경우
             (a == 0) ? &quot;0입니다.&quot; : //0인 경우
             &#39;숫자가 아닌 문자를 입력하셨습니다.&#39; ;

    alert(result); //연산을 통해 result 출력</code></pre>
<h4 id="문제-5번">문제 5번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/3f376e45-53e2-43ec-b8e5-053627571538/image.png" alt=""></p>
<p><strong>[문제풀이]</strong>
    1. 짝수, 홀수, 0, 문자입력 경우의 수 존재
    2. 조건연산자 <code>?</code>를 이용해서 풀이
    3. alert로 result 출력</p>
<pre><code class="language-javascript">//prompt에서 받은 값을 result에서 연산
let result = (a%2 == 0) ? &quot;짝수입니다.&quot;:
             (a%2 != 0) ? &quot;홀수입니다&quot; :
             (a == 0) ? &quot;0은 짝수랍니다.&quot; :
               &#39;숫자가 아닌 문자를 입력하셨습니다.&#39;;

    alert(result);
</code></pre>
<h4 id="문제-6번">문제 6번</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/9d2126d6-349b-429b-b091-7951f009c3db/image.png" alt=""></p>
<ul>
<li>추가정보 : 일반적으로 봄(3<del>5월) , 여름(6</del>8월), 가을(9<del>11월), 겨울(12</del>2월)</li>
</ul>
<p><strong>[문제풀이]</strong></p>
<ol>
<li>switch와 case를 이용해 25% 확률로 맞추면 break</li>
<li>하지만 오답 출력을 한다.</li>
<li>원인은 case의 경우 정확히 <a href="https://jimmy-ai.tistory.com/63">일치하는 값으로 판별 가능</a></li>
</ol>
<p>-&gt; 따라서 case의 경우로는 불가</p>
<pre><code class="language-javascript">//오답 : switch와 case를 통해서 출력 불가능
switch(a) {
  case (2&lt;a &amp;&amp; a&lt;6) :alert(&quot;봄입니다&quot;) ;break;
  case (5&lt;a &amp;&amp; a&lt;9) :alert(&quot;여름입니다&quot;) ;break;
  case (8&lt;a &amp;&amp; a&lt;12) :alert(&quot;가을입니다&quot;) ;break;
  case (11&lt;a &amp;&amp; a&lt;3) :alert(&quot;겨울입니다&quot;) ;break;
  default:alert(&quot;숫자를 적어주세요&quot;);
}
</code></pre>
<p><strong>[문제풀이]</strong></p>
<ol>
<li>if와 else if를 통해서 처리</li>
<li>봄 / 여름 / 가을 / 겨울의 경우 처리</li>
</ol>
<pre><code class="language-javascript">  if (3 &lt;= a &amp;&amp; a &lt;= 5) {
    alert(&quot;봄입니다&quot;);
  } else if (6 &lt;= a &amp;&amp; a &lt;= 8) {
    alert(&quot;여름입니다&quot;);
  }    else if (9 &lt;= a &amp;&amp; a &lt;= 11) {
    alert(&quot;가을입니다&quot;);
  } else {
        alert(&quot;겨울입니다&quot;);
  }
</code></pre>
<h3 id="switch-예제">switch 예제</h3>
<h4 id="문제1">문제1</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/b84dcce2-62df-4081-bbac-a8022d0c8def/image.png" alt=""></p>
<ol>
<li>100은 200보다 작기 때문에 <code>false</code></li>
<li><code>ture</code> 값 반환 confirm</li>
<li>확인 = <code>ture</code>, 취소 = <code>false</code>값 반환</li>
</ol>
<h4 id="문제2">문제2</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/65a40d17-33ba-48ad-917c-66aa92f58737/image.png" alt=""></p>
<pre><code class="language-javascript">// 태어난 해를 입력받아 12로 나누어 나머지 계산
const rawInput = prompt(&#39;태어난 해를 입력해주세요.&#39;, &#39;&#39;)
const year = Number(rawInput)
const e = year % 12

// result 값에 대한 변수 선언 = 빈 값으로 처리
let result = &#39;&#39;

// switch 문을 이용하여 result값 출력
switch(e) {
  case 5 : result = &quot;소&quot;;break;
  case 6 : result = &quot;호랑이&quot;;break;
  case 7 : result = &quot;토끼&quot;;break;
  case 8 : result = &quot;용&quot;;break;
  case 9 : result = &quot;뱀&quot;;break;
  case 10 : result = &quot;말&quot;;break;
  case 11 : result = &quot;양&quot;;break;
  case 12 : result = &quot;원숭이&quot;;break;
  case 0 : result = &quot;원숭이&quot;;break;
  case 1 : result = &quot;닭&quot;;break;
  case 2 : result = &quot;개&quot;;break;
  case 3 : result = &quot;돼지&quot;;break;
  case 4 : result = &quot;쥐&quot;;break;
}

// Template Literal 방식을 통해 변수 {year}와 {result}를 받아 alert로 출력
alert(`${year}년에 태어났다면 ${result} 띠입니다.`)</code></pre>
<p><strong>[문제풀이]</strong></p>
<ol>
<li>let으로 변수 선언 후 switch에서 계산</li>
<li>하지만 &amp;{year}년</li>
</ol>
<h4 id="문제3">문제3</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/077e8ddf-bb7f-4069-bf98-8c288643a358/image.png" alt=""></p>
<p><strong>[문제풀이]</strong></p>
<pre><code class="language-javascript">//prompt를 통한 rawInput
const rawInput = prompt(&#39;태어난 해를 입력해주세요.&#39;, &#39;&#39;)
const year = Number(rawInput)

//year를 통한 변수 계산식 설정
let e = (year%10)
let f = (year%12)

//나머지 값으로 12간지를 매칭하여 gan의 변수에 할당
let gan = &#39;&#39;
switch(e) {
  case 5: gan = &quot;경&quot;; break;
  case 6 : gan = &quot;신&quot;; break;
  case 7 : gan = &quot;임&quot;; break;
  case 8 : gan = &quot;계&quot;; break;
  case 9 : gan = &quot;갑&quot;; break;
  case 10 : gan = &quot;을&quot;; break;
  case 11 : gan = &quot;병&quot;; break;
  case 12 : gan = &quot;정&quot;; break;
  case 0 : gan = &quot;무&quot;; break;
  case 1 : gan = &quot;기&quot;; break;
}

//나머지 값으로 10천간을 매칭하여 belt의 변수에 할당
let belt = &#39;&#39;
switch(f) {
  case 5: belt = &quot;자&quot;; break;
  case 6 : belt = &quot;축&quot;; break;
  case 7 : belt = &quot;인&quot;; break;
  case 8 : belt = &quot;묘&quot;; break;
  case 9 : belt = &quot;진&quot;; break;
  case 10 : belt = &quot;사&quot;; break;
  case 11 : belt = &quot;오&quot;; break;
  case 12 : belt = &quot;미&quot;; break;
  case 0 : belt = &quot;신&quot;; break;
  case 1 : belt = &quot;유&quot;; break;
  case 2 : belt = &quot;술&quot;; break;
  case 3 : belt = &quot;해&quot;; break;
}

//alert를 통하여 출력
alert(`${year}년은 [${gan}${belt}년]입니다.`)
</code></pre>
<h4 id="문제-45">문제 4,5</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/f814ea5b-1298-457a-8800-6b3a6fe5be56/image.png" alt=""></p>
<p>정답은 
4번 ④else
5번 ③true만 출력</p>
<h4 id="문제-6">문제 6</h4>
<p><img src="https://velog.velcdn.com/images/promotion_dev/post/654d3dae-e87d-4be4-84a8-e76370143e1a/image.png" alt="">
① 오늘 먹은 아침 / 점심 / 저녁 식사의 칼로리 계산 프로그램</p>
<pre><code class="language-javascript">
// 아침,점심,저녁 칼로리 Input
&lt;script&gt;
 const breakfast_cal = Number(prompt(&quot;아침에 먹은 칼로리를 입력해주세요.&quot;, &#39;&#39;))
 const launch_cal = Number(prompt(&quot;점심에 먹은 칼로리를 입력해주세요.&quot;, &#39;&#39;))
 const dinner_cal = Number(prompt(&quot;저녁에 먹은 칼로리를 입력해주세요.&quot;, &#39;&#39;))

// 먹은 칼로리의 합계 계산
let total_cal = breakfast_cal + launch_cal + dinner_cal;

// 먹은 칼로리 출력
alert(`오늘 먹은 식사의 총 칼로리는 ${total_cal}cal 입니다.`)

&lt;/script&gt;</code></pre>
<p>② 어떤 은하까지 빛의 속도로 여행하면 10년이 걸릴 때, 그 거리를 구할 수 있을까?</p>
<ul>
<li>우리는 거=속*시 를 배웠다.</li>
<li>거리 = 속력 * 시간</li>
<li>빛의 속도 = 299,792,458m/s</li>
</ul>
<pre><code class="language-javascript">
// 빛의 속도로 역산
const distance = ((299792458/1000) * (10*365*24*60*60))
const kr_distance = distance.toLocaleString(&#39;ko-KR&#39;);

alert(`어떤 은하까지의 거리는 ${kr_distance}km 입니다.`)
</code></pre>
<p>③ 내가 가진 돈으로 국밥 몇그릇 먹는지 계산하는 계산기</p>
<pre><code class="language-javascript">const money = Number(prompt(&quot;갖고 계신 돈을 말씀해주세요.&quot;, &#39;원 단위로 입력해주세요.&#39;))
const quantity = Math.trunc.(money/6000)

alert(`저는 국밥을 ${quantity}개 사먹을 수 있네요.`)</code></pre>
]]></description>
        </item>
    </channel>
</rss>