<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자의 작은 실험실 </title>
    <link>https://laylab.tistory.com/</link>
    <description>하면 된다, 안되는 건 없다!</description>
    <language>ko</language>
    <pubDate>Mon, 5 Oct 2026 02:08:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>JeonLay</managingEditor>
    <image>
      <title>개발자의 작은 실험실 </title>
      <url>https://tistory1.daumcdn.net/tistory/7804854/attach/685976bb081441e1bc7ae3a1b953e592</url>
      <link>https://laylab.tistory.com</link>
    </image>
    <item>
      <title>[게임 QA] 이제부턴 QA 공부도 해볼랍니다!</title>
      <link>https://laylab.tistory.com/28</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;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;제가 요즘에는 게임 QA에도 관심이 많아서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한동안은 QA 공부 위주로 해보면서&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;&lt;b&gt;게임 QA&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;게임의 기획 의도가 게임에 바르게 반영&lt;/b&gt;이 되었는지를 확인하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 맞는 &lt;b&gt;TC(Test Case, 테스트 케이스)를 설계&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;p data-ke-size=&quot;size16&quot;&gt;1. 기획 검토&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. TC 설계&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 버그 찾기 -&amp;gt; BTS(Bug Tracking System, 버그 트래킹 시스템)에 기록&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;게임의 밸런스나 재미 요소도 함께 살펴보게 됩니다.&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;아무래도 기획서를 참고해 TC를 설계하거나 테스트를 진행하다 보니,&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;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;아무리 TC 설계를 잘하고, 테스트를 꼼꼼하게 한다고 해도,&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;정확하게 전달하기 어렵겠죠..?&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;앞으로 QA를 공부하면서 알게 된 내용들이나 느낀 점들을&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;</description>
      <category>QA</category>
      <category>BTS</category>
      <category>QA</category>
      <category>TC</category>
      <category>게임</category>
      <category>게임qa</category>
      <category>공부</category>
      <category>기록</category>
      <category>버그트래킹시스템</category>
      <category>취준</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/28</guid>
      <comments>https://laylab.tistory.com/28#entry28comment</comments>
      <pubDate>Sat, 4 Jul 2026 23:38:31 +0900</pubDate>
    </item>
    <item>
      <title>[코딩테스트/JS] 오늘부터 꾸준히 코테 연습하기! | CodeSignal</title>
      <link>https://laylab.tistory.com/27</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;교육을 들으면서도 꾸준히 블로그 작성을 하려했지만,,,&lt;br&gt;노션에만 정리해두고 글은 올리지 못한 나 ㅎ.ㅎ&lt;br&gt;역시 글을 꾸준히 쓰는건 너무 어렵다;&amp;lt;&lt;br&gt;&amp;nbsp;&lt;br&gt;요근래 취준하면서 &lt;span style=&quot;color: #333333;&quot;&gt;계속해서 &lt;/span&gt;서류도 넣고,&lt;br&gt;인생 첫 면접도 보면서 새로운 경험을 많이 했는데&lt;br&gt;&amp;nbsp;&lt;br&gt;정작 제일 중요한 코딩 연습을 너무 안해버린 이슈...&lt;br&gt;그래서 서류를 붙어도 코테에 당연히 불합격할 수 밖에 없는 실력인... &lt;br&gt;&amp;nbsp;&lt;br&gt;넥토리얼도 그렇고..&amp;nbsp;&amp;nbsp;기업들 코테 어떻게 치는지 봤는데..&lt;br&gt;영어..로 코테를... 보는 곳도 꽤 있다니.. 난 영어 정말 못하는데...&lt;br&gt;&amp;nbsp;&lt;br&gt;그래서 더 위기감을 느껴서 영어 해석하는 연습도 해볼 겸 CodeSignal이나 LeetCode로 연습도 해보려고 한다!&lt;br&gt;(알고리즘도 공부를 해야..겠쬬.. 공부 열심히 안한 과거의 나 자신.. 정말 좋다^_^)&lt;br&gt;&amp;nbsp;&lt;br&gt;코딩하는 감을 잃지 않기 위해 이번에는 꼭 꾸준히 글도 쓰면서 연습하길 빌며... 아자잣&lt;br&gt;&amp;nbsp;&lt;br&gt;바로 CodeSignal의 다양한 학습 과정 중 &lt;span style=&quot;color: #0A1122;&quot;&gt;Four-Week Coding Interview Prep in JavaScript&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;로 연습 시이작!~&lt;/span&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btGZp4/dJMcacWamKN/6JFYxIcLRg7cwYhKZfhBk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btGZp4/dJMcacWamKN/6JFYxIcLRg7cwYhKZfhBk1/img.png&quot; data-alt=&quot;CodeSignal 들어가보니 다양한 과정들이 많아서 영어 코테는 물론 다른 언어도 공부하기 좋아 보였음!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btGZp4/dJMcacWamKN/6JFYxIcLRg7cwYhKZfhBk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtGZp4%2FdJMcacWamKN%2F6JFYxIcLRg7cwYhKZfhBk1%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;1237&quot; height=&quot;694&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CodeSignal 들어가보니 다양한 과정들이 많아서 영어 코테는 물론 다른 언어도 공부하기 좋아 보였음!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; [String Manipulation Basics]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 모음 위치(인덱스) 찾기 &lt;/b&gt;&lt;/h4&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;문자열 s를 입력 받아, 문자열을 순회하며 모음의 0부터 시작하는 위치를 배열에 저장하는 함수를 작성한다.&lt;/li&gt;&lt;li&gt;JavaScript 내장 메서드 사용 금지.&lt;/li&gt;&lt;li&gt;예를 들어, &lt;b&gt;console.log(findVowelPositions(&quot;Hello WORLD&quot;))&lt;/b&gt;는 &lt;b&gt;[1, 4, 7]&lt;/b&gt;을 출력해야 한다. 여기서 'e'는 모음이고, &quot;Hello&quot; 문자열에서 1번째 위치이다. 'o' 또한 모음이고, 4번째 위치이다. 마지막 모음은 7번째 위치의 'O'이다.&lt;/li&gt;&lt;li&gt;모음은 다음 문자 중 하나로 정의된다: &lt;b&gt;['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function findVowelPositions(s) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const result = [];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 문자열을 0-based 인덱스로 끝까지 순회
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(i=0; i&amp;lt;s.length; i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char = s[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// 현재 문자가 모음 목록 중 하나인지 확인
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(j=0; j&amp;lt;vowels.length; j++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(char === vowels[j]){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.push(i); // 모음이면 s에서의 위치(i) 저장
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	break; // 불필요한 비교를 줄이고 중복 데이터에 대비할 수 있음
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return result;
}

module.exports = { findVowelPositions };&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. charCodeAt, fromCharCode 없이 알파벳 시프트하기 &lt;/b&gt;&lt;/h4&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;주어진 문자열에서 &lt;b&gt;모든 문자&lt;/b&gt;를 &lt;b&gt;알파벳 순서대로 오른쪽으로 한 칸씩 이동&lt;/b&gt;시킨 &lt;b&gt;새로운 문자열을 반환&lt;/b&gt;한다.&lt;/li&gt;&lt;li&gt;마지막 문자 &lt;b&gt;'z'와 'Z'&lt;/b&gt;는 각각 첫 번째 문자 &lt;b&gt;'a'와 'A'&lt;/b&gt;로 바뀌어야 하며, 문자가 아닌 경우에는 그대로 유지해야 해야 한다.&lt;/li&gt;&lt;li&gt;charCodeAt()이나 fromCharCode()와 같은 문자열 내장 메서드는 사용할 수 없다.&lt;/li&gt;&lt;li&gt;예를 들어, &quot;&lt;b&gt;abc123XYz!&lt;/b&gt;&quot;라는 문자열이 주어지면, 함수는 &quot;&lt;b&gt;bcd123YZa!&lt;/b&gt;&quot;를 반환해야 한다.&lt;/li&gt;&lt;/ul&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function solution(s) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const lower = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const upper = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let result = &quot;&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(let i=0; i&amp;lt;s.length; i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char = s[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// z,Z 예외 처리
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(char === &quot;z&quot;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += &quot;a&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} else if(char ===&quot;Z&quot;){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += &quot;A&quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// char가 소문자일 경우
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let idx = -1; // lower나 upper에서 발견된 위치 저장하기 위한 변수
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (let j = 0; j &amp;lt; lower.length; j++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (lower[j] === char) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx = j;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(idx !== -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += lower[idx+1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // char가 대문자일 경우 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (let j = 0; j &amp;lt; upper.length; j++) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (upper[j] === char) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx = j;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(idx !== -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += upper[idx+1];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += char;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return result;
}

module.exports = { solution };&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; break: 현재 루프 1개만 종료&lt;br&gt;&amp;gt; continue: 현재 반복을 끝내고 다음 반복으로!&lt;br&gt;&amp;gt; 난 왜 이런 개념도 헷갈리는 거지!!!!!!!! 후.. 왜겠어.. 열심히 공부 안한 탓이지..&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. toLowerCase, toUpperCase 없이 모든 소문자/&lt;/b&gt;&lt;b&gt;대문자를 &lt;/b&gt;&lt;b&gt;모든 &lt;/b&gt;&lt;b&gt;대문자/소문자로 변환하기&lt;/b&gt;&lt;/h4&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;주어진 문자열 &lt;b&gt;inputString&lt;/b&gt;에서 &lt;b&gt;모든 소문자를 대문자&lt;/b&gt;로, &lt;b&gt;모든 대문자를 소문자&lt;/b&gt;로 변환하는 함수를 작성한다.&lt;/li&gt;&lt;li&gt;문자가 아닌 경우에는 변환하지 않는다.&lt;/li&gt;&lt;li&gt;변환 과정에서 'toLowerCase()', 'toUpperCase()' 등의 JavaScript 내장 메서드를 사용하지 않는다.&lt;/li&gt;&lt;li&gt;예를 들어, 입력 문자열 &quot;HelLo WoRld 123&quot;의 출력은 &quot;hELlO wOrLD 123&quot;이어야 한다.&lt;/li&gt;&lt;/ul&gt;&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function solution(inputString) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const lower = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const upper = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let result = &quot;&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(i=0; i&amp;lt;inputString.length; i++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char = inputString[i];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let idx = -1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//소문자 -&amp;gt; 대문자
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(j=0; j&amp;lt;lower.length; j++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(char === lower[j]){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx = j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(idx !== -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += upper[idx];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//대문자 -&amp;gt; 소문자
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(j=0; j&amp;lt;upper.length; j++){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(char === upper[j]){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;idx = j
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(idx !== -1){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += lower[idx];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result += char;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return result;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}

module.exports = { solution };&lt;/code&gt;&lt;/pre&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;br&gt;코테를 지금에서야 준비한다는게 정말 늦었다고 생각해서&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpi4r2/dJMcah4fEVM/dXy7RSbHKFtU7r2GzGVbRK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpi4r2/dJMcah4fEVM/dXy7RSbHKFtU7r2GzGVbRK/img.jpg&quot; data-alt=&quot;ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpi4r2/dJMcah4fEVM/dXy7RSbHKFtU7r2GzGVbRK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpi4r2%2FdJMcah4fEVM%2FdXy7RSbHKFtU7r2GzGVbRK%2Fimg.jpg&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;568&quot; height=&quot;425&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 실전으로 가보려고 했지만...?&lt;br&gt;JS 개념들을 꼭 되짚어봐야겠다고 느꼈다ㅠ (알고리즘들도...)&lt;br&gt;기초 복습도 하면서 하루에 코테 2~3문제씩은 꼭 풀 수 있도록 해보자아ㅏ아아아아ㅏ&lt;br&gt;(어떤 방식으로 기초 복습할지 다들 어떤식으로 계속 공부하는지 또 찾아봐야겠뜨아)&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>CodeSignal</category>
      <category>javascript</category>
      <category>JS</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/27</guid>
      <comments>https://laylab.tistory.com/27#entry27comment</comments>
      <pubDate>Tue, 20 Jan 2026 09:00:43 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Learn JavaScript | Day 4</title>
      <link>https://laylab.tistory.com/26</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; JavaScript 기초 정리&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;- 스코프, 모듈, 객체, 조건문, 객체 비교&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 수업에서는 JavaScript의 &lt;b&gt;스코프(Scope)&lt;/b&gt;, &lt;b&gt;모듈 스코프&lt;/b&gt;, &lt;b&gt;객체(Object)의 구조와 활용&lt;/b&gt;,&lt;br /&gt;그리고 &lt;b&gt;조건문&lt;/b&gt;, &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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;스코프&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 블록 스코프 예제&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 전역
let scope = '전역'

{
  let scope1 = '지역'

  {
    let scope2 = '중첩된 지역'
    console.log(1, scope2) // ✅ '중첩된 지역'
  }

  console.log(2, scope1) // ✅ '지역'
}

console.log(3, scope) // ✅ '전역'&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;라인&lt;/td&gt;
&lt;td&gt;코드&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;let scope = '전역'&lt;/td&gt;
&lt;td&gt;전역 스코프. 어떤 블록이나 함수 밖에 있으므로 어디서든 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5~7&lt;/td&gt;
&lt;td&gt;let scope1 = '지역'&lt;/td&gt;
&lt;td&gt;첫 번째 블록 내부에만 존재. 블록 밖에서는 접근 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8~10&lt;/td&gt;
&lt;td&gt;let scope2 = '중첩된 지역'&lt;/td&gt;
&lt;td&gt;중첩 블록 내부에만 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;console.log(1, scope2)&lt;/td&gt;
&lt;td&gt;현재 블록 안이므로 '중첩된 지역' 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;console.log(2, scope1)&lt;/td&gt;
&lt;td&gt;scope1은 같은 바깥 블록에 있으므로 '지역' 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;console.log(3, scope)&lt;/td&gt;
&lt;td&gt;전역에 선언된 변수이므로 '전역' 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;는 &lt;b&gt;블록 스코프&lt;/b&gt;를 가지므로 선언된 블록 안에서만 유효하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수 스코프 예제&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let name = '전역'
let nickname = '레이'

function 함수() {
  let name = '함수'

  function 중첩된함수() {
    let name = '중첩된 함수'

    console.log(1, name)      // ✅ '중첩된 함수'
    console.log(1, nickname)  // ✅ '레이'
  }

  중첩된함수()

  console.log(2, name)        // ✅ '함수'
}

함수()
console.log(3, name)          // ✅ '전역'&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;라인&lt;/td&gt;
&lt;td&gt;코드&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1~2&lt;/td&gt;
&lt;td&gt;let name, let nickname&lt;/td&gt;
&lt;td&gt;전역 스코프&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;function 함수()&lt;/td&gt;
&lt;td&gt;함수 스코프 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;let name = '함수'&lt;/td&gt;
&lt;td&gt;함수 안에서만 유효한 지역 변수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;function 중첩된함수()&lt;/td&gt;
&lt;td&gt;또 하나의 함수 스코프 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;let name = '중첩된 함수'&lt;/td&gt;
&lt;td&gt;이 안에서만 유효&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;console.log(1, name)&lt;/td&gt;
&lt;td&gt;가장 가까운 name = '중첩된 함수'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;console.log(1, nickname)&lt;/td&gt;
&lt;td&gt;nickname은 전역에서 찾음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;console.log(2, name)&lt;/td&gt;
&lt;td&gt;중첩된 함수 바깥에 있는 '함수' 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;console.log(3, name)&lt;/td&gt;
&lt;td&gt;최상단 전역 name인 '전역' 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;b&gt;자신만의 지역 스코프&lt;/b&gt;를 가지고, 안쪽 함수는 바깥 함수나 전역의 변수도 &lt;b&gt;접근 가능&lt;/b&gt;하지만, 바깥은 안쪽 변수에 접근할 수 없다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 요약 비교&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;항목&lt;/td&gt;
&lt;td&gt;블록 스코프 ({})&lt;/td&gt;
&lt;td&gt;함수 스코프 (function)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;적용 대상&lt;/td&gt;
&lt;td&gt;let, const&lt;/td&gt;
&lt;td&gt;var, 함수 내부 전체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;바깥에서 접근&lt;/td&gt;
&lt;td&gt;❌ 불가능&lt;/td&gt;
&lt;td&gt;❌ 내부 변수 접근 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;중첩 접근&lt;/td&gt;
&lt;td&gt;✅ 안쪽은 바깥 참조 가능&lt;/td&gt;
&lt;td&gt;✅ 내부는 외부 참조 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;전역 변수 접근&lt;/td&gt;
&lt;td&gt;✅ 가능&lt;/td&gt;
&lt;td&gt;✅ 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;모듈&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 기본 스크립트(&lt;code&gt;type=&quot;module&quot;&lt;/code&gt; 없이 작성된 스크립트)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 안에서 선언된 전역 변수는 전역 객체(window)에 등록된다.&lt;/li&gt;
&lt;li&gt;따라서 다른 스크립트나 콘솔 등에서 접근이 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| type=&quot;module&quot;을 사용한 스크립트&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 JS 파일은 모듈 스코프를 가지게 된다.&lt;/li&gt;
&lt;li&gt;따라서 파일 내부의 전역 변수는 전역 객체(window)에 등록되지 않고 외부에서 접근할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEtgT0/btsOz5xCzN6/gVDBpQtjrxyGsUo52vjcRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEtgT0/btsOz5xCzN6/gVDBpQtjrxyGsUo52vjcRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEtgT0/btsOz5xCzN6/gVDBpQtjrxyGsUo52vjcRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEtgT0%2FbtsOz5xCzN6%2FgVDBpQtjrxyGsUo52vjcRk%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;1037&quot; height=&quot;169&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 일반 스크립트는 전역 변수 &amp;rarr; window.변수명 으로 접근 가능하지만,&lt;br /&gt;모듈 스크립트는 자체 스코프 안에서만 유효하다.&lt;/p&gt;
&lt;/blockquote&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체 (Object)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변수가 기억할 수 있는 데이터 타입은 아래의 두 가지 뿐.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본(Primitive, 원시) 데이터 타입&lt;/li&gt;
&lt;li&gt;객체(Object) 데이터 타입&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체란?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;키(key)-값(value)&lt;/b&gt; 쌍을 포함하는 데이터&lt;/li&gt;
&lt;li&gt;중괄호 &lt;code&gt;{}&lt;/code&gt; 안에 쉼표로 구분하여 작성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dart&quot;&gt;&lt;code&gt;// 객체 생성자(Constructor)를 사용해 객체 생성
const 우유 = new Object();
우유.이름 = '저지방 우유';
우유.브랜드 = '서울 우유';
우유.용량 = '1000ml';

// 객체 리터럴을 사용해 객체 정의 (쉬운 방법)
const 커피 = {
  용량: '600ml',
  브랜드: '스타벅스',
  이름: '아메리카노',
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;객체와 유사한 구조&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML &lt;code&gt;&amp;lt;dl&amp;gt;&lt;/code&gt; 설명 목록&lt;/li&gt;
&lt;li&gt;CSS 스타일 블록&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;나의 노트북을 객체로 만들어 보자!&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;const labtop = {
  장치_이름: 'JYEON',
  프로세서: 'Intel(R) Core(TM) Ultra 5 125H   3.60 GHz',
  설치된_RAM: '16.0GB(15.6GB 사용 가능)',
  시스템_종류: '64비트 운영 체제, x64 기반 프로세서',
  펜_및_터치: '펜과 10개 터치 포인트 지원',
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체에 포함 가능한 값&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript에서 유효한 모든 값 포함할 수 o&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;const anObject = {
  string: '객체란는 모든 값을 포함할 수 있습니다.',
  number: 2025,
  boolean: true,
  anotherObject: {},
  aFunction: function() {},
  anArray: [],
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체 속성 값 읽기&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;점 표기법: &lt;code&gt;album.key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;대괄호 표기법: &lt;code&gt;album['key']&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JavaScript의 속성은 &amp;ldquo;property&quot;라고 하며, 객체의 key이다.&lt;br /&gt;반면, HTML의 속성은 &amp;ldquo;attribute&amp;rdquo;라고 하며, 태그에 정의된 고정된 값이다.&lt;/p&gt;
&lt;/blockquote&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&gt;대괄호 표기법 사용이 필요한 경우② 변수로 속성을 읽어야 할 경우&lt;/li&gt;
&lt;li&gt;① 속성 이름이 따옴표로 묶인 경우 (유효하지 않은 속성 이름은 따옴표로 묶어야 한다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 변수 이름 작성 규칙을 따르지 않는 객체의 속성 이름일 경우
const example = {
'유효하지 않은 속성 이름' : 'value'
}
console.log(example['유효하지 않은 속성 이름']) // value

// 변수를 통해 속성을 읽어야 할 경우
const macbookPro= {
macOS : '2.4 GHz 8코어 Intel Core i9',
}
let propertyName = 'macOS'
console.log(macbookPro[propertyName]) // '2.4 GHz 8코어 Intel Core i9'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체 속성 값 쓰기&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;album.key = '앨범명'
album['key'] = '앨범명'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체 속성 삭제&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;delete album.key
delete album['key']&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체의 메서드&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체의 속성 중 &lt;b&gt;함수를 값으로 포함하는 속성&lt;/b&gt;을 &lt;b&gt;메서드&lt;/b&gt;라고 부름&lt;/li&gt;
&lt;li&gt;호출 방법: &lt;code&gt;album.method()&lt;/code&gt; 또는 &lt;code&gt;album['method']()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;메서드에 매개변수 전달 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수의 타입은?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 타입(Object Type)이다!!&lt;/li&gt;
&lt;li&gt;객체 타입이기에 객체처럼 속성을 가질 수도 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수는 값으로 취급&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수가 값처럼 취급되는 성질: &lt;b&gt;일급 객체(First-class Object)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;함수를 인수로 받거나 반환하는 함수: &lt;b&gt;고차 함수(Higher-order Function)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 함수는 값으로 취급 되고, 인수로 함수를 전달할 수 있다는 이야기다&lt;br /&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;+ 함수에서 함수를 반환할 수도 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;조건문 - if&amp;hellip;else&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 상황에서 &lt;b&gt;프로그램의 작동을 조건부로 제어&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 예시
let isActive= true
if (isActive) {
  console.log('활성화 상태입니다.');
} else {
  console.log('비활성화 상태입니다.');
}

// 활성화 상태입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 참, 거짓 평가&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 조건은 표현식이므로 &lt;b&gt;참(Truthy)&lt;/b&gt; 또는 &lt;b&gt;거짓(Falsey)&lt;/b&gt;인지 평가한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;값이 거짓으로 평가되는 것들&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;false (boolean)&lt;/li&gt;
&lt;li&gt;0 (number)&lt;/li&gt;
&lt;li&gt;''(빈 문자열)&lt;/li&gt;
&lt;li&gt;null&lt;/li&gt;
&lt;li&gt;undefined&lt;/li&gt;
&lt;li&gt;NaN (숫자 + undefined)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;불리언 타입 변경&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값이 거짓으로 평가되는 것들을 제외한 나머지 값은 모두 참으로 평가된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 36.1628%; height: 34px;&quot; border=&quot;1&quot; data-ke-style=&quot;style16&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td rowspan=&quot;2&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf9HkV/btsOzKUOc4N/1zmXSXu42QaE10buW7u4l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf9HkV/btsOzKUOc4N/1zmXSXu42QaE10buW7u4l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf9HkV/btsOzKUOc4N/1zmXSXu42QaE10buW7u4l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf9HkV%2FbtsOzKUOc4N%2F1zmXSXu42QaE10buW7u4l1%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;259&quot; height=&quot;632&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yImAh/btsOzEULeBR/GBAki5cNwKyv24U76GEyX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yImAh/btsOzEULeBR/GBAki5cNwKyv24U76GEyX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yImAh/btsOzEULeBR/GBAki5cNwKyv24U76GEyX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyImAh%2FbtsOzEULeBR%2FGBAki5cNwKyv24U76GEyX0%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;308&quot; height=&quot;242&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&lt;/span&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUcP6F/btsOzPIxLbP/5dFZAxgEA39GtmkZ3WMWFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUcP6F/btsOzPIxLbP/5dFZAxgEA39GtmkZ3WMWFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUcP6F/btsOzPIxLbP/5dFZAxgEA39GtmkZ3WMWFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUcP6F%2FbtsOzPIxLbP%2F5dFZAxgEA39GtmkZ3WMWFk%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;241&quot; height=&quot;94&quot; data-origin-width=&quot;241&quot; data-origin-height=&quot;94&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;자동 타입 변경&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건문 내부에서 평가되는 표현식은 자동으로 불리언(Boolean) 타입으로 변경된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;if (10 - 11) {
  console.log('조건이 참이다.');
} else {
  console.log('조건이 거짓이다.');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 비교 연산자&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;숫자 비교에 사용: &amp;gt;, &amp;ge;, &amp;lt;, &amp;le;&lt;/li&gt;
&lt;li&gt;각 항을 비교하거나 같거나 다른지 평가에 사용: ==, ===, &amp;ne;, &amp;ne;=&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;느슨한 vs 엄격한 비교&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 느슨한 비교&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;==, !=&lt;/li&gt;
&lt;li&gt;변수의 할당된 값의 타입이 유동적으로 변경될 수 있다.&lt;/li&gt;
&lt;li&gt;따라서 타입이 다른 두 값을 비교할 때, JavaScript가 타입을 자동 변환해서 비교하기 때문에 예측과는 다른 평가가 될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 타입을 숫자로 자동 변환 시도한다.&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 엄격한 비교&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;===, !==&lt;/li&gt;
&lt;li&gt;엄격한 비교를 수행할 때, 두 가지 사항을 확인한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수에 할당된 값의 타입&lt;/li&gt;
&lt;li&gt;변수 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;JavaScript가 타입을 자동 변환하지 않기 때문에 예측한 대로 평가된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| else if 문&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건이 여럿인 경우에는 if, else 외에도 else if문을 사용해 비교하여 처리&lt;/li&gt;
&lt;/ul&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체 비교&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 동치 vs 동등 연산자&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 타입의 비교는 기본 타입의 비교 처리와 다르다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;연산자&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;text-align: start;&quot;&gt;비교 방식&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;의미&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;===&lt;/td&gt;
&lt;td&gt;엄격한 동치&lt;/td&gt;
&lt;td&gt;값과 타입이 모두 같아야 true&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;==&lt;/td&gt;
&lt;td&gt;느슨한 동등&lt;/td&gt;
&lt;td&gt;값만 같으면 true (타입 자동 변환)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체끼리는 ===나 == 모두 참조가 다르면 false!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체는 참조로 비교된다.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &amp;ldquo;고유 식별자&amp;rdquo;가 생기는데, 이를 &amp;ldquo;객체 참조(Object Reference)&amp;rdquo;라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(like 신분증)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체는 &lt;b&gt;값&lt;/b&gt;이 아니라 &lt;b&gt;참조(메모리 주소)&lt;/b&gt; 를 비교한다.&lt;/li&gt;
&lt;li&gt;아무리 모양이 같아도 참조가 다르면 &lt;b&gt;다른 객체&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;같은 참조를 가리킬 때만 &lt;code&gt;===&lt;/code&gt; 결과가 &lt;code&gt;true&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 메모리와 객체&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;타입 종류&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;저장 위치&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt; 비교 방식 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;기본(원시) 타입&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;스택(Stack)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;값 자체를 비교&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;객체(참조) 타입&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;힙(Heap)&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;b&gt;참조(주소)를 비교&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 타입의 값은 = 를 하면 값이 복사된다.&lt;br /&gt;그런데 객체 타입은 값이 복사되는 것이 아니라 참조가 복사된다.&lt;br /&gt;따라서 객체 타입은 값이 비교되는 것이 아니라, 참조가 비교되는 것이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 객체 속성&amp;middot;값이 같은지 확인하려면?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;===&lt;/code&gt;로는 비교 불가 (참조만 비교)&lt;/li&gt;
&lt;li&gt;모든 &lt;b&gt;속성과 값&lt;/b&gt;을 하나씩 비교해야 함&lt;/li&gt;
&lt;li&gt;이를 위해 &lt;b&gt;반복문(루프)&lt;/b&gt; 사용해야 한다. &amp;rarr; 이건 다음번에 학습!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오늘의 느낀 점 !&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오늘 배운 스코프, 모듈, 객체, 조건문, 객체 비교에서 몇 가지는 익숙한 개념들이라 부담 없이 받아들일 수 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그런데, '일급 객체'라거나 '고차 함수' 같은 용어는 처음 들어봐서 조금 낯설었&amp;hellip;지만,&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결국 이 용어들이 말하고자 하는 건 결국 &lt;b&gt;함수도 값이다!&lt;/b&gt; 라는 개념이라 이해할 수 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 객체 참조랑 메모리 구조에 관해서 설명을 들을 때는&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&quot;아.. 전공 수업 때 배운 내용이네...&quot; 싶은 순간이 있었는데, 그걸 거의 다 까먹은 나 자신이 살짝 미울 뻔했다...^_^&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그만큼 더 공부해서 잊어버린 것들을 되찾아야겠다는 다짐을 해본다  &lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>멋쟁이사자처럼/JavaScript</category>
      <category>javascript</category>
      <category>객체</category>
      <category>객체 비교</category>
      <category>멋쟁이사자처럼후기자 #자바스크립트</category>
      <category>모듈</category>
      <category>스코프</category>
      <category>조건문</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/26</guid>
      <comments>https://laylab.tistory.com/26#entry26comment</comments>
      <pubDate>Thu, 12 Jun 2025 21:38:47 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Learn JavaScript | Day 3</title>
      <link>https://laylab.tistory.com/25</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;2506&quot; data-end=&quot;2522&quot;&gt;자바스크립트 기초 정리 2&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;2506&quot; data-end=&quot;2522&quot;&gt;| 기본값, return, 표현식, 호이스팅, 함수 선언 방식, 화살표 함수 표현식&lt;/h2&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;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;2506&quot; data-end=&quot;2522&quot;&gt;&lt;b&gt;함수 (Function)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수, 변수의 기본값&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;undefined&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;2506&quot; data-end=&quot;2522&quot;&gt;&lt;b&gt;| 반환값&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;return 키워드로 값을 명시적 반환한다.&lt;/li&gt;
&lt;li&gt;함수 내부에서 return을 사용하면 &lt;b&gt;실행을 중단하고 값을 반환&lt;/b&gt;함.&lt;/li&gt;
&lt;li&gt;return 아래 코드들은 실행되지 않음.&lt;/li&gt;
&lt;li&gt;return이 없으면 함수는 &lt;b&gt;암묵적으로 undefined를 반환&lt;/b&gt;함.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function add(x, y) {
  return x + y;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 표현식&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전달되기 전에 평가되어야 하는 값
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: 12 + 9, sum(21 + 11 ,9)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표현식(예: 21 + 11)을 전달&lt;/b&gt;하는 경우, 해당 &lt;b&gt;표현식은 함수에 전달되기 전에 먼저 평가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수를 호출해 반환 값&lt;/b&gt;을 다른 함수에 &lt;b&gt;전달&lt;/b&gt;하는 경우, &lt;b&gt;값을 사용하기 전에 먼저 함수 평가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;자바스크립트는 오직 &lt;b&gt;&quot;값&quot;만 전달&lt;/b&gt;할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수 선언 방식 2가지&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 선언: 특정 순서에 따라 작업이 실행되는 코드 묶음(블록)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;function&lt;/b&gt;을 사용한 함수 선언&lt;/h4&gt;
&lt;pre id=&quot;code_1749650401546&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function add(x, y) {
	return x + y
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;함수 표현식&lt;/b&gt;(expression)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수명을 지정하지 않아도 함수를 선언할 수 있다.&lt;/li&gt;
&lt;li&gt;익명(Anonymous)&amp;nbsp;함수라고도&amp;nbsp;함.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749650565903&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const add = function(x, y) {
	return x + y
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 호이스팅 (&lt;a title=&quot;호이스팅&quot; href=&quot;https://developer.mozilla.org/ko/docs/Glossary/Hoisting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Hoisting&lt;/a&gt;)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  함수 선언&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;function 선언 방식은 &lt;b&gt;호이스팅되어 코드의 맨 위로 끌어올려짐&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;함수 호출이 선언보다 먼저 나와도 &lt;b&gt;정상 작동&lt;/b&gt;함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 코드를 &lt;b&gt;구조적으로 정리&lt;/b&gt;하기 좋음.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;sayHello() // 가능

function sayHello() {
  console.log('안녕!')
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  함수 표현식&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;var, let, const로 선언한 &lt;b&gt;함수 표현식은 변수 선언 자체는 호이스팅되지만&lt;/b&gt;, &lt;b&gt;함숫값은 호이스팅되지 않음&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;선언 전에 호출하면 &lt;b&gt;에러 발생&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;sayHello() // ❌ 에러

const sayHello = function() {
  console.log('안녕!')
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  변수 선언 (var, let, const)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;var로 선언한 변수는 &lt;b&gt;선언과 동시에 undefined로 초기화됨&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;선언 이전에 접근하면 undefined가 출력됨.&lt;/li&gt;
&lt;li&gt;따라서 &lt;b&gt;참조는 가능하지만, 값은 아직 할당되지 않음&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;console.log(마이네임) // undefined

var 마이네임 = '레이'
&lt;/code&gt;&lt;/pre&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&gt;let과 const는 &lt;b&gt;호이스팅은 되지만 &quot;TDZ(Temporal Dead Zone)&quot;&lt;/b&gt; 때문에&lt;/li&gt;
&lt;li&gt;선언 전에 접근하면 &lt;b&gt;참조 에러(ReferenceError)&lt;/b&gt; 발생함.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;console.log(마이네임) // ❌ ReferenceError

let 마이네임 = '레이'
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 변수 선언 방식별 동작 비교 (함수 호출 vs 변수 참조)&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;구분&amp;nbsp;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;&lt;b&gt;var&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;&lt;b&gt;let&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;호이스팅&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;O (선언 + undefined 초기화)&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;O (but TDZ에 걸림)&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;O (but TDZ에 걸림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;초기화 시점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;선언과 동시에 undefined&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;선언문 도달 시&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;선언문 도달 시 (초기화 필수)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;선언 전 변수 참조 시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;가능 (undefined 반환)&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;ReferenceError&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;ReferenceError&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;선언 전 함수 호출 시&lt;br /&gt;&lt;/b&gt;(※ 함수 표현식일 때)&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;TypeError&lt;br /&gt;(undefined is not a function)&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;ReferenceError&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;ReferenceError&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 19.6512%;&quot;&gt;&lt;b&gt;재할당 가능 여부&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.9767%;&quot;&gt;가능&lt;/td&gt;
&lt;td style=&quot;width: 17.907%;&quot;&gt;가능&lt;/td&gt;
&lt;td style=&quot;width: 25.3488%;&quot;&gt;불가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;TDZ (Temporal Dead Zone, 일시적 사각지대)&lt;/b&gt;&lt;br /&gt;- 변수는 호이스팅되어 메모리에 등록은 되어 있지만, 초기화되기 전까지 접근할 수 없는 구간&lt;/blockquote&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-ke-style=&quot;style2&quot;&gt;호이스팅 현상을 잘 이용하면 코드의 실행 흐름을 깔끔하게 유추할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749649194806&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 코드 흐름을 먼저 보여줌
wakeUp()
brushTeeth()
haveBreakfast()

// ...

// 함수들은 파일 맨 끝에 배치
function wakeUp() {
  console.log('⏰ 일어납니다.')
}

function brushTeeth() {
  console.log('  이를 닦습니다.')
}

function haveBreakfast() {
  console.log('  아침을 먹습니다.')
}&lt;/code&gt;&lt;/pre&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;화살표 함수 표현식&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화살표 함수는 뚱뚱한 화살표(Fat Arrow&amp;nbsp;=&amp;gt;) 모양을 사용&lt;/li&gt;
&lt;li&gt;function 키워드 제거&lt;/li&gt;
&lt;li&gt;함수의 (), {} 사이에 =&amp;gt; 모양 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1749650715969&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let readABook = (bookName) =&amp;gt; {
  console.log('&quot;' + bookName + '&quot;을 읽는다.');
};

readABook('로미오와 줄리엣'); // &quot;로미오와 줄리엣&quot;을 읽는다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 다양한 화살표 함수 구문&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 매개변수 개수&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1749650913350&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 1. 매개변수의 개수
//    0개
let readABook = () =&amp;gt; {
  console.log('책을 읽는다.');
};

// 매개변수를 사용하지 않을 경우, 관례로 밑줄(_)을 사용할 때도 있다.
let readABook = _ =&amp;gt; {
  console.log('책을 읽는다.');
};


//    1개
let readABook = (bookName) =&amp;gt; {
  console.log('&quot;' + bookName + '&quot;을 읽는다.');
};
readABook('오만과 편견')

//    매개변수 1개면 소괄호 생략 가능
let readABook = bookName =&amp;gt; {
  console.log('&quot;' + bookName + '&quot;을 읽는다.');
};
readABook('오만과 편견')


//    2개 이상인 경우, 소괄호는 생략하지 않는다.
let readABook = (bookName, day) =&amp;gt; {
  console.log(day+'일에 걸쳐서 '+'&quot;' + bookName + '&quot;을 읽는다.');
};
readABook('오만과 편견', 21)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 암묵적 반환&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 함수에 한 줄의 코드만 작성&lt;br /&gt;2. 해당 코드 줄을 중괄호({})로 묶지 않는다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 두 가지 조건이 충족될 경우, 자동으로 반환문을 생성한다.&lt;/li&gt;
&lt;li&gt;암묵적으로 반환 기능을 사용하면 세 줄의 코드를 단 한 줄로 줄일 수 있다!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;  화살표 함수에서 객체를 반환할 때 주의할 점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아래의 코드처럼 작성하면 오류가 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let getStyles = _ =&amp;gt; {
  'display': 'flex',
  'row-gap': 24

&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Uncaught SyntaxError: Unexpected token ':'&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;b&gt;이유&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화살표 함수에서 중괄호 {}는&lt;b&gt; &quot;함수의 코드 블록&quot;&lt;/b&gt;으로 해석된다.&lt;/li&gt;
&lt;li&gt;자바스크립트는 { 'display': 'flex' }를 &lt;b&gt;객체&lt;/b&gt;가 아니라 &lt;b&gt;일반 코드 블록&lt;/b&gt;으로 보고 처리&lt;/li&gt;
&lt;li&gt;결과적으로 &lt;b&gt;객체 리터럴 문법을 잘못된 코드로 인식&lt;/b&gt;해서 오류가 발생한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 해결 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let getStyles = _ =&amp;gt; ({
  'display': 'flex',
  'row-gap': 24
})
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소괄호 ()로 감싸면 중괄호 {}가 &lt;b&gt;&quot;객체 리터럴&quot;&lt;/b&gt;로 인식됨&lt;/li&gt;
&lt;li&gt;따라서 함수는 해당 객체를 &lt;b&gt;암묵적으로 반환&lt;/b&gt;하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;➕ 왜 함수 표현식에 const를 사용할까?&lt;/b&gt;&lt;/h2&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// 잘못된 예시
let thisIsAFunction = () =&amp;gt; {
  console.log('이것은 함수입니다.')
}

thisIsAFunction = {}      // ❌ 함수가 다른 타입으로 재할당됨
thisIsAFunction()         // ❌ TypeError: thisIsAFunction is not a function
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 정리 포인트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. const는 재할당을 막아준다&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;const로 선언하면 &lt;b&gt;변수 자체를 다른 값으로 바꾸는 것&lt;/b&gt;이 불가능함.&lt;/li&gt;
&lt;li&gt;즉, 실수로 함수가 다른 타입(예: 객체, 숫자)으로 &lt;b&gt;덮어쓰게 되는 것을 방지&lt;/b&gt;할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;const thisIsAFunction = () =&amp;gt; {
  console.log('함수입니다.')
}

thisIsAFunction = {} // ❌ TypeError: Assignment to constant variable
&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;b&gt;2. 화살표 함수는 값(데이터)이기 때문에 변수에 할당됨&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화살표 함수는 함수 선언이 아니라 &lt;b&gt;함수 표현식&lt;/b&gt;이다.&lt;/li&gt;
&lt;li&gt;자바스크립트에서 함수 표현식은 &lt;b&gt;하나의 값(value)&lt;/b&gt;이므로 변수에 할당되는 게 기본.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;함수는 변하지 않아야 하는 값&lt;/b&gt;이기 때문에, &lt;b&gt;const&lt;/b&gt;를 쓰는 것이 일반적인 패턴.&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 함수의 의도와 역할을 명확하게 표현&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 변수는 &lt;b&gt;&amp;ldquo;변하지 않는 함수&amp;rdquo;&lt;/b&gt;임을 선언 시점부터 드러낼 수 있음.&lt;/li&gt;
&lt;li&gt;팀원 또는 미래의 나에게 &lt;b&gt;&amp;ldquo;이 변수는 바뀌면 안 돼&amp;rdquo;&lt;/b&gt;라는 메시지를 줌.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 정리 요약&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  화살표 함수는 const로 선언하는 것이 기본 패턴이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실수로 다른 값으로 재할당하는 것 방지&lt;/li&gt;
&lt;li&gt;이 함수가 &quot;변하지 않아야 할 값&quot;임을 명확하게 보여줌&lt;/li&gt;
&lt;li&gt;따라서 함수 표현식에는 let보다 const가 더 안전하고 권장된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오늘의 느낀점 !&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 알고 있던 언어들과 유사한 부분도 있어서 해당 부분들은 아마도(?) 이해하기 수월했던 것 같다...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;b&gt;호이스팅&lt;/b&gt;이라는 개념이 이해되는 듯하면서도 생소했다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 변수의 호이스팅에 대해서 배웠을 때, 왜 var는 호이스팅이 되고 let과 const는 호이스팅이 안된다고 하는지 정확히 이해하지는 못했다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 AI와 검색의 도움을 받아서 자바스크립트에서 변수의 호이스팅에 대해 좀 더 공부해 봐야 할 것 같다.&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;</description>
      <category>javascript</category>
      <category>return</category>
      <category>멋쟁이사자처럼후기</category>
      <category>반환</category>
      <category>자바스크립트</category>
      <category>함수</category>
      <category>함수 선언</category>
      <category>함수 표현식</category>
      <category>호이스팅</category>
      <category>화살표 함수 표현식</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/25</guid>
      <comments>https://laylab.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 11 Jun 2025 23:31:53 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Learn JavaScript | Day 2</title>
      <link>https://laylab.tistory.com/24</link>
      <description>&lt;h2 data-end=&quot;192&quot; data-start=&quot;151&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트 기초 정리 - 주석, 세미콜론, 데이터 타입, 변수, 함수&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;276&quot; data-start=&quot;194&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 JavaScript에서 꼭 알아야 할 개념들을 배웠다.&lt;/p&gt;
&lt;p data-end=&quot;276&quot; data-start=&quot;194&quot; data-ke-size=&quot;size16&quot;&gt;처음 배우는 JavaScript인 만큼 수업에 집중해서 기초부터 차근히 다져가자!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;302&quot; data-start=&quot;283&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;주석 (Comments)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;314&quot; data-start=&quot;304&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 한 줄 주석&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1749568477444&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 한 줄 주석이다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;352&quot; data-start=&quot;341&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 여러 줄 주석&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749568509710&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 여러 줄 주석입니다. 
여러 줄에 걸쳐 설명할 수 있다. */&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;447&quot; data-start=&quot;404&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;447&quot; data-start=&quot;406&quot; data-ke-size=&quot;size16&quot;&gt;주석은 JavaScript 파일 내부에서 코드 설명을 남길 때 사용&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;476&quot; data-start=&quot;454&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;; 세미콜론 (Semicolons)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;490&quot; data-start=&quot;478&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 꼭 써야 할까?  &lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;606&quot; data-start=&quot;492&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript는 줄 끝마다 세미콜론(;)을 붙이는 언어지만, &lt;b&gt;생략해도 동작&lt;/b&gt;하는 경우가 많다고 한다.&lt;br /&gt;이는 &lt;b&gt;ASI(Automatic Semicolon Insertion)&lt;/b&gt; 기능 덕분이다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749568602985&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(2025); 
console.log(6) 
console.log(10);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;761&quot; data-start=&quot;670&quot; data-ke-size=&quot;size16&quot;&gt;위처럼 세미콜론을 생략해도 대부분의 경우 실행된다.&lt;br /&gt;하지만 코드 압축 시 오류가 발생할 수 있기 때문에, &lt;b&gt;명시적으로 붙이는 것을 권장한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;761&quot; data-start=&quot;670&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;761&quot; data-start=&quot;670&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;세미콜론을 사용하려면...&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세미콜론을 써야할 때, 쓰면 안될 때를 구별해야한다.&lt;/li&gt;
&lt;li&gt;그래서 &amp;ldquo;세미콜론을 항상 쓰자&amp;rdquo;라면 신경 써야할게 많다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;세미콜론을 사용하지 않으려면...&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;절대 [, {, &amp;lsquo;로 줄을 시작하지 않는 것!&lt;/li&gt;
&lt;li&gt;쓰게 된다면 줄 앞에 세미콜론 붙여주면 됨.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-end=&quot;777&quot; data-start=&quot;763&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;팀 프로젝트에서는?&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;869&quot; data-start=&quot;779&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;811&quot; data-start=&quot;779&quot;&gt;팀마다 세미콜론 사용 여부를 통일하는 것이 중요하다.&lt;/li&gt;
&lt;li data-end=&quot;869&quot; data-start=&quot;812&quot;&gt;&lt;b&gt;Prettier, ESLint&lt;/b&gt; 같은 린터 도구를 사용해 자동으로 맞춰주는 것이 편하다!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;909&quot; data-start=&quot;876&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 데이터 타입 (Primitive Types)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;944&quot; data-start=&quot;911&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript에는 &lt;b&gt;총 7가지의 기본 타입&lt;/b&gt;이 존재한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1069&quot; data-start=&quot;946&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;963&quot; data-start=&quot;946&quot;&gt;String (문자열)&lt;/li&gt;
&lt;li data-end=&quot;980&quot; data-start=&quot;964&quot;&gt;Number (숫자)&lt;/li&gt;
&lt;li data-end=&quot;999&quot; data-start=&quot;981&quot;&gt;Boolean (불리언)&lt;/li&gt;
&lt;li data-end=&quot;1013&quot; data-start=&quot;1000&quot;&gt;Null (널)&lt;/li&gt;
&lt;li data-end=&quot;1036&quot; data-start=&quot;1014&quot;&gt;Undefined (언디파인드)&lt;/li&gt;
&lt;li data-end=&quot;1053&quot; data-start=&quot;1037&quot;&gt;Symbol (심볼)&lt;/li&gt;
&lt;li data-end=&quot;1069&quot; data-start=&quot;1054&quot;&gt;BigInt (빅인트)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1090&quot; data-start=&quot;1071&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 문자열 (String)&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749568880145&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(&quot;It's my birthday!&quot;);
console.log('나의 기록은 12\'26\&quot;입니다.');
console.log('기록: ' + &quot;12'26\&quot;&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1258&quot; data-start=&quot;1206&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1230&quot; data-start=&quot;1206&quot;&gt;문자열은 ' 또는 &quot;로 감싼다.&lt;/li&gt;
&lt;li data-end=&quot;1258&quot; data-start=&quot;1231&quot;&gt;문자열은 + 연산자로 연결할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1278&quot; data-start=&quot;1260&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 숫자 (Number)&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749568928690&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(123 + 456); 
console.log(1_000_000_000); // 자릿수 구분자 사용 가능​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1451&quot; data-start=&quot;1360&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1374&quot; data-start=&quot;1360&quot;&gt;정수, 소수 모두 포함&lt;/li&gt;
&lt;li data-end=&quot;1413&quot; data-start=&quot;1375&quot;&gt;산술 연산: +, -, *, /, % 사용 가능&lt;/li&gt;
&lt;li data-end=&quot;1451&quot; data-start=&quot;1414&quot;&gt;안전 범위는 Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER 참고&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1473&quot; data-start=&quot;1453&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 불리언 (Boolean)&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1749569013668&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(true); 
console.log(false);&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1552&quot; data-start=&quot;1525&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1552&quot; data-start=&quot;1525&quot;&gt;true 또는 false 두 값만 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1565&quot; data-start=&quot;1554&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Null&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1749569033944&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(null); // 의도적으로 '없음'을 나타냄&lt;/code&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1632&quot; data-start=&quot;1616&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1632&quot; data-start=&quot;1616&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. Undefined&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569063059&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let result; 
console.log(result); // 값이 정의되지 않음&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1705&quot; data-start=&quot;1692&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1705&quot; data-start=&quot;1692&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. Symbol&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569084727&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(Symbol('id'));&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1764&quot; data-start=&quot;1745&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1764&quot; data-start=&quot;1745&quot;&gt;고유한 식별자가 필요할 때 사용&lt;/li&gt;
&lt;li data-end=&quot;1764&quot; data-start=&quot;1745&quot;&gt;객체에 속성을 추가할 때 고유한 키를 부여하여 다른 코드와 충돌하지 않도록 할 때 많이 쓰임&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1779&quot; data-start=&quot;1766&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. BigInt&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569142931&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(BigInt(Number.MAX_SAFE_INTEGER + 10))
console.log(10000000000n); // n을 붙이면 BigInt로 인식&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매우 큰 정수를 다룰 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1895&quot; data-start=&quot;1875&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;변수 (Variables)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;1905&quot; data-start=&quot;1897&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 변수란?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 &lt;b&gt;기억&lt;/b&gt;하고 &lt;b&gt;재사용&lt;/b&gt;하기 위한 이름 있는 저장 공간&lt;/li&gt;
&lt;li&gt;의미 있는 변수명을 사용하면 코드의 &lt;b&gt;가독성과 이해도&lt;/b&gt;가 높아짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569193796&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let count = 10; 
const MAX_VALUE = 100;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 변수 선언 키워드&lt;/b&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 88px;&quot; border=&quot;1&quot; data-end=&quot;2169&quot; data-start=&quot;2005&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;키워드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;재할당&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot;&gt;권장 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2099&quot; data-start=&quot;2070&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2079&quot; data-start=&quot;2070&quot;&gt;let&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2087&quot; data-start=&quot;2079&quot; data-col-size=&quot;sm&quot;&gt;일반 변수&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2094&quot; data-start=&quot;2087&quot; data-col-size=&quot;sm&quot;&gt;✅ 가능&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2099&quot; data-start=&quot;2094&quot; data-col-size=&quot;sm&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2134&quot; data-start=&quot;2100&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2109&quot; data-start=&quot;2100&quot;&gt;const&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2122&quot; data-start=&quot;2109&quot; data-col-size=&quot;sm&quot;&gt;상수 (변경 불가)&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2129&quot; data-start=&quot;2122&quot; data-col-size=&quot;sm&quot;&gt;❌ 불가&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2134&quot; data-start=&quot;2129&quot; data-col-size=&quot;sm&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;2169&quot; data-start=&quot;2135&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2144&quot; data-start=&quot;2135&quot;&gt;var&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2152&quot; data-start=&quot;2144&quot; data-col-size=&quot;sm&quot;&gt;예전 방식&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2159&quot; data-start=&quot;2152&quot; data-col-size=&quot;sm&quot;&gt;✅ 가능&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;2169&quot; data-start=&quot;2159&quot; data-col-size=&quot;sm&quot;&gt;❌ (지양)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;2183&quot; data-start=&quot;2171&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 변수 이름 규칙&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2276&quot; data-start=&quot;2185&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2197&quot; data-start=&quot;2185&quot;&gt;숫자로 시작 ❌&lt;/li&gt;
&lt;li data-end=&quot;2221&quot; data-start=&quot;2198&quot;&gt;특수문자 중 _, $만 허용&lt;/li&gt;
&lt;li data-end=&quot;2235&quot; data-start=&quot;2222&quot;&gt;예약어 사용 금지&lt;/li&gt;
&lt;li data-end=&quot;2276&quot; data-start=&quot;2236&quot;&gt;&lt;b&gt;카멜 표기법&lt;/b&gt; 사용 권장 (예: myVariableName)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569251608&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let totalApples = 31;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| var vs let&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. var myName&lt;/b&gt;&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;{
  var myName;
  console.log(1, myName);   // ✅ undefined (호이스팅)
  myName = 'apple';
  console.log(2, myName);   // ✅ apple
}

myName = 'pineapple';       // ✅ 가능: var은 블록 밖에서도 접근됨
console.log(3, myName);     // ✅ pineapple

&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;var는 블록 {}을 무시하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;해당 함수 전체나 전역 범위로 끌어올려짐&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;그래서 블록 외부에서도 myName을 계속 사용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. let myName2&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot;&gt;&lt;code&gt;{
  let myName2;
  console.log(1, myName2);   // ✅ undefined
  myName2 = 'apple';
  console.log(2, myName2);   // ✅ apple
}

myName2 = 'pineapple';       // ❌ ReferenceError
console.log(3, myName2);
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;let은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;블록 스코프&lt;/b&gt;라서 {} 블록 바깥에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;존재하지 않는 변수&lt;/b&gt;로 취급&lt;/li&gt;
&lt;li&gt;따라서 myName2 = 'pineapple' 부분에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;ReferenceError&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;발생&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;요약 정리&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.7209%; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 28.9535%; text-align: center;&quot;&gt;&amp;nbsp;var&lt;/td&gt;
&lt;td style=&quot;width: 42.2093%; text-align: center;&quot;&gt;&amp;nbsp;let&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.7209%; text-align: center;&quot;&gt;선언 위치&lt;/td&gt;
&lt;td style=&quot;width: 28.9535%; text-align: center;&quot;&gt;함수 스코프&lt;/td&gt;
&lt;td style=&quot;width: 42.2093%; text-align: center;&quot;&gt;블록 스코프&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.7209%; text-align: center;&quot;&gt;블록 바깥에서 접근&lt;/td&gt;
&lt;td style=&quot;width: 28.9535%; text-align: center;&quot;&gt;✅ 가능&lt;/td&gt;
&lt;td style=&quot;width: 42.2093%; text-align: center;&quot;&gt;❌ ReferenceError&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.7209%; text-align: center;&quot;&gt;호이스팅 시 초기화&lt;/td&gt;
&lt;td style=&quot;width: 28.9535%; text-align: center;&quot;&gt;undefined&lt;/td&gt;
&lt;td style=&quot;width: 42.2093%; text-align: center;&quot;&gt;TDZ(선언 전 접근 불가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.7209%; text-align: center;&quot;&gt;실무 사용&lt;/td&gt;
&lt;td style=&quot;width: 28.9535%; text-align: center;&quot;&gt;❌ 지양&lt;/td&gt;
&lt;td style=&quot;width: 42.2093%; text-align: center;&quot;&gt;✅ 표준 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| const vs let&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;const - 상수&lt;/b&gt;&lt;/h4&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;let - &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;변수&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;: 시간의 흐름에 따라 값이 변경됨&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2336&quot; data-start=&quot;2316&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;함수 (Functions)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;2346&quot; data-start=&quot;2338&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수란?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2389&quot; data-start=&quot;2348&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2371&quot; data-start=&quot;2348&quot;&gt;특정 작업을 실행하는 &lt;b&gt;코드 블록&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2389&quot; data-start=&quot;2372&quot;&gt;입력 &amp;rarr; 처리 &amp;rarr; 출력 구조&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749569308872&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function sayHello(name) { 
	return 'Hello, ' + name; 
} 

console.log(sayHello('Alice')); // Hello, Alice​&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수는 function 키워드로 선언&lt;/li&gt;
&lt;li&gt;()를 붙이면 함수 실행&lt;/li&gt;
&lt;li&gt;매개변수(Parameter)는 함수 내부에서 사용할 변수&lt;/li&gt;
&lt;li&gt;인수(Argument)는 함수 호출 시 전달하는 값&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 함수 이름 작성 규칙&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;숫자로 시작 ❌&lt;/li&gt;
&lt;li&gt;공백 ❌&lt;/li&gt;
&lt;li&gt;의미 있는 이름 사용&lt;/li&gt;
&lt;li&gt;카멜케이스 사용 (drawWater, sayHello 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 매개변수 vs 인수&lt;/b&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749570269271&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function greet(name) { 
	// name = 매개변수 
    console.log(&quot;Hello &quot; + name); 
} 

greet(&quot;Bob&quot;); // &quot;Bob&quot; = 인수&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;2951&quot; data-start=&quot;2935&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 예시: 일기 작성 함수&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749570401193&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function writeDiary(year, month, day) { 
	console.log(`${year}년 ${month}월 ${day}일에 일기를 씁니다.`); 
    } 
    
writeDiary(2025, 6, 10);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 2025년 6월 10일에 일기를 씁니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오늘의 느낀 점 !&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 배우는 JavaScript 였지만, 다른 언어들을 해본 적 있어서 그런지 다행히도 이해가 어렵지는 않았다.&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;&quot;포기하지 않고 나아가다보면 마스터하겠지~!!&quot; 라는 마인드로 열심히 배워나가기!&lt;/p&gt;</description>
      <category>멋쟁이사자처럼/JavaScript</category>
      <category>javascript</category>
      <category>기본 데이터 타입</category>
      <category>멋쟁이사자처럼후기</category>
      <category>변수</category>
      <category>세미콜론</category>
      <category>자바스크립트</category>
      <category>주석</category>
      <category>함수</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/24</guid>
      <comments>https://laylab.tistory.com/24#entry24comment</comments>
      <pubDate>Wed, 11 Jun 2025 00:48:42 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Learn JavaScript | Day 1</title>
      <link>https://laylab.tistory.com/23</link>
      <description>&lt;h2 data-end=&quot;124&quot; data-start=&quot;105&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로그래밍과 자바스크립트의 이해&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;드디어 JavaScript 배우게 된 첫 번째 날이다.&lt;/p&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;UI 프로젝트를 끝낸 뒤 처음 듣는 수업이었는데.. 집중력이 많이 떨어짐을 느꼈다ㅠㅠ&lt;/p&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;그렇지만 열심히 정신을 차리고 수업을 들었다..!&lt;/p&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;198&quot; data-start=&quot;126&quot; data-ke-size=&quot;size16&quot;&gt;오늘은 프로그래밍을 처음 배우는 입장에서 꼭 알아야 할 개념들과, JavaScript가 어떻게 웹의 핵심 언어가 되었는지를 배웠다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;216&quot; data-start=&quot;205&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로그래밍이란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;218&quot; data-ke-size=&quot;size16&quot;&gt;: 컴퓨터에게 일을 시키기 위한 명령어를 작성하는 과정&lt;/p&gt;
&lt;p data-end=&quot;306&quot; data-start=&quot;218&quot; data-ke-size=&quot;size16&quot;&gt;이때 사람과 컴퓨터 간 소통을 위해 사용하는 도구가 바로 &lt;b&gt;프로그래밍 언어&lt;/b&gt;이다.&lt;/p&gt;
&lt;h4 data-end=&quot;330&quot; data-start=&quot;308&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;컴퓨터는 자연어를 이해하지 못한다!&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;412&quot; data-start=&quot;332&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;365&quot; data-start=&quot;332&quot;&gt;컴퓨터는 한국어, 영어 같은 자연어를 이해하지 못한다.&lt;/li&gt;
&lt;li data-end=&quot;412&quot; data-start=&quot;366&quot;&gt;대신, &lt;b&gt;정의된 문법&lt;/b&gt;을 가진 언어(프로그래밍 언어)로만 명령을 인식한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;434&quot; data-start=&quot;419&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로그래밍 언어의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;460&quot; data-start=&quot;436&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 머신 코드 (Machine Code)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;552&quot; data-start=&quot;462&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;487&quot; data-start=&quot;462&quot;&gt;컴퓨터가 직접 이해할 수 있는 유일한 언어&lt;/li&gt;
&lt;li data-end=&quot;523&quot; data-start=&quot;488&quot;&gt;0과 1로 이루어져 있으며, CPU마다 해석 방식이 다릅니다&lt;/li&gt;
&lt;li data-end=&quot;552&quot; data-start=&quot;524&quot;&gt;사람이 직접 작성하거나 해석하기 매우 어렵습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;585&quot; data-start=&quot;554&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 저수준 언어 (Low-Level Language)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;636&quot; data-start=&quot;587&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;619&quot; data-start=&quot;587&quot;&gt;머신 코드에 가까운 언어로, 하드웨어 제어에 적합합니다&lt;/li&gt;
&lt;li data-end=&quot;636&quot; data-start=&quot;620&quot;&gt;대표 예시: 어셈블리 언어&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749567431129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MOV AL, 61 ; 레지스터 AL에 61 넣기&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;711&quot; data-start=&quot;679&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 고수준 언어 (High-Level Language)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;790&quot; data-start=&quot;713&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;730&quot; data-start=&quot;713&quot;&gt;사람이 읽고 쓰기 쉬운 언어&lt;/li&gt;
&lt;li data-end=&quot;754&quot; data-start=&quot;731&quot;&gt;하드웨어보다는 생산성과 유지보수에 유리&lt;/li&gt;
&lt;li data-end=&quot;754&quot; data-start=&quot;731&quot;&gt;예시: JavaScript, Python, Java, C 등&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;813&quot; data-start=&quot;797&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;컴파일러 vs 인터프리터&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-end=&quot;1042&quot; data-start=&quot;815&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 22px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 22px;&quot;&gt;컴파일러&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 22px;&quot;&gt;인터프리터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;910&quot; data-start=&quot;872&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;880&quot; data-start=&quot;872&quot;&gt;실행 방식&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;896&quot; data-start=&quot;880&quot; data-col-size=&quot;sm&quot;&gt;전체 코드 번역 후 실행&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;910&quot; data-start=&quot;896&quot; data-col-size=&quot;sm&quot;&gt;한 줄씩 읽어 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;930&quot; data-start=&quot;911&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;919&quot; data-start=&quot;911&quot;&gt;실행 속도&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;924&quot; data-start=&quot;919&quot; data-col-size=&quot;sm&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;930&quot; data-start=&quot;924&quot; data-col-size=&quot;sm&quot;&gt;느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;966&quot; data-start=&quot;931&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;939&quot; data-start=&quot;931&quot;&gt;에러 처리&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;952&quot; data-start=&quot;939&quot; data-col-size=&quot;sm&quot;&gt;번역 후 일괄 처리&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;966&quot; data-start=&quot;952&quot; data-col-size=&quot;sm&quot;&gt;실행 중 바로 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1001&quot; data-start=&quot;967&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;975&quot; data-start=&quot;967&quot;&gt;출력 결과&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;986&quot; data-start=&quot;975&quot; data-col-size=&quot;sm&quot;&gt;실행 파일 생성&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-end=&quot;1001&quot; data-start=&quot;986&quot; data-col-size=&quot;sm&quot;&gt;별도 실행 파일 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1042&quot; data-start=&quot;1002&quot;&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1010&quot; data-start=&quot;1002&quot;&gt;예시 언어&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1020&quot; data-start=&quot;1010&quot;&gt;C, Java&lt;/td&gt;
&lt;td style=&quot;height: 22px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1042&quot; data-start=&quot;1020&quot;&gt;Python, JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote data-end=&quot;1075&quot; data-start=&quot;1044&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1075&quot; data-start=&quot;1046&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript는 대표적인 인터프리터 언어&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;  인터미디에이트 코드 (중간 코드)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴파일러 + 인터프리터의 중간 단계&lt;/li&gt;
&lt;li&gt;일부만 번역한 문서&lt;/li&gt;
&lt;li&gt;예: Java &amp;rarr; 바이트코드 &amp;rarr; JIT &amp;rarr; 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;➕ 트랜스파일러 (Transpiler)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 고수준 언어를 다른 고수준 언어로 변환하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1266&quot; data-start=&quot;1251&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1364&quot; data-start=&quot;1268&quot; data-ke-size=&quot;size16&quot;&gt;: 웹 브라우저에서 동작하는 대표적인 고수준 언어&lt;/p&gt;
&lt;p data-end=&quot;1364&quot; data-start=&quot;1268&quot; data-ke-size=&quot;size16&quot;&gt;현재는 프론트엔드뿐 아니라 서버(Node.js), 데스크탑, 모바일 등으로 영역이 확장되었다.&lt;/p&gt;
&lt;h3 data-end=&quot;1372&quot; data-start=&quot;1366&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1439&quot; data-start=&quot;1374&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1387&quot; data-start=&quot;1374&quot;&gt;인터프리터 기반 언어&lt;/li&gt;
&lt;li data-end=&quot;1401&quot; data-start=&quot;1388&quot;&gt;동적 웹 제작에 필수&lt;/li&gt;
&lt;li data-end=&quot;1439&quot; data-start=&quot;1402&quot;&gt;사용자와의 상호작용, HTML/CSS 조작, 애니메이션 등 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1468&quot; data-start=&quot;1446&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript의 역사와 생태계&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;1482&quot; data-start=&quot;1470&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 탄생 배경&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1587&quot; data-start=&quot;1484&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1541&quot; data-start=&quot;1484&quot;&gt;Netscape가 동적인 웹을 만들기 위해 JavaScript의 초기 형태인 &lt;b&gt;Mocha&lt;/b&gt; 개발&lt;/li&gt;
&lt;li data-end=&quot;1587&quot; data-start=&quot;1542&quot;&gt;이후 LiveScript를 거쳐 &lt;b&gt;JavaScript&lt;/b&gt;라는 이름으로 재탄생&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1603&quot; data-start=&quot;1589&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 브라우저 전쟁&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1697&quot; data-start=&quot;1605&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1652&quot; data-start=&quot;1605&quot;&gt;Netscape vs Microsoft (JavaScript vs JScript)&lt;/li&gt;
&lt;li data-end=&quot;1697&quot; data-start=&quot;1653&quot;&gt;호환성 문제로 인해 ECMA에서 &lt;b&gt;표준화&lt;/b&gt; &amp;rarr; &lt;b&gt;ECMAScript&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1714&quot; data-start=&quot;1699&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. AJAX의 등장&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1772&quot; data-start=&quot;1716&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1745&quot; data-start=&quot;1716&quot;&gt;페이지 전체를 새로고침하지 않고 서버와 통신 가능&lt;/li&gt;
&lt;li data-end=&quot;1772&quot; data-start=&quot;1746&quot;&gt;Gmail, SPA 등의 기반 기술로 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1787&quot; data-start=&quot;1774&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 현재와 미래&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1866&quot; data-start=&quot;1789&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1817&quot; data-start=&quot;1789&quot;&gt;&lt;b&gt;Node.js&lt;/b&gt;를 통해 서버 개발까지 가능&lt;/li&gt;
&lt;li data-end=&quot;1817&quot; data-start=&quot;1789&quot;&gt;V8 엔진, WebAssembly, 프레임워크(React 등)를 통해 지속 발전 중&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1889&quot; data-start=&quot;1873&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript 엔진&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1891&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript 코드를 실제로 실행해주는 프로그램을 &lt;b&gt;엔진&lt;/b&gt;이라고 부른다.&lt;/p&gt;
&lt;h3 data-end=&quot;1948&quot; data-start=&quot;1939&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 대표 엔진&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2037&quot; data-start=&quot;1950&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1978&quot; data-start=&quot;1950&quot;&gt;&lt;b&gt;V8&lt;/b&gt; (Chrome, Node.js 등)&lt;/li&gt;
&lt;li data-end=&quot;2007&quot; data-start=&quot;1979&quot;&gt;&lt;b&gt;SpiderMonkey&lt;/b&gt; (Firefox)&lt;/li&gt;
&lt;li data-end=&quot;2037&quot; data-start=&quot;2008&quot;&gt;&lt;b&gt;JavaScriptCore&lt;/b&gt; (Safari)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;2052&quot; data-start=&quot;2039&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| V8의 실행 과정&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;코드 입력 -&lt;/b&gt; 사용자가 작성한 JavaScript 코드를 받음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;구문 해석 (AST 생성) -&lt;/b&gt; 코드를 구조적으로 분석&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바이트코드 생성 -&lt;/b&gt; Ignition 인터프리터 실행 준비&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실행 중 분석 -&lt;/b&gt; 자주 실행되는 부분(핫 코드) 감지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JIT 컴파일 -&lt;/b&gt; TurboFan이 핫 코드를 최적화된 머신 코드로 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최적화 반복 -&lt;/b&gt; 실행 중 성능 개선을 지속적으로 수행&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| V8의 주요 특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;빠른 실행 속도 -&lt;/b&gt; 바이트코드와 JIT 컴파일로 성능 극대화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실행 중 최적화 -&lt;/b&gt; 코드를 분석하며 성능을 점점 높임&lt;/li&gt;
&lt;li&gt;&lt;b&gt;플랫폼 독립성 -&lt;/b&gt; 다양한 운영체제와 환경에서 동일하게 실행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Node.js 호환 -&lt;/b&gt; 서버에서도 JavaScript 실행 가능하게 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2149&quot; data-start=&quot;2130&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript 실행 환경&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2221&quot; data-start=&quot;2151&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2194&quot; data-start=&quot;2151&quot;&gt;&lt;b&gt;웹 브라우저&lt;/b&gt; (Chrome, Safari 등): 클라이언트 측 실행&lt;/li&gt;
&lt;li data-end=&quot;2221&quot; data-start=&quot;2195&quot;&gt;&lt;b&gt;Node.js 런타임&lt;/b&gt;: 서버 측 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2247&quot; data-start=&quot;2228&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JavaScript 사용 방법&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;2263&quot; data-start=&quot;2249&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 스크립트 작성 방식&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749567822317&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 내부 스크립트 --&amp;gt; 
&amp;lt;script&amp;gt; console.log(2025); &amp;lt;/script&amp;gt; 

&amp;lt;!-- 외부 스크립트 --&amp;gt; 
&amp;lt;script src=&quot;./js/main.js&quot;&amp;gt;&amp;lt;/script&amp;gt; 

&amp;lt;!-- 모듈 사용 --&amp;gt; 
&amp;lt;script type=&quot;module&quot; src=&quot;./module.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;2465&quot; data-start=&quot;2456&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 경로 설정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2523&quot; data-start=&quot;2467&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2490&quot; data-start=&quot;2467&quot;&gt;&lt;b&gt;상대 경로&lt;/b&gt;: ./js/main.js&lt;/li&gt;
&lt;li data-end=&quot;2523&quot; data-start=&quot;2491&quot;&gt;&lt;b&gt;절대 경로&lt;/b&gt;: /js/main.js 또는 CDN 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;2548&quot; data-start=&quot;2530&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;콘솔(Console) 사용법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2577&quot; data-start=&quot;2550&quot; data-ke-size=&quot;size16&quot;&gt;: 개발 중 실행 결과나 오류를 확인하는 도구&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2652&quot; data-start=&quot;2579&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2623&quot; data-start=&quot;2579&quot;&gt;브라우저에서 F12 또는 Ctrl + Shift + I로 열 수 있음&lt;/li&gt;
&lt;li data-end=&quot;2652&quot; data-start=&quot;2624&quot;&gt;console.log()를 사용해 로그 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1749567923389&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log('콘솔 출력 예시');&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;2704&quot; data-start=&quot;2690&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 자주 발생하는 문제&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2813&quot; data-start=&quot;2706&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;net::ERR_FILE_NOT_FOUND:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 경로나 파일명이 잘못되었을 때 발생&lt;/li&gt;
&lt;li&gt;HTML 파일의&amp;nbsp;&amp;lt;script src=&quot;...&quot;&amp;gt;&amp;nbsp;경로를 다시 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드 수정 후 변화가 안 보임:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JS 파일을 저장하지 않았거나, 브라우저 새로고침을 하지 않은 경우&lt;/li&gt;
&lt;li&gt;반드시&amp;nbsp;&lt;b&gt;저장 후 새로고침&lt;/b&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;캐시 문제:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 캐시가 켜져 있으면 코드 수정 사항이 반영되지 않을 수 있음&lt;/li&gt;
&lt;li&gt;개발 중에는 캐시 비활성화 권장&lt;/li&gt;
&lt;li&gt;(DevTools의 &quot;Disable cache&quot; 옵션 활용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;1116&quot; data-start=&quot;1082&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;+ 빌드(Build)와 보일러플레이트(Boilerplate)&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1211&quot; data-start=&quot;1118&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1173&quot; data-start=&quot;1118&quot;&gt;&lt;b&gt;빌드&lt;/b&gt;: 코드를 실행 가능한 형태로 변환하는 과정 (예: 컴파일, 링크, 패키징 등 포함)&lt;/li&gt;
&lt;li data-end=&quot;1211&quot; data-start=&quot;1174&quot;&gt;&lt;b&gt;보일러플레이트&lt;/b&gt;: 자주 반복되는 코드의 기본 틀이나 템플릿&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;1244&quot; data-start=&quot;1213&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-end=&quot;1244&quot; data-start=&quot;1215&quot; data-ke-size=&quot;size16&quot;&gt;예: HTML 기본 구조, API 요청 기본 코드 등&lt;/p&gt;
&lt;/blockquote&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;오늘의 느낀 점 !&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글의 서두에서도 언급했다싶이 집중력이 많이 떨어졌다고 느꼈다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유로 예상컨데 프로젝트 끝난 뒤 3일의 휴식 기간동안 생활패턴이 요란해져서(?) 그런 것이 아닐까 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 배움의 시간이니만큼, 집중할 수 있도록 잠을 제대로 자고 체력을 길러야겠다!!&lt;/p&gt;</description>
      <category>멋쟁이사자처럼/JavaScript</category>
      <category>javascript</category>
      <category>javascript 실행 환경</category>
      <category>javascript 엔진</category>
      <category>javascript의 역사</category>
      <category>멋쟁이사자처럼후기</category>
      <category>자바스크립트</category>
      <category>콘솔</category>
      <category>프로그래밍</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/23</guid>
      <comments>https://laylab.tistory.com/23#entry23comment</comments>
      <pubDate>Wed, 11 Jun 2025 00:10:35 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] SVG 넣었는데 아래에 이상한 여백이 생긴다...?</title>
      <link>https://laylab.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 검색바를 만드는 실습으로 flex 연습을 했다.&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;실습을 진행하다보니 뭔가 로고의 높이가 이상해보여서&amp;nbsp;개발자도구로 확인해봤더니 아래의 사진과 같았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biepsy/btsNVcFtEYC/CzfARTKkzP1pSAatFTlUMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biepsy/btsNVcFtEYC/CzfARTKkzP1pSAatFTlUMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biepsy/btsNVcFtEYC/CzfARTKkzP1pSAatFTlUMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiepsy%2FbtsNVcFtEYC%2FCzfARTKkzP1pSAatFTlUMk%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;524&quot; height=&quot;213&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1747123762973&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;https://www.naver.com/&quot; title=&quot;홈으로 이동&quot;&amp;gt;
	&amp;lt;figure&amp;gt;
		&amp;lt;svg aria-labelledby=&quot;logo&quot; width=&quot;24&quot; height=&quot;24&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;
			&amp;lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M0 0H8L15.5 12V0H24V24H15.1875L8 12.5L8 24H0V0Z&quot; fill=&quot;url(#paint0_linear_2294_3)&quot; /&amp;gt;
            &amp;lt;defs&amp;gt;
             	&amp;lt;linearGradient id=&quot;paint0_linear_2294_3&quot; x1=&quot;4.5&quot; y1=&quot;-1.93715e-07&quot; x2=&quot;20.5&quot; y2=&quot;24&quot; gradientUnits=&quot;userSpaceOnUse&quot;&amp;gt;
                    &amp;lt;stop stop-color=&quot;#1BF008&quot; /&amp;gt;
					&amp;lt;stop offset=&quot;1&quot; stop-color=&quot;#03CCA8&quot; /&amp;gt;
				&amp;lt;/linearGradient&amp;gt;
			&amp;lt;/defs&amp;gt;
		&amp;lt;/svg&amp;gt;
		&amp;lt;figcaption id=&quot;logo&quot; class=&quot;sr-only&quot;&amp;gt;네이버&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;
&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SVG 크기는 24px인데, 실제로 여백이 생겨서 27px처럼 보인다??&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;분명 svg의 크기는 24px*24px이니까 svg과 위 코드처럼 figure로 감싸져있어도 svg의 크기대로 나올 줄 알았는데 아니었다ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;200&quot; data-start=&quot;155&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;155&quot; data-end=&quot;200&quot;&gt;  원인&lt;/h3&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;처음엔 &amp;ldquo;margin이나 padding 때문인가?&amp;rdquo; &amp;ldquo;figcaption 때문인가?&amp;rdquo; 생각했지만,&lt;br /&gt;진짜 이유는 &lt;b&gt;SVG가 인라인 요소&lt;/b&gt;이기 때문이었다 :(&lt;/p&gt;
&lt;p data-end=&quot;346&quot; data-start=&quot;257&quot; data-ke-size=&quot;size16&quot;&gt;그래서 텍스트처럼 &lt;b&gt;baseline&lt;/b&gt; 정렬을 하게 되는데, 이는&amp;nbsp;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;글자 아래쪽 선 기준으로 정렬하는 방식이라서,&lt;/span&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;SVG 아래에 불필요한 여백&lt;/b&gt;&lt;span style=&quot;color: #666666; text-align: center;&quot;&gt;이 생기게 된다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;755&quot; data-start=&quot;711&quot; data-ke-size=&quot;size16&quot;&gt;이건 svg에만 해당되는 것은 아니고, img, span, inline svg, button, a 처럼 인라인 요소인 것에는 불필요한 여백이 생길 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;755&quot; data-start=&quot;711&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;755&quot; data-start=&quot;711&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;711&quot; data-end=&quot;755&quot;&gt;  해결 방법 3가지&lt;/h3&gt;
&lt;p data-end=&quot;818&quot; data-start=&quot;778&quot; data-ke-size=&quot;size18&quot;&gt;1. display: block; &amp;larr; 가장 심플&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;941&quot; data-start=&quot;865&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;891&quot; data-start=&quot;865&quot;&gt;baseline 정렬에서 빠져나와 여백 제거&lt;/li&gt;
&lt;li&gt;내부 콘텐츠만큼만 정확히 높이 차지&lt;/li&gt;
&lt;li&gt;텍스트 요소 아니면 대부분 block이 안전함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;982&quot; data-start=&quot;948&quot; data-ke-size=&quot;size18&quot;&gt;2. display: flex;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1112&quot; data-start=&quot;1047&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1091&quot; data-start=&quot;1047&quot;&gt;figure 안의 요소를 수직 정렬하고, 내부 콘텐츠 기준으로 크기 정리&lt;/li&gt;
&lt;li data-end=&quot;1112&quot; data-start=&quot;1092&quot;&gt;다양한 UI 컴포넌트에 잘 어울림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1148&quot; data-start=&quot;1119&quot; data-ke-size=&quot;size18&quot;&gt;3. height를 직접 지정 ⚠️&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1242&quot; data-start=&quot;1189&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1214&quot; data-start=&quot;1189&quot;&gt;당장의 문제는 해결되지만, &lt;b&gt;유연성이 떨어질 수 있음&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1242&quot; data-start=&quot;1215&quot;&gt;SVG 크기 바뀌면 수동으로 계속 수정해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1767&quot; data-start=&quot;1609&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center; width: 21.7442%;&quot;&gt;&lt;b&gt; 방법 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 29.6512%;&quot;&gt;&lt;b&gt; 유연성 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 48.4884%;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1690&quot; data-start=&quot;1652&quot;&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1671&quot; data-start=&quot;1652&quot;&gt;display: block&lt;/td&gt;
&lt;td style=&quot;width: 29.6512%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1678&quot; data-start=&quot;1671&quot;&gt;높음 &amp;uarr;&lt;/td&gt;
&lt;td style=&quot;width: 48.4884%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1690&quot; data-start=&quot;1678&quot;&gt;간단하고 안전함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1733&quot; data-start=&quot;1691&quot;&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1709&quot; data-start=&quot;1691&quot;&gt;display: flex&lt;/td&gt;
&lt;td style=&quot;width: 29.6512%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1716&quot; data-start=&quot;1709&quot;&gt;높음 &amp;uarr;&lt;/td&gt;
&lt;td style=&quot;width: 48.4884%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1733&quot; data-start=&quot;1716&quot;&gt;수직 정렬까지 필요할 때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1767&quot; data-start=&quot;1734&quot;&gt;
&lt;td style=&quot;width: 21.7442%; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1748&quot; data-start=&quot;1734&quot;&gt;height 고정&lt;/td&gt;
&lt;td style=&quot;width: 29.6512%; text-align: center;&quot; data-end=&quot;1755&quot; data-start=&quot;1748&quot; data-col-size=&quot;sm&quot;&gt;낮음 &amp;darr;&lt;/td&gt;
&lt;td style=&quot;width: 48.4884%; text-align: center;&quot; data-end=&quot;1767&quot; data-start=&quot;1755&quot; data-col-size=&quot;sm&quot;&gt;유지보수 불리함&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>멋쟁이사자처럼/CSS</category>
      <category>display: block</category>
      <category>display: flex</category>
      <category>height</category>
      <category>SVG</category>
      <category>멋사</category>
      <category>멋쟁이사자처럼</category>
      <category>부트캠프</category>
      <category>인라인 요소</category>
      <category>프론트엔드</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/22</guid>
      <comments>https://laylab.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 20 May 2025 21:23:23 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Outline Algorithm과 숨겨진 제목 요소(h태그) 분석</title>
      <link>https://laylab.tistory.com/21</link>
      <description>&lt;h2 data-end=&quot;101&quot; data-start=&quot;75&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Outline Algorithm이란?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;287&quot; data-start=&quot;102&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;193&quot; data-start=&quot;102&quot;&gt;&lt;b&gt;Outline Algorithm&lt;/b&gt;은 HTML5부터 자동으로 문서의 &lt;b&gt;제목 태그(h1~h6)&lt;/b&gt;를 기반으로 &lt;b&gt;문서 구조를 계층화&lt;/b&gt;하는 방법이다.&lt;/li&gt;
&lt;li data-end=&quot;221&quot; data-start=&quot;194&quot;&gt;페이지의 구조를 명확히 하고, 검색 엔진과 사용자가 페이지를 더 쉽게 이해하고 탐색할 수 있도록 도우며, 문서의 논리적 구조를 파악하기 위해 사용된다.&lt;/li&gt;
&lt;li data-end=&quot;221&quot; data-start=&quot;194&quot;&gt;이를 통해 웹 페이지의 &lt;b&gt;가독성&lt;/b&gt;과 &lt;b&gt;접근성&lt;/b&gt;을 높이며, &lt;b&gt;SEO&lt;/b&gt;에도 긍정적인 영향을 미친다.&lt;/li&gt;
&lt;li data-end=&quot;287&quot; data-start=&quot;222&quot;&gt;&lt;b&gt;Chrome의 익스텐션인 &lt;a title=&quot;HeadingsMap&quot; href=&quot;https://chromewebstore.google.com/detail/headingsmap/flbjommegcjonpdmenkdiocclhjacmbi?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HeadingsMap&lt;/a&gt;&lt;/b&gt;을 통해 웹사이트의 문서 계층 구조를 시각적으로 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;309&quot; data-start=&quot;289&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Daum 사이트 사례 분석&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;1431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wcA4m/btsNBxP2JrI/kniXMynKKtwfJcPKxxV8K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wcA4m/btsNBxP2JrI/kniXMynKKtwfJcPKxxV8K0/img.png&quot; data-alt=&quot;daum 사이트의 문서 계층&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wcA4m/btsNBxP2JrI/kniXMynKKtwfJcPKxxV8K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwcA4m%2FbtsNBxP2JrI%2FkniXMynKKtwfJcPKxxV8K0%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;343&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;1431&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;daum 사이트의 문서 계층&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;490&quot; data-start=&quot;310&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;382&quot; data-start=&quot;310&quot;&gt;Daum 사이트를 HeadingsMap으로 분석했을 때, h2 요소로 &lt;b&gt;검색&lt;/b&gt;이라는 항목이 계층 구조에 표시되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lCU8F/btsNzZMG52Y/awxiI59kpFMbsrKApxDNnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lCU8F/btsNzZMG52Y/awxiI59kpFMbsrKApxDNnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lCU8F/btsNzZMG52Y/awxiI59kpFMbsrKApxDNnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlCU8F%2FbtsNzZMG52Y%2FawxiI59kpFMbsrKApxDNnK%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;570&quot; height=&quot;351&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;1204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;490&quot; data-start=&quot;310&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;426&quot; data-start=&quot;383&quot;&gt;그러나 실제 &lt;b&gt;웹사이트 화면에는 &quot;검색&quot;이라는 단어가 보이지 않았다.&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;490&quot; data-start=&quot;427&quot;&gt;개발자 도구(윈도우: F12 / Elements 패널)로 확인해보니, h2 태그 안에 &quot;검색&quot;이라는 텍스트가 실제로 존재했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;514&quot; data-start=&quot;492&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CSS로 스타일 제거 후 확인&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Chrome의 익스텐션인 Web Developer을 이용해보자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1573&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3VUb0/btsNyOyQfW3/up4AJHfDRgqG5qFWmeYAfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3VUb0/btsNyOyQfW3/up4AJHfDRgqG5qFWmeYAfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3VUb0/btsNyOyQfW3/up4AJHfDRgqG5qFWmeYAfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3VUb0%2FbtsNyOyQfW3%2Fup4AJHfDRgqG5qFWmeYAfk%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;683&quot; height=&quot;143&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1573&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;601&quot; data-start=&quot;515&quot;&gt;&lt;b&gt;Web Developer 익스텐션&lt;/b&gt; &amp;rarr; &lt;b&gt;CSS 탭&lt;/b&gt; &amp;rarr; &lt;b&gt;Disable All Styles&lt;/b&gt; 옵션으로 모든 CSS 스타일을 제거해보았다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2216&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BFTOz/btsNA4GmjQz/8IKtHS25Xz9QBbRZa4KUQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BFTOz/btsNA4GmjQz/8IKtHS25Xz9QBbRZa4KUQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BFTOz/btsNA4GmjQz/8IKtHS25Xz9QBbRZa4KUQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBFTOz%2FbtsNA4GmjQz%2F8IKtHS25Xz9QBbRZa4KUQK%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;599&quot; height=&quot;211&quot; data-origin-width=&quot;2216&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;651&quot; data-start=&quot;602&quot;&gt;스타일이 없어지자, 숨겨져 있던 h2 텍스트 **&quot;검색&quot;**이 화면에 표시되었다.&lt;/li&gt;
&lt;li data-end=&quot;696&quot; data-start=&quot;652&quot;&gt;이는 &lt;b&gt;CSS를 이용해 요소를 숨긴 것&lt;/b&gt;이라는 사실을 확인할 수 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-end=&quot;706&quot; data-start=&quot;698&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;정리&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;913&quot; data-start=&quot;707&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;761&quot; data-start=&quot;707&quot;&gt;&lt;b&gt;HTML 구조에는 존재&lt;/b&gt;하지만, &lt;b&gt;CSS로 시각적으로 숨겨진 요소&lt;/b&gt;가 있을 수 있다.&lt;/li&gt;
&lt;li data-end=&quot;844&quot; data-start=&quot;762&quot;&gt;&lt;b&gt;문서 계층 구조(Outline)는 HTML 구조 기준&lt;/b&gt;으로 생성되기 때문에, 실제 화면에서 보이지 않는 제목이라도 계층에 포함될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;193&quot; data-end=&quot;229&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 주의사항&lt;/b&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;913&quot; data-start=&quot;707&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;913&quot; data-start=&quot;845&quot;&gt;웹 접근성(Accessibility) 측면에서, 숨겨진 제목 요소가 사용자 경험에 어떤 영향을 미치는지 주의해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;229&quot; data-start=&quot;193&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 문제점&lt;/b&gt;: &lt;b&gt;숨겨진 제목&lt;/b&gt;이 &lt;b&gt;스크린 리더에 영향&lt;/b&gt;을 미칠 수 있음&lt;/h3&gt;
&lt;p data-end=&quot;428&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;시각적으로 숨겨진 제목 요소가 &lt;b&gt;스크린 리더&lt;/b&gt;와 같은 보조 기술에 영향을 미칠 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;428&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;스크린 리더는 HTML의 구조를 기반으로 문서를 읽어주기 때문에, 시각적으로 숨겨진 제목이라도 여전히 스크린 리더를 통해 읽힐 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;428&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;따라서&lt;b&gt;&amp;nbsp;시각 장애가 있는 사용자&lt;/b&gt;나 &lt;b&gt;키보드만 사용하는 사용자&lt;/b&gt;에게 혼란을 줄 수 있으며, 불필요한 정보나 비가시적인 콘텐츠가 접근성에 영향을 미칠 수 있다.&lt;/p&gt;
&lt;p data-end=&quot;428&quot; data-start=&quot;230&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;447&quot; data-start=&quot;430&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;| 해결 방법&lt;/b&gt;: &lt;b&gt;접근성 고려&lt;/b&gt;&lt;/h3&gt;
&lt;p 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-ke-size=&quot;size16&quot;&gt;예를 들어, aria-hidden=&quot;true&quot; 속성을 사용하여 스크린 리더에서 해당 요소를 제외하거나, 문서의 논리적 구조와 일관성을 유지할 수 있도록 신경 써서 사용자 경험을 개선할 수 있도록 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;코드를 다 짠 후에, HTML이나 CSS를 꼭 검사해서 접근성이 좋은 웹을 만들 수 있도록 하자~!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>멋쟁이사자처럼/HTML</category>
      <category>CSS</category>
      <category>headings map</category>
      <category>HTML</category>
      <category>h태그</category>
      <category>outline algorithm</category>
      <category>문서 계층 구조</category>
      <category>숨겨진 요소</category>
      <category>스크린 리더</category>
      <category>웹 접근성</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/21</guid>
      <comments>https://laylab.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 13 May 2025 02:12:02 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Git 작업할 때, 주의해야 할 것은??</title>
      <link>https://laylab.tistory.com/20</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Pull 전 필수 작업&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원격 저장소에서 코드를 가져오기 전에 반드시 로컬 변경 사항을 처리해야 한다.&lt;/li&gt;
&lt;li&gt;처리 방법 두 가지:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;git commit&lt;/b&gt;: 변경 내용을 영구 저장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;git stash&lt;/b&gt;: 임시 저장 (나중에 다시 적용 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 브랜치 이동 시 주의 사항&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다른 브랜치로 전환할 때는 작업 디렉터리를 깨끗한 상태로 유지해야 한다.&lt;/li&gt;
&lt;li&gt;변경 사항이 있는 경우:&lt;/li&gt;
&lt;li&gt;커밋으로 저장하거나&lt;/li&gt;
&lt;li&gt;스태시에 임시 보관 후 이동&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 변경 사항 무시 방법 (위험 )&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬 변경 사항을 포기하고 강제로 진행하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745561283597&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git reset --hard # 모든 변경 사항 삭제
git checkout -f # 강제 브랜치 이동&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주의: 이 방법은 되돌릴 수 없으므로 신중하게 사용해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 문제 발생 시 해결 절차&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;git status로 현재 상태 확인&lt;/li&gt;
&lt;li&gt;변경 사항 커밋 또는 스태시&lt;/li&gt;
&lt;li&gt;원하는 작업(pull 또는 브랜치 이동) 실행&lt;/li&gt;
&lt;li&gt;충돌 발생 시 파일 수동 편집 후 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;5. Tip&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업 시작 전에 항상&amp;nbsp;git pull로 최신 코드 동기화&lt;/li&gt;
&lt;li&gt;작은 단위로 자주 커밋하는 습관&lt;/li&gt;
&lt;li&gt;브랜치 이동 전 작업 상태 확인 필수!!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;공부하거나 프로젝트 하면서 git 사용할 때 조심하자~!&amp;nbsp;&lt;/blockquote&gt;</description>
      <category>멋쟁이사자처럼/Git | Github</category>
      <category>commit</category>
      <category>git</category>
      <category>Pull</category>
      <category>Stash</category>
      <category>status</category>
      <category>깃</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/20</guid>
      <comments>https://laylab.tistory.com/20#entry20comment</comments>
      <pubDate>Tue, 13 May 2025 01:36:41 +0900</pubDate>
    </item>
    <item>
      <title>[멋사 프론트엔드 부트캠프 14기] Emmet이란?</title>
      <link>https://laylab.tistory.com/19</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수업 중, 다음과 같은 코드를 settings.json에 추가했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745735295421&quot; class=&quot;1c&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;emmet.syntaxProfiles&quot;: {
    &quot;html&quot;: &quot;xhtml&quot;
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 코드를 추가하고 난 뒤,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;HTML&lt;span&gt;&amp;nbsp;파일&lt;/span&gt;&lt;/span&gt;에서 img 처럼 태그 이름만 입력하고 Enter를 누르면 자동완성된다는 것!!&amp;nbsp;&lt;/li&gt;
&lt;li&gt;신기하니까 한 번 emmet에 대해서 더 알아보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;Emmet 이란?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML 문법을 자동 완성할 때 XHTML 스타일로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;마크업&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;출력하라는 설정&lt;/li&gt;
&lt;li data-end=&quot;163&quot; data-start=&quot;116&quot;&gt;코드를 빠르게 작성할 수 있게 해주는 플러그인 또는 기능&lt;/li&gt;
&lt;li data-end=&quot;230&quot; data-start=&quot;164&quot;&gt;주로 &lt;b&gt;HTML&lt;/b&gt;이나 &lt;b&gt;CSS&lt;/b&gt; 작성할 때 자동완성(Snippet Expansion)을 엄청 빠르게 도와줌.&lt;/li&gt;
&lt;li data-end=&quot;364&quot; data-start=&quot;231&quot;&gt;예를 들어 ul&amp;gt;li*3 입력하고 Tab 키를 누르면,이런 식으로 자동으로 코드를 만들어 줌!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745735183903&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&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;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;syntaxProfiles는 뭐지?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;547&quot; data-start=&quot;400&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;486&quot; data-start=&quot;400&quot;&gt;Emmet의 syntaxProfiles 설정은 &lt;b&gt;&quot;특정 언어(문법)로 자동 완성할 때, 어떤 스타일로 완성할지&quot;&lt;/b&gt; 를 결정하는 옵션임.&lt;/li&gt;
&lt;li data-end=&quot;547&quot; data-start=&quot;487&quot;&gt;쉽게 말해서&amp;nbsp;&quot;HTML을 작성할 때 어떤 규칙으로 태그를 만들어줄까?&quot; 를 정하는 것!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;&quot;html&quot;: &quot;xhtml&quot; 이 뜻하는 것은?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;681&quot; data-start=&quot;597&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;624&quot; data-start=&quot;597&quot;&gt;&quot;html&quot;: HTML 파일에서 사용할 때&lt;/li&gt;
&lt;li data-end=&quot;681&quot; data-start=&quot;627&quot;&gt;&quot;xhtml&quot;: 자동완성 스타일을 &lt;b&gt;XHTML 규칙&lt;/b&gt;에 맞춰서 출력해라&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;743&quot; data-start=&quot;683&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;743&quot; data-start=&quot;685&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉, HTML 파일 안에서 Emmet이 태그를 만들 때, XHTML 스타일을 따르도록 설정한 것!&lt;/b&gt;&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;XHTML 스타일이란?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;870&quot; data-start=&quot;770&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;823&quot; data-start=&quot;770&quot;&gt;&lt;b&gt;Extensible HyperText Markup Language&lt;/b&gt;의 약자&lt;/li&gt;
&lt;li data-end=&quot;870&quot; data-start=&quot;824&quot;&gt;XHTML은 XML 문법을 따르기 때문에, &lt;b&gt;태그를 엄격하게&lt;/b&gt; 작성해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 64.6512%; height: 137px;&quot; border=&quot;1&quot; data-end=&quot;1029&quot; data-start=&quot;872&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot;&gt;&lt;b&gt; HTML 스타일 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot;&gt;&lt;b&gt; XHTML 스타일 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;979&quot; data-start=&quot;928&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;952&quot; data-start=&quot;928&quot;&gt;&amp;lt;img src=&quot;img.png&quot;&amp;gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;979&quot; data-start=&quot;952&quot;&gt;&amp;lt;img src=&quot;img.png&quot; /&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;1007&quot; data-start=&quot;980&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;992&quot; data-start=&quot;980&quot;&gt;&amp;lt;input&amp;gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;1007&quot; data-start=&quot;992&quot;&gt;&amp;lt;input /&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;1029&quot; data-start=&quot;1008&quot;&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;1017&quot; data-start=&quot;1008&quot;&gt;&amp;lt;br&amp;gt;&lt;/td&gt;
&lt;td style=&quot;height: 17px; text-align: left;&quot; data-end=&quot;1029&quot; data-start=&quot;1017&quot;&gt;&amp;lt;br /&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1114&quot; data-start=&quot;1031&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1060&quot; data-start=&quot;1031&quot;&gt;&lt;b&gt;닫는 슬래시(/)가 꼭 필요!!&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1114&quot; data-start=&quot;1061&quot;&gt;Emmet이 자동완성할 때, 이렇게 &lt;b&gt;XHTML처럼 빈 태그를 닫아서 만들어 줌.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;예시 비교&lt;/h2&gt;
&lt;p data-end=&quot;1398&quot; data-start=&quot;1364&quot; data-ke-size=&quot;size16&quot;&gt;만약 img 입력하고 Tab이나 Enter 누르면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1557&quot; data-start=&quot;1400&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1454&quot; data-start=&quot;1400&quot;&gt;기본 HTML 설정이라면&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745736019910&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;img src=&quot;&quot; alt=&quot;&quot;&amp;gt;&lt;/code&gt;&lt;/pre&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&gt;하지만 XHTML 스타일 설정을 해두면,&amp;nbsp; /가 붙은 XHTML 스타일로 자동 완성된다~!!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1745736042388&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;img src=&quot;&quot; alt=&quot;&quot; /&amp;gt;&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;h2 style=&quot;padding: 0.6em 0.5em 0.6em 0.5em; margin: 0.5em 0em; color: #000; border-left: 10px solid #44474e; border-bottom: 2px solid #44474e; font-weight: bold;&quot; data-ke-size=&quot;size23&quot;&gt;요약&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-start=&quot;1131&quot; data-end=&quot;1344&quot;&gt;
&lt;tbody data-start=&quot;1158&quot; data-end=&quot;1344&quot;&gt;
&lt;tr data-start=&quot;1158&quot; data-end=&quot;1191&quot;&gt;
&lt;td data-start=&quot;1158&quot; data-end=&quot;1166&quot;&gt;Emmet&lt;/td&gt;
&lt;td data-start=&quot;1166&quot; data-end=&quot;1191&quot;&gt;HTML/CSS를 빠르게 작성하는 도구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1192&quot; data-end=&quot;1237&quot;&gt;
&lt;td data-start=&quot;1192&quot; data-end=&quot;1209&quot;&gt;syntaxProfiles&lt;/td&gt;
&lt;td data-start=&quot;1209&quot; data-end=&quot;1237&quot;&gt;특정 문법에서 자동완성 스타일을 정하는 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1238&quot; data-end=&quot;1295&quot;&gt;
&lt;td data-start=&quot;1238&quot; data-end=&quot;1258&quot;&gt;&quot;html&quot;: &quot;xhtml&quot;&lt;/td&gt;
&lt;td data-start=&quot;1258&quot; data-end=&quot;1295&quot;&gt;HTML 파일에서 XHTML 스타일로 태그를 생성하겠다는 뜻&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1296&quot; data-end=&quot;1344&quot;&gt;
&lt;td data-start=&quot;1296&quot; data-end=&quot;1308&quot;&gt;XHTML 스타일&lt;/td&gt;
&lt;td data-start=&quot;1308&quot; data-end=&quot;1344&quot;&gt;빈 태그는 꼭 &amp;lt;tag /&amp;gt;처럼 닫는다 (엄격한 문법)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-start=&quot;1351&quot; data-end=&quot;1362&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>멋쟁이사자처럼/Emmet</category>
      <category>emmet</category>
      <category>HTML</category>
      <category>systaxprofiles</category>
      <category>xhtml</category>
      <author>JeonLay</author>
      <guid isPermaLink="true">https://laylab.tistory.com/19</guid>
      <comments>https://laylab.tistory.com/19#entry19comment</comments>
      <pubDate>Mon, 12 May 2025 22:45:24 +0900</pubDate>
    </item>
  </channel>
</rss>