<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>태현 블로그</title>
    <link>https://xogus-blog.tistory.com/</link>
    <description>혼자 공부하면서 나중에 다시 보려고 적는 블로그 글 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 7 Jun 2026 06:34:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>xogus-blog</managingEditor>
    <image>
      <title>태현 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7879610/attach/3390a9a2ac2a4f0a909677be695a035a</url>
      <link>https://xogus-blog.tistory.com</link>
    </image>
    <item>
      <title>[JavaScript] 굉장히 편한 reduce() 알아보기</title>
      <link>https://xogus-blog.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 .reduce()함수는 &lt;b&gt;배열에서&lt;/b&gt; &lt;b&gt;하나의 결과값을 만들어내는 강력한 함수&lt;/b&gt;이다.&lt;br /&gt;조금 어렵게 느껴질 수도 있지만, 핵심 개념이 딱 이해되면 정말 잘 써먹을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 말했지만 reduce는 여러 개의 배열 값에 간단한 조작을 통해 하나의 결과 값을 만들어 낼 수 있도록 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 배열을 하나 생성해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1745318587135&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let value = [1, 2, 3, 4, 5];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 배열의 모든 값을 더한 하나의 결괏값을 출력하기 위해서는 for, forEach 등 다양한 함수를 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, reduce를 사용하면 훨씬 간편하게 결과값을 도출해 낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 예시를 살펴보면,&lt;/p&gt;
&lt;pre id=&quot;code_1745318699352&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let value = [1, 2, 3, 4, 5];

const result = value.reduce((acc, cur) =&amp;gt; {
  return acc + cur;
}, 0);

console.log(result);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;acc는 지금까지의 누적값을 나타낸다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누적값 즉, acc의 초기 값은 함수의 괄호 전 '0' 작성해 지정해 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cur은 배열을 순차적으로 도는 현재 값을 나타낸다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for 문에서 i가 증가하며 배열의 값을 순차적으로 도는 것과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, cur의 값은 처음엔 1, 2, 3 이렇게 증가하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;return 값으로 acc와 cur값을 더해주게 되면 결과로는 &lt;b&gt;value라는 배열의 최종 합&lt;/b&gt;이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[출력 결과]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4CJUQ/btsNuDDNN08/ZtJ2VxEpreZEVu7o5Gow5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4CJUQ/btsNuDDNN08/ZtJ2VxEpreZEVu7o5Gow5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4CJUQ/btsNuDDNN08/ZtJ2VxEpreZEVu7o5Gow5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4CJUQ%2FbtsNuDDNN08%2FZtJ2VxEpreZEVu7o5Gow5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;192&quot; height=&quot;38&quot; data-origin-width=&quot;192&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또, reduce를 사용하면 배열의 &lt;b&gt;가장 작은 값을 편하게 찾아낼 수 있&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 다양한 수가 들어있는 배열을 하나 생성해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1745319014367&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let small = [10, 2, 3, 5, 6, 7, 8];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 배열에서 가장 작은 수를 찾아내는 것도 마찬가지로 반복문을 사용해 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 reduce를 사용하면 훨씬 간편하게 찾을 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1745319074116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const smallest = small.reduce((acc, cur) =&amp;gt; {
  if (acc &amp;gt; cur) {
    return cur;
  } else {
    return acc;
  }
});

console.log(smallest);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위쪽 코드에서는 total값을 구하기 위해 acc를 0으로 초기화했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이번 코드에서는 아무것도 작성하지 않았는데, 그 이유는 reduce의 사용 목적에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;reduce함수에서 마지막에 acc값을 지정하지 않으면&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;acc&lt;/b&gt;는 0번째 배열의 인수를 값으로 가지게 되며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cur&lt;/b&gt;의 값은 1번째 배열의 인수를 값으로 가지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 두 값을 비교하여 더 작은 값을 반환할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[결과]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;36&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9Pau3/btsNvVpecmE/mu4fCddM9Q6mWDu3N13qak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9Pau3/btsNvVpecmE/mu4fCddM9Q6mWDu3N13qak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9Pau3/btsNvVpecmE/mu4fCddM9Q6mWDu3N13qak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9Pau3%2FbtsNvVpecmE%2Fmu4fCddM9Q6mWDu3N13qak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;166&quot; height=&quot;36&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;36&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 배열에 객체가 할당되어 있어도 reduce를 통해 간단하게 합을 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 배열에는 과일의 이름과 가격이 저장되어 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과일 가격의 총합을 구하는 코드가 필요하다고 가정해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1745319520082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let object = [
  {
    name: &quot;사과&quot;,
    price: 5000,
  },
  {
    name: &quot;망고&quot;,
    price: 4000,
  },
  {
    name: &quot;수박&quot;,
    price: 9000,
  },
];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 경우에도 reduce를 통해 간편하게 과일 가격의 총합을 구할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1745319571299&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const totalPrice = object.reduce((acc, cur) =&amp;gt; {
  return acc + cur.price;
}, 0);

console.log(totalPrice);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[결과]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rXFIF/btsNuFaBew5/kCOUoMU8IZQUqAKPXAjdik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rXFIF/btsNuFaBew5/kCOUoMU8IZQUqAKPXAjdik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rXFIF/btsNuFaBew5/kCOUoMU8IZQUqAKPXAjdik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrXFIF%2FbtsNuFaBew5%2FkCOUoMU8IZQUqAKPXAjdik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;202&quot; height=&quot;26&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 reduce를 사용하면 코드를 훨씬 간단하게 적으며 원하는 기능을 수행할 수 있다&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/9</guid>
      <comments>https://xogus-blog.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 22 Apr 2025 20:01:28 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] async/await 알아보기</title>
      <link>https://xogus-blog.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 글에서 Promise의 개념과 사용법에 대해 알아보았다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-end=&quot;389&quot; data-start=&quot;236&quot; data-ke-size=&quot;size16&quot;&gt;하지만 실제로 코드를 작성하다 보면 Promise에는 단점이 존재한다.&lt;/p&gt;
&lt;p data-end=&quot;389&quot; data-start=&quot;236&quot; data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;.then() 혹은 .catch()를 계속 사용해줘야 한다는 점&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-end=&quot;389&quot; data-start=&quot;236&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;389&quot; data-start=&quot;236&quot; data-ke-size=&quot;size16&quot;&gt;이 방식은 비동기 작업이 많아질수록 코드가 &lt;b&gt;길어지고&lt;/b&gt;, &lt;b&gt;가독성도 떨어지는 문제&lt;/b&gt;를 야기한다.&lt;/p&gt;
&lt;p data-end=&quot;413&quot; data-start=&quot;391&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 다음과 같은 코드가 있다고 생각해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1744716534177&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Promise 사용
const fetchData2 = () =&amp;gt; {
  return new Promise((resolve) =&amp;gt; {
    resolve(&quot;  성공!&quot;);
  });
};

fetchData2().then((result) =&amp;gt; {
  console.log(result); //   성공!
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 짧아보일 수도 있지만, 실제 프로젝트에서 에러 처리를 포함한 여러 작업을 처리하려면 &lt;br /&gt;.then().then().catch()처럼 &lt;b&gt;체이닝이 반복&lt;/b&gt;되며 복잡도가 높아진다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 불편함을 해결하기 위해 등장한 것이 바로 async/await이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 async는 내부적으로 &lt;b&gt;Promise를 반환&lt;/b&gt;한다.&lt;br /&gt;즉, async는 &lt;b&gt;Promise를 감싸고 있는 선물상자&lt;/b&gt;와도 같다.&lt;/p&gt;
&lt;p data-end=&quot;922&quot; data-start=&quot;885&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;아래는 같은 기능을 async/await으로 작성한 코드이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744717424572&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// async 사용
const fetchData = async () =&amp;gt; {
  return &quot;  성공!&quot;;
};

const result = async () =&amp;gt; {
  const final = await fetchData();
  console.log(final); //   성공!
};

result();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 await을 통해 &lt;b&gt;비동기 작업의 결과를 마치 동기식 코드처럼&lt;/b&gt; 작성할 수 있다.&lt;br /&gt;또한 try/catch와 함께 쓰면 &lt;b&gt;에러 처리도 훨씬 간결&lt;/b&gt;하게 할 수 있어 가독성과 유지보수 면에서 큰 장점이 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;연속된 비동기 작업도 async/await으로 깔끔하게 가능!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 사용자의 요청 상태를 단계별로 출력해야 한다고 가정해보자.&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;193&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;193&quot; data-ke-size=&quot;size16&quot;&gt;Promise만 사용할 경우 .then() 체이닝이 계속 이어져서 코드가 지저분해질 수 있지만,&lt;br /&gt;async/await을 사용하면 &lt;b&gt;순차적인 흐름처럼&lt;/b&gt; 코드를 짤 수 있어 훨씬 &lt;b&gt;읽기 쉽고 관리하기 편해진다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;193&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;322&quot; data-start=&quot;193&quot; data-ke-size=&quot;size16&quot;&gt;아래 코드처럼 async와 await을 사용하면&lt;/p&gt;
&lt;pre id=&quot;code_1744717596622&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const sendDelayedMessage = (ms, message) =&amp;gt; {
  return new Promise((resolve) =&amp;gt; {
    setTimeout(() =&amp;gt; {
      resolve(message);
    }, ms);
  });
};

const userReq = async () =&amp;gt; {
  const res = await sendDelayedMessage(1000, &quot;고객님의 요청 완료 되었습니다.\n&quot;);
  const res1 = await sendDelayedMessage(2000, &quot;요청을 처리 중입니다.\n잠시만 기다려주세요.\n&quot;);
  const res2 = await sendDelayedMessage(3000, &quot;고객님의 요청이 정상적으로 완료되었습니다.&quot;);

  console.log(res);
  console.log(res1);
  console.log(res2);
};

userReq();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;1. &lt;/b&gt;작업의 순서가 &lt;b&gt;자연스럽고&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. &lt;/b&gt;에러 처리도 try/catch로 &lt;b&gt;직관적&lt;/b&gt;이며&lt;br /&gt;&lt;b&gt;3. 가독성&lt;/b&gt;도 매우 뛰어나다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-end=&quot;167&quot; data-start=&quot;144&quot; data-ke-style=&quot;style2&quot;&gt;❗️await의 진짜 역할은?&lt;/blockquote&gt;
&lt;p data-end=&quot;295&quot; data-start=&quot;169&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;295&quot; data-start=&quot;169&quot; data-ke-size=&quot;size16&quot;&gt;많은 사람들이 await을 단순히 &quot;기다린다&quot;라고만 생각하곤 한다.&lt;br /&gt;하지만 await은 그 이상으로 &lt;b&gt;Promise에 감싸진 값을 꺼내서&lt;/b&gt; 사용할 수 있게 해주는 &lt;b&gt;언랩(unwrapping)&lt;/b&gt; 역할도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들면,&lt;/p&gt;
&lt;pre id=&quot;code_1744717847505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const getMessage = () =&amp;gt; {
  return new Promise((resolve) =&amp;gt; {
    resolve(&quot;감싸진 메시지&quot;);
  });
};

const show = async () =&amp;gt; {
  const result = getMessage(); // await을 사용하지 않음
  const result_use_await = await getMessage(); // 여기서 await이 Promise의 값을 '꺼내줌'
  
  console.log(result); // 감싸진 메시지
  console.log(result_use_await); // 꺼내진 메시지
};

show();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;[실행 결과]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0uJEZ/btsNnpw19CZ/5vXUz9BnMUQq4W1IvSdpH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0uJEZ/btsNnpw19CZ/5vXUz9BnMUQq4W1IvSdpH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0uJEZ/btsNnpw19CZ/5vXUz9BnMUQq4W1IvSdpH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0uJEZ%2FbtsNnpw19CZ%2F5vXUz9BnMUQq4W1IvSdpH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;305&quot; height=&quot;45&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이렇게 await은 Promise에 감싸진 메시지를 꺼내주는 역할도 한다.&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <category>async</category>
      <category>await</category>
      <category>javascript</category>
      <category>promise</category>
      <category>비동기</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/8</guid>
      <comments>https://xogus-blog.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 15 Apr 2025 20:54:59 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] Promise란 무엇인가?</title>
      <link>https://xogus-blog.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트의 꽃은 비동기 처리이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 비동기 처리가 무엇일까?&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, &lt;b&gt;동기처리란 무엇&lt;/b&gt;인지 살펴보자.&lt;br /&gt;--&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 커피숍에 갔다고 가정하고, 내 앞에 2명의 사람이 주문하고 있다고 생각해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 주문은 단순히 쿠키 하나를 포장하는 주문이고.&lt;br /&gt;내 앞사람들의 주문은 빵과 커피 2잔을 포장하는 주문이라고 생각해 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 동기처리는 내 앞사람들 주문이 모두 처리될 때까지 나는 무한정 대기해야 한다.&lt;br /&gt;&lt;br /&gt;그렇다면 나는 생각할 것이다.&lt;br /&gt;&quot;아니 쿠키 하나만 주면 되는걸 내가 앞사람들 주문까지 다 기다려야 되나?&quot;&lt;br /&gt;-&amp;gt; 이것이 동기 처리의 단점이다. 사실 이론상으로는 앞 주문을 먼저 처리하는 것이 맞지만, 굉장히 비효율 적이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그럼 &lt;b&gt;비동기 처리란 무엇인가?&lt;/b&gt;&lt;br /&gt;앞 상황에서 굉장히 센스 있는 직원이 나는 쿠키만 빨리 주면 되기 때문에 앞사람 주문이 완료되기 전 나에게 쿠키를 먼저 하나 준 것이다.&lt;br /&gt;&lt;br /&gt;이렇게 되면 직원 입장에서는 빨리 끝낼 수 있는 일은 빨리 쳐냈기 때문에 편하고, 나도 빨리 다른 업무를 보러 갈 수 있어 좋다.&lt;br /&gt;&lt;br /&gt;이것이 비동기 처리이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;그렇다면 왜 자바스크립트의 꽃이 비동기 처리일까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트는 싱글스레드 언어로, 하나의 스레드에서 하나의 작업만 수행할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 웹 서비스의 경우 이벤트도 많고, 사용자 인터렉션, 서버 요청 또한 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 비동기 처리가 없으면, 사이트가 멈춰버리는 현상까지도 발생할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 callback, promise, &lt;b&gt;async/await&lt;/b&gt; 등 비동기 기술이 엄청 중요해졌고 발전했으면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS가 인기를 끌게 된 이유이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 그럼 Promise가 무엇인지 살펴보자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Promise&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Promise는 자바스크립트의 내장 객체로서, &lt;b&gt;비동기 처리의 완료 &amp;amp; 실패를 나타낸다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Promise를 생성하는 코드를 먼저 살펴보자.&lt;/p&gt;
&lt;pre id=&quot;code_1744704291704&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const promise = new Promise((resolve, reject) =&amp;gt; {
  // 비동기 작업 수행
  if (성공) {
    resolve(결과값);
  } else {
    reject(에러메시지);
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 new Promise는 새로운 Promise를 생성하는 함수 호출 코드이다.&lt;br /&gt;&lt;br /&gt;Promise는 resolve, reject 이렇게 두 개의 매개변수를 가지며 말 그대로&lt;br /&gt;&lt;b&gt;reslove = 결과(성공)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;reject = 거부(실패)&lt;/b&gt;&lt;br /&gt;를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 resolve와 reject에 담긴 값은, Promise 생성자 함수로 만든 객체의 내장 메서드(.then &amp;amp; .catch)를 이용하여 더 편하게 나타낼 수 있다.&lt;br /&gt;&lt;br /&gt;코드로 살펴보면&lt;/p&gt;
&lt;pre id=&quot;code_1744704640374&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;promise
  //resolve(성공)
  .then((result) =&amp;gt; {
    console.log(&quot;result:&quot;, result);
  })
  
  //reject(실패)
  .catch((error) =&amp;gt; {
    console.log(&quot;error: &quot;, error);
  })&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 작성 가능하며 위 코드를 합치고&lt;/p&gt;
&lt;pre id=&quot;code_1744704719673&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const promise = new Promise((resolve, reject) =&amp;gt; {
  // 비동기 작업 수행
  if (성공) {
    resolve(&quot;성공&quot;);
  } else {
    reject(&quot;서버 오류&quot;);
  }
});

promise
  .then((result) =&amp;gt; {
    console.log(&quot;result:&quot;, result);
  })
  .catch((error) =&amp;gt; {
    console.log(&quot;error: &quot;, error);
  })&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행할 경우&lt;/p&gt;
&lt;pre id=&quot;code_1744704818893&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;result: 성공 //성공 시

or

error: 서버오류  //실패 시&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 출력될 것이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번외로, &lt;b&gt;성공 및 실패 여부와 상관없이&lt;/b&gt; Promise결과 값에 &lt;b&gt;출력을 추가&lt;/b&gt;할 수 있는 메서드가 있다.&lt;br /&gt;&lt;br /&gt;바로 .then / .catch와 같은 구조인&lt;b&gt; .finally이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 살펴보면&lt;/p&gt;
&lt;pre id=&quot;code_1744704972944&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const promise = new Promise((resolve, reject) =&amp;gt; {
  // 비동기 작업 수행
  if (성공) {
    resolve(&quot;성공&quot;);
  } else {
    reject(&quot;서버 오류&quot;);
  }
});

promise
  .then((result) =&amp;gt; {
    console.log(&quot;result:&quot;, result);
  })
  .catch((error) =&amp;gt; {
    console.log(&quot;error: &quot;, error);
  })
  .finally(() =&amp;gt; {
    console.log(&quot;promise 종료&quot;);
  });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 추가가 가능하며 위 결과 값과 비교해 보면&lt;/p&gt;
&lt;pre id=&quot;code_1744705030463&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;result: 성공 //성공 시
promise 과정 종료  //fianlly로 인해 생성된 출력

or

error: 서버오류  //실패 시
promise 과정 종료  //fianlly로 인해 생성된 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 출력된다.&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <category>javascript</category>
      <category>new promise</category>
      <category>promise</category>
      <category>비동기</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/7</guid>
      <comments>https://xogus-blog.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 15 Apr 2025 17:20:48 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 헷갈리는 callback함수 정리</title>
      <link>https://xogus-blog.tistory.com/6</link>
      <description>&lt;p data-end=&quot;363&quot; data-start=&quot;274&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;C나 Java처럼 함수 이름을 명확히 정의하는 언어들과 달리, JavaScript에서는 화살표 함수와 익명 함수를 사용해 callback 함수를자주 작성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초반에 공부할 때 굉장히 혼동이 오기도 해서 정리를 해본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 함수를 변수에 할당을 살펴보자&lt;/p&gt;
&lt;pre id=&quot;code_1744634046016&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//변수에 함수 할당
const work = () =&amp;gt; {
  console.log(&quot;hello world&quot;);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드의 함수 이름은 work인 것 같지만 그렇지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;화살표 함수는 이름이 없는 익명 함수이다. work는 단지 익명 함수를 담고 있는 변수명이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수에 이름이 없더라도, 변수를 통해 저장하거나 다른 함수에 인자로 넘겨 사용할 수 있다.&lt;br /&gt;특히, 코드 실행 순서를 제어하기 위해 익명 함수를 callback으로 넘겨 호출하는 구조로 자주 활용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 이해가 쉽게 코드를 추가해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1744634230384&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//변수에 함수 할당
const work = (callback) =&amp;gt; {
  callback();
};

work(() =&amp;gt; {
  console.log(&quot;종료&quot;);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 코드를 봤을 때 첫 번째 3줄은 work라는 변수에 익명함수를 저장했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 익명함수의 매개변수는 callback으로 함수의 호출을 기다리고 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그럼 callback으로 받는 다른 익명함수는 어디있을까?&lt;br /&gt;그 코드가 바로 아래 3줄이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744634448869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;work(() =&amp;gt; {
  console.log(&quot;종료&quot;);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 익명 함수를 생성해 work 함수의 callback에 전달하는 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히는 &lt;b&gt;익명함수를 생성해서 work 함수에 인자로 넘긴 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 해당 코드를 실행하면, callback을 매개변수로 받는 익명함수가 실행되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의된 익명함수 속 console.log(&quot;종료&quot;);가 실행되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드 관점에서는 결국 두개의 익명함수가 생성된 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1744635710124&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 첫 번째 익명 함수 (work 함수)
const work = (callback) =&amp;gt; {
  callback();
};

// 두 번째 익명 함수 (callback으로 넘기는 함수)
work(() =&amp;gt; {
  console.log(&quot;종료&quot;);
});&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 왜 함수를 한 번에 정의하지 않고, 외부에서 따로 넘겨줄까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 코드처럼 간단한 경우에는 바로 작성하는 것이 편해 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제 개발에서는 작업의 흐름을 분리하거나, 원하는 동작만 골라서 실행하기 위해 callback 구조를 자주 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 예시는 추후에 작성해 보도록 하겠다.&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/6</guid>
      <comments>https://xogus-blog.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 14 Apr 2025 21:44:01 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 자바스크립트 객체 -&amp;gt; 배열 변환(keys, values, entries)</title>
      <link>https://xogus-blog.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 생성된 객체를 배열로 변환해 접근하는 편한 방법이 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 객체(object)를 하나 간단하게 생성해 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1744612834922&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const person = {
  name: &quot;홍길동&quot;,
  age: &quot;23&quot;,
  gender: &quot;boy&quot;,
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 생성된 객체는 key값에만 혹은 value값에만 접근하기 귀찮을 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에, key값 혹은 value값을 배열에 따로 저장한다면 index번호만으로 쉽게 접근할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막 entries()를 사용하면 객체 값을 배열에 담고 새로운 배열을 생성하여 모두 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어렵지 않은 과정이니 한번 살펴보자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열로 바꾸는 방법은 크게 3가지가 존재하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째로 &lt;b&gt;Object.keys()&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 객체의 키값들만 배열에 담아 저장하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 한번 살펴보면&lt;/p&gt;
&lt;pre id=&quot;code_1744613794715&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let newArray = Object.keys(person);

console.log(newArray);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 newArray라는 배열에 Object.keys(person)를 활용해 person객체에 담긴 key값을 배열에 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 실행해 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQiCSG/btsNk6kKSMG/GL2cwBTkv2jjvaaKkoFJA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQiCSG/btsNk6kKSMG/GL2cwBTkv2jjvaaKkoFJA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQiCSG/btsNk6kKSMG/GL2cwBTkv2jjvaaKkoFJA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQiCSG%2FbtsNk6kKSMG%2FGL2cwBTkv2jjvaaKkoFJA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;21&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;key값만 배열에 잘 담긴 것을 확인할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 객체의 value값은 배열에 어떻게 저장할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;Object.values()&lt;/b&gt;를 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 객체의 벨류값만 배열에 담아 저장하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 살펴보면&lt;/p&gt;
&lt;pre id=&quot;code_1744614114521&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let newArray2 = Object.values(person);

console.log(newArray2);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 newArray2라는 배열에 Object.values(person)을 활용해 person 객체에 담긴 value값을 배열에 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 실행해 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRV4z1/btsNlfhsyPV/orkucRX1xkbhLrngyL18m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRV4z1/btsNlfhsyPV/orkucRX1xkbhLrngyL18m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRV4z1/btsNlfhsyPV/orkucRX1xkbhLrngyL18m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRV4z1%2FbtsNlfhsyPV%2ForkucRX1xkbhLrngyL18m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;244&quot; height=&quot;26&quot; data-origin-width=&quot;508&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;value값만 배열에 잘 담긴 것을 확인할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, key와 value값을 모두 배열에 담을 순 없을까? 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;Object.entries()&lt;/b&gt;를 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법은 새로 생성한 배열 안에 다른 배열을 추가로 생성하여 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에, key값과 value값 모두가 배열에 새로 저장된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드로 살펴보면&lt;/p&gt;
&lt;pre id=&quot;code_1744620030884&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let newArray3 = Object.entries(person);

console.log(newArray3);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 객체를 newArray3라는 배열에 Object.entries(person)을 활용해 person 객체에 담긴 key, value값을 배열에 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위 코드를 실행해 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba0Shh/btsNkMsOqh9/JDkFSEiKDKOtOTBrSkf0zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba0Shh/btsNkMsOqh9/JDkFSEiKDKOtOTBrSkf0zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba0Shh/btsNkMsOqh9/JDkFSEiKDKOtOTBrSkf0zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba0Shh%2FbtsNkMsOqh9%2FJDkFSEiKDKOtOTBrSkf0zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;521&quot; height=&quot;20&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 key 그리고 value값이 새로 생성된 배열 속 새로운 배열에 들어가 있는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 생긴 배열을 응용하면 for문을 통해 index번호 만으로도 쉽게 객체를 출력해 낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre id=&quot;code_1744620237553&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (let i = 0; i &amp;lt; newArray3.length; i++) {
  console.log(`key : ${newArray3[i][0]} / value : ${newArray3[i][1]}`);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 실행해 보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mwLwF/btsNk3aIlsh/PQr6LQ3zExXMg939d0xh60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mwLwF/btsNk3aIlsh/PQr6LQ3zExXMg939d0xh60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mwLwF/btsNk3aIlsh/PQr6LQ3zExXMg939d0xh60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmwLwF%2FbtsNk3aIlsh%2FPQr6LQ3zExXMg939d0xh60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;63&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 객체 속 내용을 간편하게 출력할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 사실, 이렇게 배열로 바꾸지 않고 for문을 통해 훨씬 더 쉽게 접근할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;b&gt;굳이 배열로 바꾸지 않아도 되는 상황&lt;/b&gt;이면 for문을 통해 객체에 바로 접근하자.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[예시]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744620889289&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person = {
  name: &quot;홍길동&quot;,
  age: &quot;23&quot;,
  gender: &quot;boy&quot;,
};

//for문을 사용한 객체 값 접근
for (let i in person) {
  console.log(`key : ${i} / value : ${person[i]}`);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 실행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQrn12/btsNiv6EGnA/D410VUJ4KHgXOj60GX8k80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQrn12/btsNiv6EGnA/D410VUJ4KHgXOj60GX8k80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQrn12/btsNiv6EGnA/D410VUJ4KHgXOj60GX8k80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQrn12%2FbtsNiv6EGnA%2FD410VUJ4KHgXOj60GX8k80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;72&quot; data-origin-width=&quot;564&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 동일한 결과를 얻을 수 있다.&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <category>Array</category>
      <category>javascript</category>
      <category>Object</category>
      <category>객체</category>
      <category>배열</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/5</guid>
      <comments>https://xogus-blog.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 14 Apr 2025 17:45:40 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 자바스크립트 배열 수정 타입 에러 (const, let)</title>
      <link>https://xogus-blog.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서는 배열을 어떤 타입으로 생성하는 냐에 따라서 수정 여부가 달라진다.&lt;br&gt;&amp;nbsp;&lt;br&gt;먼저 배열을 생성해 보자.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//배열 생성
const fruits = [&quot;apple&quot;, &quot;orange&quot;, &quot;peach&quot;];&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;배열의 요소를 수정하는 코드는 크게 두 가지가 있다.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;fruits = [&quot;apple&quot;, &quot;kiwi&quot;, &quot;peach&quot;]
fruits[2] = &quot;mango&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;하지만 이 코드를 실행해 보면,&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;TypeError: Assignment to constant variable.&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;이러한 에러가 발생한다.&lt;br&gt;&amp;nbsp;&lt;br&gt;그 이유는 배열 생성을 const로 생성했기 때문&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;const의 경우 변수 자체를 변경할 수 없는 바인딩된 참조&lt;/b&gt;이다.&lt;br&gt;때문에 배열의 요소(객체)를 각각 수정할 수는 있지만, 배열 자체를 &lt;b&gt;통째로 변경하는 것은 불가능&lt;/b&gt;하다.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 const로 생성된 배열은&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;fruits[2] = &quot;mango&quot;;&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 직접 객체에 접근해 수정하고,&lt;br&gt;&amp;nbsp;&lt;br&gt;통으로 배열 자체를 바꿀 일이 많다면 const 대신 &lt;b&gt;let을 사용해서 배열&lt;/b&gt;을 선언하자.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;[예시]&lt;/b&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//배열 생성
let fruits = [&quot;apple&quot;, &quot;orange&quot;, &quot;peach&quot;]; //let으로 선언

//배열 요소 수정
fruits = [&quot;apple&quot;, &quot;kiwi&quot;, &quot;peach&quot;];&amp;nbsp;&amp;nbsp; //배열 통째로 수정
fruits[2] = &quot;mango&quot;;&amp;nbsp;&amp;nbsp;//접근 수정

//배열 출력
console.log(fruits);&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;[결과]&lt;/b&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnqX61/btsNg9JrG64/zXPtczDreRma77y76KBjD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnqX61/btsNg9JrG64/zXPtczDreRma77y76KBjD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnqX61/btsNg9JrG64/zXPtczDreRma77y76KBjD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnqX61%2FbtsNg9JrG64%2FzXPtczDreRma77y76KBjD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;90&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/4</guid>
      <comments>https://xogus-blog.tistory.com/4#entry4comment</comments>
      <pubDate>Sat, 12 Apr 2025 20:24:23 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 자바스크립트 객체 Value값 변경 &amp;amp; 삭제, 함수 호출</title>
      <link>https://xogus-blog.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 객체 내의 값을 점표기법 및 괄호 표기법을 통해 변경하거나 삭제할 수 있음.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;[생성된 객체]&lt;/b&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;const car = {
&amp;nbsp;&amp;nbsp;name: &quot;붕붕&quot;,
&amp;nbsp;&amp;nbsp;model: &quot;sonata&quot;,
&amp;nbsp;&amp;nbsp;color: &quot;balck&quot;,
&amp;nbsp;&amp;nbsp;print: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(car.name, car.model);
&amp;nbsp;&amp;nbsp;},
};&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;[변경 및 삭제 코드]&lt;/b&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//객체의 경우 const로 선언하더라도 값 변경 가능함
car.model = &quot;K5&quot;&amp;nbsp;&amp;nbsp; //점표기법
car[&quot;model&quot;] = &quot;K5&quot;;&amp;nbsp;&amp;nbsp; //괄호표기법

//객체 삭제
delete car.name;&amp;nbsp;&amp;nbsp; //점표기법
delete car[&quot;name&quot;];&amp;nbsp;&amp;nbsp; //괄호표기법&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;이렇게 점 표기법과 괄호 표기법을 사용하면 객체 내에 저장된 값을 변경할 수 있음.&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;추가로, 객체 내에 &lt;b&gt;생성된 함수를 호출하는 경우&lt;/b&gt;에도 동일하게 호출할 수 있음.&lt;br&gt;&lt;br&gt;&lt;b&gt;[객체 내 생성된 함수 호출 코드]&lt;/b&gt;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;car.print();&amp;nbsp;&amp;nbsp; //점표기법
car[&quot;print&quot;]();&amp;nbsp;&amp;nbsp; //괄호표기법&lt;/code&gt;&lt;/pre&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[번외]&lt;/b&gt;&lt;br&gt;객체 내 함수에서 자신이 속한 객체 내의 value값을 활용하고 싶을 땐 ${this.you want key}를 사용하면 된다.&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;//본인이 속해있는 객체를 재활용할 때
const car = {
&amp;nbsp;&amp;nbsp;name: &quot;붕붕&quot;,
&amp;nbsp;&amp;nbsp;model: &quot;sonata&quot;,
&amp;nbsp;&amp;nbsp;color: &quot;balck&quot;,
&amp;nbsp;&amp;nbsp;print: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(`제 자동차 이름은 ${this.name} 입니다.`); //해당 부분
&amp;nbsp;&amp;nbsp;},
};&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;[출력 결과]&lt;/b&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM1DX6/btsNi6MvOGC/7s2JeYSqKCLCvSqOT6Wzrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM1DX6/btsNi6MvOGC/7s2JeYSqKCLCvSqOT6Wzrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM1DX6/btsNi6MvOGC/7s2JeYSqKCLCvSqOT6Wzrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM1DX6%2FbtsNi6MvOGC%2F7s2JeYSqKCLCvSqOT6Wzrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;257&quot; height=&quot;22&quot; data-origin-width=&quot;606&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/3</guid>
      <comments>https://xogus-blog.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 12 Apr 2025 19:47:08 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 콜백함수 개념</title>
      <link>https://xogus-blog.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에는 콜백함수가 많이 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 함수를 재활용하고 유연하고 다양한 동작의 개발이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1744289547640&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//콜백 함수

const calculator = (a, b, callback) =&amp;gt; {
  const result = a + b;
  callback(result);
};

const printResult = (result) =&amp;gt; {
  console.log(&quot;더하기 값은 : &quot; + result);
};

const doubleResult = (result) =&amp;gt; {
  console.log(&quot;2를 곱한 값은 : &quot; + result * 2);
};

calculator(2, 3, printResult);
calculator(4, 5, doubleResult);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;877&quot; data-start=&quot;824&quot;&gt;callback(result)는 &quot;callback 자리에 있는 함수를 호출해라&quot;는 뜻이고&lt;/li&gt;
&lt;li data-end=&quot;918&quot; data-start=&quot;878&quot;&gt;그 callback 자리에 printResult가 들어갔으니까&lt;/li&gt;
&lt;li data-end=&quot;955&quot; data-start=&quot;919&quot;&gt;결국 printResult(result)를 실행됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;doubleResult도 마찬가지이기에 따로 부연설명은 하지 않음&lt;br /&gt;&lt;br /&gt;정리하면, callback 자리에는 결국 함수가 들어간다고 생각하면 됨!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[코드 쉽게 정리]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1744289866836&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//원래 함수
const calculator = (a, b, callback) =&amp;gt; {
  const result = a + b;
  callback(result);
};

//실제로 실행되는 함수 변형
const calculator = (a, b, printResult) =&amp;gt; {
  const result = a + b;
  printResult(result); //callback자리에 printResult 함수가 들어감
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/2</guid>
      <comments>https://xogus-blog.tistory.com/2#entry2comment</comments>
      <pubDate>Thu, 10 Apr 2025 21:59:13 +0900</pubDate>
    </item>
    <item>
      <title>[JavaScript] 자바스크립트 괄호표기법 사용한 객체 Value 값 가져오기</title>
      <link>https://xogus-blog.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;객체 프로퍼티 Key 값을 이용해 Value값 가져오기.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;const car = {
&amp;nbsp;&amp;nbsp;name: &quot;자동차&quot;,
&amp;nbsp;&amp;nbsp;model: &quot;sonata&quot;,
&amp;nbsp;&amp;nbsp;color: &quot;balck&quot;,
};

const getValue = (key) =&amp;gt; {
&amp;nbsp;&amp;nbsp;console.log(car[key]);
};

getValue(&quot;color&quot;);&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;- car[key]&lt;br&gt;- getValue(&quot;color&quot;);&lt;br&gt;&amp;nbsp;&lt;br&gt;이렇게 객체 프로퍼티에 저장된 값을 &quot;문자열'로 호출하면 그에 맞는 Value값을 가져올 수 있음.&lt;br&gt;&amp;nbsp;&lt;br&gt;점 표기법을 이용해 출력하는 방법도 있지만, 함수처럼 key값을 대입해야 하는 경우에는 &lt;b&gt;괄호표기법을 사용해 가져오는 것이 더 효과&lt;/b&gt;적임.&lt;/p&gt;</description>
      <category>JavaScript_study</category>
      <author>xogus-blog</author>
      <guid isPermaLink="true">https://xogus-blog.tistory.com/1</guid>
      <comments>https://xogus-blog.tistory.com/1#entry1comment</comments>
      <pubDate>Thu, 10 Apr 2025 21:46:02 +0900</pubDate>
    </item>
  </channel>
</rss>