<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>0차0차</title>
    <link>https://cheahum.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 13 Jul 2026 13:55:05 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>유니유뉘</managingEditor>
    <image>
      <title>0차0차</title>
      <url>https://tistory1.daumcdn.net/tistory/3906703/attach/22aa4e85857c4462a3acaac239c21ea6</url>
      <link>https://cheahum.tistory.com</link>
    </image>
    <item>
      <title>GSAP 애니메이션 라이브러리 20일 플랜 (챗지피가 짜준)</title>
      <link>https://cheahum.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정해진 목표가 없는 공부 방법은 끝을 못 볼 것 같아 체계적인 공부 방법을 잡아야겠다고 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 지피티 형님께 하루 1시간 20일(주5일) 플랜 요청을 했다.&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) 포트폴리오로 사용할 수 있을 정도의 실력이 될 것&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;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;  4주 플랜(주 5일 &amp;middot; 하루 1시간)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1주차 &amp;ndash; 기본기 탄탄 + 타임라인 감각&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;* Day1은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Draggable 플러그인 학습으로 Day1은 생략된 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day2&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;A: 히어로 섹션 와이프 인/아웃, 텍스트 from/to, 페이드-슬라이드.&lt;/li&gt;
&lt;li&gt;B: gsap.to/from/fromTo 스니펫 5종(좌/우/상/하, opacity, scale).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done 기준&lt;/b&gt;: 히어로 타이틀 1.2s에 깔끔히 등장, 재실행해도 부자연스러움 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day3&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;A: timeline()으로 히어로 시퀀스(타이틀&amp;rarr;서브&amp;rarr;CTA 버튼).&lt;/li&gt;
&lt;li&gt;B: 타임라인 제어 스니펫: pause/resume/reverse/seek, 라벨(&amp;lt;, &amp;gt;, &quot;label+=0.5&quot;).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 타임라인을 버튼으로 정상 제어.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day4&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;A: 섹션2 카드 3개 순차 등장 + 약간의 overlap(포지션 파라미터).&lt;/li&gt;
&lt;li&gt;B: ease 카탈로그( power, back, elastic, bounce )를 한 눈에 비교 스니펫.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 8개 이징 비교 예제 1개.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day5&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;A: 반응형 대응: 폰/태블릿/데스크톱에서 등장 거리&amp;middot;duration 다르게(matchMedia).&lt;/li&gt;
&lt;li&gt;B: matchMedia() 템플릿 스니펫.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 3 breakpoint에서 자연스러움 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2주차 &amp;ndash; ScrollTrigger 정복&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day6&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;A: 기본 스크롤 리빌(섹션 진입 시 fade-up).&lt;/li&gt;
&lt;li&gt;B: ScrollTrigger 베이직 템플릿( trigger, start, end, toggleActions ).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 세 섹션에서 같은 패턴 재사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day7&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;A: pin + scrub으로 스토리텔링 섹션 1개 완성.&lt;/li&gt;
&lt;li&gt;B: &amp;ldquo;sticky 이미지 + 텍스트 변환&amp;rdquo; 스니펫.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 0~100% 구간에서 자연스러운 스크럽.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day8&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;A: 수치 카운트업(TextPlugin 없이도 가능, 있으면 더 편함) + 프로그레스 바.&lt;/li&gt;
&lt;li&gt;B: 카운터&amp;middot;프로그레스 재사용 스니펫(옵션: duration, start/end).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 스크롤에 따라 숫자/바 동기화.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day9&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;A: 섹션 전환 애니메이션(풀스크린 페널 슬라이드).&lt;/li&gt;
&lt;li&gt;B: &amp;ldquo;다중 섹션 전환&amp;rdquo; 스니펫(각 섹션별 트리거 반복 생성 패턴).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 3개 섹션 이상 자연스러운 전환.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day10&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;A: ScrollTrigger + Timeline 결합 최종 점검(라벨, seek로 QA).&lt;/li&gt;
&lt;li&gt;B: 디버그 스니펫(markers: true 토글, ScrollTrigger.getAll() 정리).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 모든 트리거 marker off 시에도 정상 동작.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3주차 &amp;ndash; 플러그인 응용(의뢰 대응력 &amp;uarr;)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day11 (TextPlugin)&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;A: 히어로 소제목 타이핑 효과(리타입/삭제 변형 포함).&lt;/li&gt;
&lt;li&gt;B: 텍스트 타이핑 스니펫(속도, 지연, 커서 깜빡임).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 한글/영문 모두 자연스러움 확인.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day12 (MotionPathPlugin)&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;A: SVG 경로 따라 로고 아이콘 이동(스크롤 연동).&lt;/li&gt;
&lt;li&gt;B: 모션패스 스니펫(SVG path 셀렉터, autoRotate 옵션).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: path 변경해도 쉽게 교체 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day13 (Draggable 심화)&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;A: 커스텀 슬라이더(좌/우 drag, 스냅, inertia).&lt;/li&gt;
&lt;li&gt;B: Draggable 캐러셀 스니펫(스냅 포인트, bounds 템플릿).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 키보드/버튼 제어도 추가(접근성 향상).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day14 (FlipPlugin)&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;A: 그리드&amp;harr;리스트 레이아웃 전환.&lt;/li&gt;
&lt;li&gt;B: Flip 스니펫(상태 캡처&amp;rarr;애니메이션, 필터/정렬 대응).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 이미지 비율 다양한 케이스에서도 안정.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day15 (정리&amp;middot;클론 미니)&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;A: 작은 브랜드 섹션 클론(로고 reveal+숫자 카운트+pin).&lt;/li&gt;
&lt;li&gt;B: 오늘 만든 핵심 스니펫 3개 리팩토링(옵션화).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 코드 주석/옵션화 완료.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4주차 &amp;ndash; 고급 응용 + 쇼케이스 마감&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day16 (패럴랙스)&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;A: 다층 패럴랙스(배경/중경/전경), ScrollTrigger로 depth 감도 조절.&lt;/li&gt;
&lt;li&gt;B: 패럴랙스 스니펫(요소별 factor 옵션).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 모바일 성능 체크(이미지 최적화 포함).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day17 (SVG/라인 드로잉)&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;A: 로고 라인 드로잉 + fill-in.&lt;/li&gt;
&lt;li&gt;B: &amp;ldquo;라인 길이 계산 + 스크롤 연동&amp;rdquo; 스니펫.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 고해상도에서도 aliasing 최소화.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day18 (프레임워크 준비)&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;A: React/Vite 구조로 포폴 페이지 이식(또는 최소 샘플).&lt;/li&gt;
&lt;li&gt;B: @gsap/react + useGSAP 훅 등록/컨텍스트 샘플.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: CSR 전용 가드, gsap.registerPlugin() 위치 명확.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day19 (Three.js 연동 맛보기)&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;A: 카메라 포지션/타겟 GSAP 애니메이션(스크롤 구간 전환).&lt;/li&gt;
&lt;li&gt;B: &amp;ldquo;three + GSAP&amp;rdquo; 미니 스니펫(카메라&amp;middot;오브젝트 rotate/position).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 프리징 없이 자연스러운 트랜지션.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Day20 (최종 마감)&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;A: 랜딩페이지 쇼케이스 디테일링(히어로, 스토리 섹션, 통계, 패럴랙스, 라인드로잉).&lt;/li&gt;
&lt;li&gt;B: 스니펫 라이브러리 문서화(폴더 구조&amp;middot;옵션 표&amp;middot;예시 GIF).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Done&lt;/b&gt;: 포트폴리오 배포(간단 호스팅 or GitHub Pages).&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하루하루 공부하고 블로그 후기를 남기면서 생각의 변화가 어떻게 흘러갈지 너무 궁금하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또 포트폴리오 제작 및 배포를 하면서 해당 플랜에 대해 리뷰를 남겨 과연 추천할만한 플랜인지도 작성할 예정이다.&lt;/p&gt;</description>
      <category>javascript</category>
      <category>gsap</category>
      <category>GSAP 30일 플랜</category>
      <category>애니메이션 라이브러리</category>
      <category>자바스크립트</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/43</guid>
      <comments>https://cheahum.tistory.com/43#entry43comment</comments>
      <pubDate>Wed, 20 Aug 2025 22:06:28 +0900</pubDate>
    </item>
    <item>
      <title>GSAP 애니메이션 라이브러리 1</title>
      <link>https://cheahum.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;다시 초심을 잡아서 꾸준히 공부하는 기록을 남기고자 다시 돌아왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;퍼블리셔로 일하면서 GSAP 애니메이션을 자유롭게 이용해 화면을 구현한다면 더할 나위 없는 장점이 될 것이라고 느꼈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 생각보다 애니매이션을 추가로 홈페이지가 더 다채로운 화면으로 또 UI/UX 적으로 크게 긍정적인 영향을 미치는 것을 볼 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://gsap.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img src=&quot;https://gsap.com/GSAP-share-image.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;공식 홈페이지 바로가기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;먼저 GSAP는 애니메이션 라이브러리이다. 그래서 스크롤 이벤트, 도형의 움직임 등 구현할 수 있는 애니메이션이 매우 다양하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GSAP 사이트로 들어가면 script 불러오는 방식이랑 문서가 있지만 전부 영어고 제대로 해석된 자료들이 없어 시간이 오래 걸렸지만, 이젠 내 친구 챗지피한테 물어보면서 독학할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;사랑한다 지피티야❤️&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 물론 지피티에 100% 의존하면 안되고 문서 보면서 파악하고 이해 안 되는 부분이 생기면 그때 지피티랑 토론하듯이 대화해야 양질의 정보를 얻을 수 있다.&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;s&gt;스크롤 + 움직임 애니메이션을 함께 사용했을 때 아주아주 매력적이다. 특히 스크롤 애니메이션 직접 구현하다 보면 어느 부분에서 버벅임이 있거나 반응형 대응에 취약하거나 혹은 비효율적인 코드 작성으로 페이지자체가 매우 느려지곤 한다. 이는 전부 사용자에게 부정적인 경험을 겪게 하고 결과적으론 홈페이지 이탈자가 많아지는 결과를 초래한다.&lt;/s&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;Quick start &amp;gt; Installation 클릭하면 npm, CDN, yarn으로 다양하게 설치 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중에서 CDN으로 설치하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 스크립트 태그를 코드 내에 삽입&lt;/p&gt;
&lt;pre id=&quot;code_1755588154079&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js&quot;&amp;gt;&amp;lt;/script&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;그리고 Plugins 카테고리 내 다양한 체크박스들이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 체크박스들은 애니메이션 종류들이니 해당 애니메이션 사용 예정이면 체크해서 생성된 스크립트 태그를 추가해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GSAP 애니메이션 기능 중에 Draggable을 사용할 예정이라면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 애니메이션 체크 후 생성된 스크립트 태그를 삽입하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1755588359174&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/Draggable.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 하나씩 추가하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1755588417521&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/Draggable.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/SplitText.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SplitText까지 체크하면 위처럼 3개로 늘어나게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Draggable 애니메이션 구현하는데 정의되지 않은 기능이라면서 콘솔창에 나온 적이 있었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고 보니 그냥 해당 애니메이션 태그 삽입 안해서 생긴 문제다. &lt;s&gt;허허허&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트 작성할 때 기본 프레임은 체크하면 아래 콘텐츠에 나온다.&lt;/p&gt;
&lt;pre id=&quot;code_1755588973635&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
 // use a script tag or an external JS file
 document.addEventListener(&quot;DOMContentLoaded&quot;, (event) =&amp;gt; {
  gsap.registerPlugin(Draggable)
  // gsap code here!
 });

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gsap.registerPlugin(Draggable) 이라고 작성해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt;설치할 때 양식은 &lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;&lt;b&gt;gsap.registerPlugin(플러그인작성)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 여러 개의 플러그인을 사용한다면 아래처럼 작성하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1755589040499&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gsap.registerPlugin(MotionPathPlugin, ScrollToPlugin, TextPlugin);&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;위 내용은 FAQs에서 해당 내용 찾을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;Do I need to gsap.registerPlugin() each plugin?&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Typically, yes.&lt;/b&gt;&lt;/span&gt; ~~~&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;gsap.registerPlugin(MotionPathPlugin,&amp;nbsp;ScrollToPlugin,&amp;nbsp;TextPlugin);&lt;/s&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;왜 gsap.registerPlugin(플러그인) 이 코드를 삽입해야할까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 CDN 방식은 플러그인이 로드될 때 자동 등록되서 동작하지만, 순서가 잘못되면 자동 등록이 실패하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;플러그인 is not defined&quot; 라는 에러 코드가 나올 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 안전한 실행을 위해서 꼭꼭 gsap.registerPlugin(플러그인) 삽입 방식을 권장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES 모듈 방식은 그냥 무조건 해야한다. 안 하면 플러그인 작동 안되고 번들에서 빠지게 되어서 안된다. (&lt;u&gt;*트리 셰이킹 이슈&lt;/u&gt; 방지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 그냥 필수라고 생각하자 &lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;*트리 셰이킹 이슈&lt;br /&gt;&lt;br /&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;지금까지 Draggable 플러그인 세팅까지 완료했다. 이제 사용해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친절한 Docs를 살펴보자. 보자보자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;547&quot;&gt;&lt;a href=&quot;https://gsap.com/docs/v3/Plugins/Draggable/&quot; target=&quot;_blank&quot; title=&quot;Draggable 공식 문서&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcpqxr/btsPXAKDGKG/Hzlwj27C8Oc8oifFHj5gNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdcpqxr%2FbtsPXAKDGKG%2FHzlwj27C8Oc8oifFHj5gNK%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;880&quot; height=&quot;547&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;Draggable 공식문서 이미지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러그인 등록 -&amp;gt; 기능 구현으로 스크립트 작성하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#yourID는 애니메이션 먹일 아이디, type은 종류라고 생각하면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;type에는 x, y, left, top, rotation이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x,left은 좌우 / y, top은 상하 / rotation은 회전이다.&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;a href=&quot;https://gsap.com/docs/v3/Plugins/Draggable/#type&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gsap.com/docs/v3/Plugins/Draggable/#type&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤 내리다 보니 코드가 더 길어져있다.&lt;/p&gt;
&lt;pre id=&quot;code_1755591147281&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Draggable.create(&quot;#yourID&quot;, {
  type: &quot;y&quot;,
  bounds: document.getElementById(&quot;container&quot;),
  inertia: true,
  onClick: function () {
    console.log(&quot;clicked&quot;);
  },
  onDragEnd: function () {
    console.log(&quot;drag ended&quot;);
  },
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;bounds와 inertia와 onClick했을 때와, onDragEnd 했을 때 동작까지 옵션 지정까지 디테일하게 설정 가능한 것을 확인할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;bounds : 드래그 가능한 영역 지정&lt;br /&gt;inertia : 놓았을 때의 관성효과 (밀리는 효과)&lt;br /&gt;onclick : 클릭 이벤트&lt;br /&gt;onDragEnd : 드래그 끝났을 때 이벤트&lt;/blockquote&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;div id=&quot;code_1755594052336&quot; data-ke-type=&quot;html&quot; data-source=&quot;&amp;lt;p class=&amp;quot;codepen&amp;quot; data-height=&amp;quot;300&amp;quot; data-default-tab=&amp;quot;html,result&amp;quot; data-slug-hash=&amp;quot;KwdQOpq&amp;quot; data-pen-title=&amp;quot;Untitled&amp;quot; data-user=&amp;quot;siyoonagain&amp;quot; style=&amp;quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&amp;quot;&amp;gt;
  &amp;lt;span&amp;gt;See the Pen &amp;lt;a href=&amp;quot;https://codepen.io/siyoonagain/pen/KwdQOpq&amp;quot;&amp;gt;
  Untitled&amp;lt;/a&amp;gt; by Siyoon Kim (&amp;lt;a href=&amp;quot;https://codepen.io/siyoonagain&amp;quot;&amp;gt;@siyoonagain&amp;lt;/a&amp;gt;)
  on &amp;lt;a href=&amp;quot;https://codepen.io&amp;quot;&amp;gt;CodePen&amp;lt;/a&amp;gt;.&amp;lt;/span&amp;gt;
&amp;lt;/p&amp;gt;
&amp;lt;script async src=&amp;quot;https://public.codepenassets.com/embed/index.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&quot;&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;300&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;KwdQOpq&quot; data-pen-title=&quot;Untitled&quot; data-user=&quot;siyoonagain&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/siyoonagain/pen/KwdQOpq&quot;&gt; Untitled&lt;/a&gt; by Siyoon Kim (&lt;a href=&quot;https://codepen.io/siyoonagain&quot;&gt;@siyoonagain&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>javascript</category>
      <category>gsap</category>
      <category>JavaScript</category>
      <category>자바스크립트 라이브러리</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/42</guid>
      <comments>https://cheahum.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 19 Aug 2025 18:02:08 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 코딩 입문 문제.js - 외계어 사전</title>
      <link>https://cheahum.tistory.com/41</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문제 설명&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열&amp;nbsp;spell과 외계어 사전&amp;nbsp;dic이 매개변수로 주어집니다.&amp;nbsp;spell에 담긴 알파벳을 한 번씩만 모두 사용한 단어가&amp;nbsp;dic에 존재한다면 1, 존재하지 않는다면 2를 return 하도록 solution 함수를 완성해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;...&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문제 요약&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. spell의 철자들이 dic 요소들 중 순서에 상관없이 전부 포함되어야 한다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;2. spell의 철자가 a, b, c라면 dic 요소 중 하나가 &amp;lsquo;abc&amp;rsquo;, &amp;lsquo;bca&amp;rsquo;, &amp;lsquo;cda&amp;rsquo; 등 순서에 상관없이 다 들어가야 한다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;3. &amp;lsquo;abcd&amp;rsquo; 이처럼 spell에 없는 요소인 d가 들어가 있는 건 인정하지 않는다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;작성한 답&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function solution(spell, dic){
	let check = dic.some((x)=&amp;gt; spell.every(i)=&amp;gt;x.includes(i)));
	if(check){
		return 1
	}else{
		return 2
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Or&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function solution(spell, dic) {
    return dic.some((x)=&amp;gt; spell.every((i)=&amp;gt;x.includes(i))) ? 1 : 2
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;상단 코드에서 &lt;b&gt;if문 대신 삼항 연산자를 사용해서 한 줄 코드로 요약&lt;/b&gt;할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;some()과 every() 메서드로 spell 요소들이 dic 요소에 다 포함이 되면 true, 하나라도 포함되지 않으면 false가 나오게 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 true라면 1, false라면 2를 반환하는 코드이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위 코드에서 &lt;b&gt;x는 dic의 요소&lt;/b&gt;,&lt;b&gt; i는 spell의 요소&lt;/b&gt;가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;rArr; dic의 요소에 spell의 요소들이 전부 포함되나요? 들어가면 true 아니라면 false 반환해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여기서 some를 사용한 이유는 각각의 배열 요소들을 비교하기 위해서 사용했다. for 문이나 filter를 사용해 배열의 요소들을 불러와도 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;filter 사용하면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;arcade&quot;&gt;&lt;code&gt;function solution(spell, dic){
	dic.filter((x)=&amp;gt;spell.every((i)=&amp;gt;x.includes(i))).length ? 1 : 2;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이런 식으로 포함되어 있다면 1 아니면 2로 표현한다. 여기서 length 붙인 이유는 filter로 했을 때 true, false로 반환되지 않고 해당되는 요소들을 반환하기에 요소들이 있으면 배열의 길이는 0이 아닐 테니 1, 0이면 2를 반환하도록 한다. (0, null, undefined는 false로 인식)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(&lt;s&gt;이 답은 이미 있는 답안인데 볼 때마다 매번 어떻게 간단하게 작성했을까 감탄하게 된다.&lt;/s&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;for문 사용하면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;function solution(spell, dic){
	for(i=0;i&amp;lt;dic.length;i++){spell.every((e)=&amp;gt;dic[i].includes(e)) ? 1 : 2};
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;filter와 비슷해 보이는데 정확하게 some()과 every() 메서드는 무엇일까?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/some&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;some() 메서드&lt;/b&gt;&lt;/a&gt;는 배열 안의 어떤 요소라도 주어진 판별 함수를 적어도 하나라도 통과하는지 테스트한다. 만약 배열에서 주어진 함수가 true를 반환하면 true를 반환하고 그렇지 않다면 false를 반환한다. 이 메서드는 배열을 변경하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;rArr; &lt;b&gt;주어진 조건을 만족시키는 요소가 최소 1개 이상 있는지를 확인할 때 사용한다. 그래서 반환값이 true일 때까지 확인한다. 마지막까지 true를 반환하지 않는다면 false를 반환&lt;/b&gt;한다. or과 비슷하다고 보면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/every&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;every() 메서드는&lt;/b&gt;&lt;/a&gt; 배열의 모든 요소가 제공된 함수로 구현된 테스트를 통과하는지 테스트한다. 이 메서드는 boolean 값을 반환한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;rArr; &lt;b&gt;모든 원소가 조건을 통과하는지 확인할 수 있다. 그래서 반환값이 false가 나오면 동작을 멈추고 false를 반환&lt;/b&gt;한다. and와 비슷하다고 보면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메서드에 대해 더 자세한 설명을 보고 싶다면 공식 사이트에서 확인하면 좋을 것 같다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래머스 문제 풀기</category>
      <category>every()</category>
      <category>JavaScript</category>
      <category>JS</category>
      <category>some()</category>
      <category>외계어사전</category>
      <category>자바스크립트</category>
      <category>프로그래머스</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/41</guid>
      <comments>https://cheahum.tistory.com/41#entry41comment</comments>
      <pubDate>Fri, 24 Nov 2023 14:22:54 +0900</pubDate>
    </item>
    <item>
      <title>[리액트 오류] JSON Error in .prettierrc.json</title>
      <link>https://cheahum.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;946&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSJsoI/btslhdK7UZ0/fQRizwrn9eFQVtZaskwqwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSJsoI/btslhdK7UZ0/fQRizwrn9eFQVtZaskwqwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSJsoI/btslhdK7UZ0/fQRizwrn9eFQVtZaskwqwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSJsoI%2FbtslhdK7UZ0%2FfQRizwrn9eFQVtZaskwqwk%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;1468&quot; height=&quot;946&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;946&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prettier 사이트에서 설치한 후 &lt;span style=&quot;color: #56b3b4; text-align: left;&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;background-color: #f0f0f0; color: #1b2b35; text-align: left;&quot;&gt; {}&amp;gt; .prettierrc.json&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #1b2b35; text-align: left;&quot;&gt;이 코드를 터미널에 실행하면 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b2b35; text-align: left;&quot;&gt;.prettierrc.json 파일이 생성이 되고 파일 안에 {}가 적혀있어야하는데 자꾸 빈칸 처리만 되고 보이지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b2b35; text-align: left;&quot;&gt;(아래 사진은 예시여서 빈칸이 아닌데 밑에 창보면 JSON.error라고 나온다.)&lt;/span&gt;&lt;/p&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;1702&quot; data-origin-height=&quot;1007&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp5Qef/btsljSUfwGb/0el71K4CHibiCEos1uYo0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp5Qef/btsljSUfwGb/0el71K4CHibiCEos1uYo0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp5Qef/btsljSUfwGb/0el71K4CHibiCEos1uYo0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp5Qef%2FbtsljSUfwGb%2F0el71K4CHibiCEos1uYo0k%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;1702&quot; height=&quot;1007&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1702&quot; data-origin-height=&quot;1007&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b2b35;&quot;&gt;열심히 구글링해본 결과 &lt;a href=&quot;https://github.com/prettier/prettier/issues/8815&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;한 사이트&lt;/a&gt;에서 해답을 얻을 수 있었다.&lt;/span&gt;&lt;span style=&quot;color: #1b2b35;&quot;&gt;하단에 UTF-16이면 UTF-8로 바꿔야한다.&amp;nbsp;&lt;/span&gt;&lt;/p&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;1857&quot; data-origin-height=&quot;1015&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GaEBy/btsljTr4tUm/MFoeMpT4CKPSo6oumIVhPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GaEBy/btsljTr4tUm/MFoeMpT4CKPSo6oumIVhPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GaEBy/btsljTr4tUm/MFoeMpT4CKPSo6oumIVhPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGaEBy%2FbtsljTr4tUm%2FMFoeMpT4CKPSo6oumIVhPk%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;1857&quot; height=&quot;1015&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1857&quot; data-origin-height=&quot;1015&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 오류는 사라지고 prettier가 제대로 작동하는 것을 볼 수 있다!&lt;/p&gt;</description>
      <category>리액트</category>
      <category>JSON error</category>
      <category>prettier</category>
      <category>prettier error</category>
      <category>react</category>
      <category>UTF-16</category>
      <category>UTF-8</category>
      <category>리액트</category>
      <category>프리티어</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/39</guid>
      <comments>https://cheahum.tistory.com/39#entry39comment</comments>
      <pubDate>Sun, 25 Jun 2023 10:14:54 +0900</pubDate>
    </item>
    <item>
      <title>[리액트 오류] - Warning: Invalid DOM property `class`. Did you mean `className`</title>
      <link>https://cheahum.tistory.com/38</link>
      <description>
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 툴에 &lt;b&gt;Warning: Invalid DOM property `class`. Did you mean `className`&lt;/b&gt; 오류가 떠버렸다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pjcxa/btskZx4c5R8/4ZkEOjnUpHmQeZfKxB1yD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pjcxa/btskZx4c5R8/4ZkEOjnUpHmQeZfKxB1yD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pjcxa/btskZx4c5R8/4ZkEOjnUpHmQeZfKxB1yD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpjcxa%2FbtskZx4c5R8%2F4ZkEOjnUpHmQeZfKxB1yD1%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;1917&quot; height=&quot;288&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니 말 그대로 &lt;b&gt;너가 쓴 class, className 의미하는거니? &lt;/b&gt;라는 뜻이었고 코드를 살펴보니 JSX에서 class로 써버렸다. JS에서는 class로 작성하지만 &lt;u&gt;&lt;b&gt;JSX에서는 className으로 작성&lt;/b&gt;&lt;/u&gt;해야한다. 의미는 같지만 표기하는 법이 다르기에 꼭 유의해야한다. 안 그러면 위처럼 오류가 뜨기 때문이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 해결법은&amp;nbsp; &lt;b&gt;class&lt;/b&gt;&amp;nbsp; &amp;mdash;&amp;gt;&amp;nbsp;&lt;b&gt;className&lt;/b&gt;으로 바꾸면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 하나하나 바꾸면 &lt;s&gt;시간도 걸리고 귀찮다&lt;/s&gt;. &lt;u&gt;&lt;b&gt;한번에 바꾸는 법을 알아보자!&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x25uQ/btskTHAo4wM/Mxxy1MCqaBaOzvKEOaUZv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x25uQ/btskTHAo4wM/Mxxy1MCqaBaOzvKEOaUZv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x25uQ/btskTHAo4wM/Mxxy1MCqaBaOzvKEOaUZv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx25uQ%2FbtskTHAo4wM%2FMxxy1MCqaBaOzvKEOaUZv1%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;440&quot; height=&quot;62&quot; data-origin-width=&quot;440&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ctrl + f 를 누르면 위 창이 나온다. 맨 왼쪽 화살표를 클릭하면 두개의 input창이 생긴다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VAl8x/btskSnJdoV4/i0Fdlnxgt5YCJjKCRIFqkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VAl8x/btskSnJdoV4/i0Fdlnxgt5YCJjKCRIFqkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VAl8x/btskSnJdoV4/i0Fdlnxgt5YCJjKCRIFqkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVAl8x%2FbtskSnJdoV4%2Fi0Fdlnxgt5YCJjKCRIFqkk%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;453&quot; height=&quot;107&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에선 단어 선택을 아래는 뭐라고 바꿀 것인지 적고 &lt;b&gt;replace all를 의미하는 빨간 동그라미를 친 아이콘을 누르면 된다!&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;그러면 class인 단어들이 className으로 바뀌고 개발자 툴에 있던 오류가 사라진 걸 확인 할 수 있다.&lt;/p&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;876&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmZy0/btsk2AfPRZW/5QmPXuacINkU3ffOmbrkOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmZy0/btsk2AfPRZW/5QmPXuacINkU3ffOmbrkOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmZy0/btsk2AfPRZW/5QmPXuacINkU3ffOmbrkOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrmZy0%2Fbtsk2AfPRZW%2F5QmPXuacINkU3ffOmbrkOk%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;876&quot; height=&quot;86&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>리액트</category>
      <category>class</category>
      <category>className</category>
      <category>jsx</category>
      <category>react</category>
      <category>react error</category>
      <category>replace all</category>
      <category>Warning: Invalid DOM property `class`. Did you mean `className`</category>
      <category>리액트</category>
      <category>리액트 오류</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/38</guid>
      <comments>https://cheahum.tistory.com/38#entry38comment</comments>
      <pubDate>Thu, 22 Jun 2023 14:50:38 +0900</pubDate>
    </item>
    <item>
      <title>숨어있는 숫자의 덧셈(2) - 프로그래머스 문제</title>
      <link>https://cheahum.tistory.com/37</link>
      <description>
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;숨어있는 숫자의 덧셈(2) 문제 풀어보기!&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;문제 ) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;문자열 my_string이 매개변수로 주어지는데 소문자, 대문자, 자연수로만 구성되어 있다. &lt;br /&gt;매개 변수 안의 자연수들의 합을 return하라.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;예시로 my_string = &quot;&lt;span style=&quot;color: #000000;&quot;&gt;aAb1B2cC34oOp&lt;/span&gt;&quot;&lt;span style=&quot;color: #000000;&quot;&gt;이라면 반환해야 할 값은 37이다. ( 1+2+34 = 37 )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;내가 생각한 코드 작성 단계는 첫 번째, 먼저 자연수만 남길 수 있도록 하기. 두 번째 남겨진 자연수들을 합해서 리턴하기로 이루어져 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;자연수만 남기기 위해선 정규표현식을 사용해야 훨씬 편리하다는 것을 알았다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/[^a-zA-Z]+/g -&amp;gt; 이 정규식 표현을 사용해 문자열을 필터링할 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679891976875&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const fil = /[^a-zA-Z]+/g;
let number = my_string.match(fil);
//[&quot;1&quot;,&quot;2&quot;,&quot;34&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이를 fil이란 변수에 저장한 후 my_string에서 문자열을 필터링하고 필터링한 (자연수만 남아있는) 값을 number라는 변수에 담아준다. 그러면 number에는 자연수만 남는데 console.log를 찍어보면 알 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679892209742&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let answer = 0;
number.map((x,i)=&amp;gt; answer += Number(number[i]));
return answer;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;더한 값들을 저장할 변수 answer를 만들어두고 이제 map 함수를 이용해 각각의 숫자를 더해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그러면 answer에는 37이 리턴이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;하지만 제출 후 채점했을 때 테스트 8 에러로 통과하지 못했다. 그 이유는 my_string에 자연수가 없을 경우를 고려하지 못했기 때문이다. 그래서 if문을 사용해 자연수가 없을 땐 0을 리턴하도록 했다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679892415417&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let answer = 0;

if(!number){
	return 0;
}else if(number){
	number.map((x,i)=&amp;gt; answer += Number(number[i]));
    return answer;
}&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;최종 코드&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679892508675&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(my_string) {
   const fil = /[^a-zA-Z]+/g;
    let answer = 0;
    let number = (my_string.match(fil));
    
    if(!number){
        return 0;
    }else if(number){
        number.map((x,i)=&amp;gt; answer +=  Number(number[i])); 
        return answer;
    }
    
}&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;나의 주관적인 생각&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 테스트에 통과했지만 생각보다 필요하지 않는 코드로 구성되어 있어서 그런 게 아닐까 생각이 들었다.&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;005&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/005.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/005.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&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>프로그래머스 문제 풀기</category>
      <category>숨어있는 숫자의 덧셈(2)</category>
      <category>프로그래머스</category>
      <category>프로그래머스 문제 풀기</category>
      <category>프로그래머스 숨어있는 숫자의 덧셈(2)</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/37</guid>
      <comments>https://cheahum.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 27 Mar 2023 13:54:45 +0900</pubDate>
    </item>
    <item>
      <title>프로그래머스 문제 풀기 - 모스부호(1)</title>
      <link>https://cheahum.tistory.com/36</link>
      <description>
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그래머스 문제 풀기 - 모스부호 (1)&lt;/span&gt;&lt;/h3&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;&quot;&gt;문제&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;모스부호로 된 변수 letter를 영어 소문자 문자열로 반환하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;morse 부호가 담긴 배열이 주어지고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;letter 변수에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;&quot;.... . .-.. .-.. ---&quot;가 담겨온다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679460839622&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;이 문제에는&amp;nbsp;&lt;/span&gt;&lt;u style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;map&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;과&lt;/span&gt;&lt;u style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;b&gt;split&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;그리고&amp;nbsp;&lt;/span&gt;&lt;u style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;&lt;b&gt;join&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;함수를 사용했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;그렇다면 첫 번째로 해야 할 것은 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;1. 변수 letter에 담긴 데이터들을 나누기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;자세히 보면 공백으로 구분되어 있는데 공백을 기준으로 하나씩 나누어줄 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679461058299&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let array = letter.split(' ');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;split를 사용해 공백을 기준으로 문자열을 나누었다. =&amp;gt; [&quot;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;....&lt;/span&gt;&quot;,&quot;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;.&lt;/span&gt;&quot;,&quot;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;.-..&lt;/span&gt;&quot;,&quot;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;.-..&lt;/span&gt;&quot;,&quot;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;---&lt;/span&gt;&quot;];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. key : value 이용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679461235798&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return morse[&quot;....&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위 코드를 입력하면 &quot;h&quot;가 반환되는 걸 알 수 있다. (morse를 자세히 보면 key : value로 이루어져 있다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3. map 함수를 이용해 morse[a&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;rray 안의 요소&lt;/span&gt;] 넣고 반환하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;map를 이용하면 (x, i) 중에서 i 두 번째 인자로 쉽게 배열의 요소를 하나씩 돌릴 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679461430018&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let array = letter.split(' ');

return array.map((x,i)=&amp;gt; morse[array[i]]);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;array.map((x, array의 길이)) =&amp;gt; morse[array[0 ~ array 변수 길이만큼 반복]]);&lt;/span&gt;&lt;span style=&quot;&quot;&gt;key 값 = morse[&quot;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #000000; text-align: left;&quot;&gt;....&lt;/span&gt;&quot;] / value 값 = &quot;h&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이렇게 하면 ' &quot;h&quot;, &quot;e&quot;, &quot;l&quot;, &quot;l&quot;, &quot;o&quot; ' 가 반환된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;4. 하나의 문자열로 합쳐주기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;하나로 합쳐주기 위해 join 함수를 이용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679461581059&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return array.map((x,i)=&amp;gt; morse[array[i]]).join(&quot;&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위 코드를 통해 letter의 모스부호를 해석한 &quot;hello&quot;가 반환된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;전체적인 코드&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679461971887&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(letter) {
    const morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
	}
    
    let array = letter.split(' ');
    return array.map((x,i)=&amp;gt; morse[array[i]]).join(&quot;&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래머스 문제 풀기</category>
      <category>Join함수</category>
      <category>key:value</category>
      <category>map함수</category>
      <category>split함수</category>
      <category>모스부호(3)</category>
      <category>자바스크립트</category>
      <category>프로그래머스</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/36</guid>
      <comments>https://cheahum.tistory.com/36#entry36comment</comments>
      <pubDate>Wed, 22 Mar 2023 14:18:54 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript match() 메서드</title>
      <link>https://cheahum.tistory.com/35</link>
      <description>
&lt;h1&gt;JavaScript match( ) 메서드에 대해서&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;match( ) 메서드는 무엇일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열이 정규식과 매치되는 부분을 검색한다.&lt;/p&gt;

&lt;pre class=&quot;processing&quot;&gt;&lt;code&gt;str.match(regexp)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;regexp는 정규식 개체이다. RegExp가 아닌 객체 obj가 전달되면, new RegExp(obj)를 사용하여 암묵적으로 RegExp로 변환된다. 매개변수를 전달하지 않고 match()를 사용하면, 빈 문자열 : [ &amp;ldquo;&amp;rdquo; ]이 있는 Array가 반환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 RegExp란?&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 값은 문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음 괄호 안에 캡처된&amp;nbsp;결과가 온다. 일치하는 것이 없으면 null이 반환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규식에 g 플래그가 포함되어 있지 않으면 , str.match()는 RegExp.exex()와 같은 결과를 반환한다. 반환도니 Array는 원래 문자열의 값을 가지는 input 속성을 포함한다. 그리고 문자열에서 제로 베이스의 인덱스를 나타내는 index속성 또한 포함한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규식에 g플래그가 포함되어 있으면, 일치는 객체가 아닌 일치하는 하위 문자열을 포함하는 Array를 반환한다. 캡처된 그룹은 반환되지 않는다. 일치하는 것이 없으면 null이 반환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;let a = &quot;Apple cider is cider?&quot;
let b = a.match(&quot;is&quot;);

console.log(b);

//['is']
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;match 안에 있는 값을 찾으면 그 값을 반환하고 index 값까지 나온다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;나의 주관적인 생각&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래머스 문제 풀다가 matchAll 메서드를 이용한 간단하고 깔끔한 코드를 봤어서 이렇게 찾아 공부해봤는데 찾으면 찾을수록 이걸 잘 써먹기 위해선 정규 표현식에 대해 제대로 알고 난 후에 이 메서드를 다시 공부하는 게 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 지금 여기 내용이 부족하지만 정규 표현식 &amp;rarr; match( ) &amp;rarr; matchAll( ) 를 익히고 나서 다시 수정할 계획이다!&lt;/p&gt;</description>
      <category>javascript</category>
      <category>javascirpt</category>
      <category>match( )</category>
      <category>자바스크립트</category>
      <category>정규표현식</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/35</guid>
      <comments>https://cheahum.tistory.com/35#entry35comment</comments>
      <pubDate>Tue, 21 Mar 2023 14:44:59 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript 이벤트 처리기 함수 - e.currentTarget</title>
      <link>https://cheahum.tistory.com/34</link>
      <description>&lt;h1&gt;JavaScripte e.currentTarget에 대해서&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;e.currentTarget은 무엇일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e.currentTarget은 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;근데 e.target과 차이점이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e.target를 사용하면 클릭한 그 요소만을 가져오고 e.currentTarget를 사용하면 클릭한 그 요소의 부모 태그까지 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;parent&quot;&amp;gt;
	&amp;lt;span class=&quot;click&quot;&amp;gt;click&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;document.querySelector(&quot;.parent&quot;).addEventListener('click',function(e){
	console.log(e.target);
	console.log(e.currentTarget);
})

//&amp;lt;span class=&quot;click&quot;&amp;gt;click&amp;lt;/span&amp;gt;

//&amp;lt;div class=&quot;parent&quot;&amp;gt;
//	&amp;lt;span class=&quot;click&quot;&amp;gt;click&amp;lt;/span&amp;gt;
//&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 e.target는 해당 요소만(click클래스) 가져오지만 e.currentTarget은 그 요소의 부모요소(parent클래스)까지 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;e.currentTarget 값은 이벤트가 처리되는 동안만 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;counter 기능 코딩 연습하는데 참고한 곳에서 코드 작성할 때 e.currentTarget를 사용했는데 신박했다고 느꼈다.(&lt;s&gt;개인적으로&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이너스 버튼, 초기화 버튼, 플러스 버튼 총 3개의 버튼이 있는데 버튼클래스를 눌렀을 때 *클래스가 포함되어 있다면 이런 동작을 해줘! 였다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;h1 class=&quot;value&quot;&amp;gt;0&amp;lt;/h1&amp;gt;
&amp;lt;button class=&quot;btn mi&quot;&amp;gt;-&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn reset&quot;&amp;gt;reset&amp;lt;/button&amp;gt;
&amp;lt;button class=&quot;btn plus&quot;&amp;gt;+&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;xquery&quot;&gt;&lt;code&gt;let btns = document.querySelectorAll(&quot;.btn&quot;);
let num = document.querySelector(&quot;.value&quot;);
let count = 0;

btns.addEventListener('click',function(e){
	let 이벤트값 = e.currentTarget.classList;
	if(이벤트값.contains('mi')){
		count--;
	}else if(이벤트값.contains('plus')){
		count++;
	}else{
		count = 0;
	}
	value.textContent = count;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 button 태그를 btn 클래스로 묶어서 클릭했을 때 부모요소까지 가져와 내가 원하는 class명이 포함되어있다면 원하는 동작을 할 수 있도록 실행할 수 있었다. 이로써 코드는 깔끔해지고 간단해질 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카운터 만드는 기능은 &lt;a href=&quot;https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;amp;t=421s&quot;&gt;이곳에서&lt;/a&gt; 배웠다. 다른 기능들도 알고 싶으면 이 사이트에 가서 만들어보는 걸 추천한다!&lt;/p&gt;</description>
      <category>javascript</category>
      <category>Counter 기능</category>
      <category>e.currentTarget</category>
      <category>e.target</category>
      <category>JavaScript</category>
      <category>자바스크립트</category>
      <category>자바스크립트 이벤트 처리기 함수</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/34</guid>
      <comments>https://cheahum.tistory.com/34#entry34comment</comments>
      <pubDate>Mon, 20 Mar 2023 13:25:23 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript sort()메서드</title>
      <link>https://cheahum.tistory.com/33</link>
      <description>
&lt;h1&gt;JavaScript &lt;b&gt;sort() 메서드에&lt;/b&gt; 대해서&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;sort() 메서드는&lt;/b&gt; 무엇일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sort( ) 메서드는 배열의 요소를 정렬한다. 원본 배열의 요소 순서를 변경하므로, 배열 자체가 변경된다. 이 메서드는 기본적으로 문자열을 변환한 후 유니코드 순서로 정렬된다. 따라서 숫자를 정렬할 때는 정렬 기준을 정의해주어야 한다.&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;arr.sort([ compareFunction ])
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 오름차순으로 정렬된다.&lt;/p&gt;
&lt;pre class=&quot;autoit&quot;&gt;&lt;code&gt;const fruits = ['banana','orange','apple','grape'];
fruits.sort();
console.log(fruits);

//['apple', 'banana', 'grape', 'orange']
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 내림차순으로 정렬하고 싶다면&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;const numbers = [5,2,8,1,4];
numbers.sort((a,b)=&amp;gt;b - a);
console.log(numbers);

//[8, 5, 4, 2, 1]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;compareFunction 자리에 콜백 함수를 사용하여 정렬 기준을 정의할 수 있다. 이 콜백 함수는 두 개의 인자( &amp;lsquo;a&amp;rsquo;, &amp;lsquo;b&amp;rsquo; )를 받아서 &amp;lsquo;-1&amp;rsquo; , &amp;lsquo;0&amp;rsquo;, &amp;lsquo;1&amp;rsquo; 중 하나를 반환해야 한다. 반환값이 음수면 &amp;lsquo;a&amp;rsquo;가 &amp;lsquo;b&amp;rsquo;보다 작은 것으로 간주해 &amp;lsquo;a&amp;rsquo;가 &amp;lsquo;b&amp;rsquo; 앞으로 정렬된다. 반환값이 양수이면 &amp;lsquo;a&amp;rsquo;가 &amp;lsquo;b&amp;rsquo;보다 큰 것으로 간주하여 &amp;lsquo;a&amp;rsquo;가 &amp;lsquo;b&amp;rsquo; 뒤로 정렬된다. 반환값이 &amp;lsquo;0&amp;rsquo;이면 &amp;lsquo;a&amp;rsquo;와 &amp;lsquo;b&amp;rsquo;의 순서는 변경되지 않는다.&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot;&gt;&lt;code&gt;const fruits = ['banana','orange','apple','grape'];
fruits.sort((a , b) =&amp;gt; a.length - b.length );
console.log(fruits);

//['apple', 'grape', 'banana', 'orange']
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 sort( ) 메서드는 큰 배열을 정렬할 땐 속도가 느려질 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이 메서드에 대한 주관적인 생각&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이리저리 순서가 정렬되어 있지 않는 배열에 sort( ) 메서드를 사용하고 큰 수를 찾던가 작은 수를 찾는 방법일 때 많이 이용했던 것 같다. 그래서 순서 정렬이 전부일 거라 생각했는데 자세히 파고 드니 콜백함수를 어떻게 사용하느냐에 따라 다르고 지금까지 한 배열은 짧아서 sort로만 잘 이용할 수 있었는데 수백 가지의 데이터들을 정렬해야 할 상황이 올 때 어떤 방식으로 코드를 짜야할지 고민할 수 있는 기회가 되었다.&lt;/p&gt;</description>
      <category>javascript</category>
      <category>Chat GPT</category>
      <category>JavaScript</category>
      <category>sort( )</category>
      <category>sort( ) 메서드</category>
      <category>자바스크립트</category>
      <author>유니유뉘</author>
      <guid isPermaLink="true">https://cheahum.tistory.com/33</guid>
      <comments>https://cheahum.tistory.com/33#entry33comment</comments>
      <pubDate>Sun, 19 Mar 2023 14:15:24 +0900</pubDate>
    </item>
  </channel>
</rss>