일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 리액트
- 투두앱만들기
- REACT
- 자바스트립트
- js
- github
- JavaScript
- Hooks
- 타입스크립트
- 자바스크립트
- 부트캠프
- 웹개발
- 캡슐화
- 클래스
- Zustand
- 불변성
- 프론트엔드
- Props
- CSS
- OOP
- Fetch
- 상속
- frontend
- 객체지향프로그래밍
- 추상화
- webdevelopment
- typeScript
- 논리연산자
- 패스트캠퍼스
- 노마드코더
- Today
- Total
connecting dots
Beginner 8회차 1 (8/6) | 디바운스(Debounce)와 쓰로틀(Throttle), DefinitelyTyped, 타입 단언, 양방향 데이터 바인딩과 단방향 데이터 바인딩, git hub flow 본문
Beginner 8회차 1 (8/6) | 디바운스(Debounce)와 쓰로틀(Throttle), DefinitelyTyped, 타입 단언, 양방향 데이터 바인딩과 단방향 데이터 바인딩, git hub flow
dearsuhyun 2024. 8. 6. 14:57디바운스(Debounce)와 쓰로틀(Throttle)
Throttle: 반복 실행에 부하(저항)을 주기 (10번 실행 --> 5-6번 실행)
Debounce: 마지막에 한 번만 실행하기
import "./style.css";
document.querySelector<HTMLDivElement>("#app")!.innerHTML = /* html */ `
<div>
<h1>Hello World</h1>
</div>
`;
window.addEventListener("scroll", (event) => {
console.log(event);
});
호출이 stack됨(=하나씩 쌓임)
콜스택: 호출하는 함수를 쌓아놓고 하나씩 처리하는 것
--> 콜스택이 초과되면 스택 오버플로우(stack overflow)라는 오류 발생
함수 호출이 너무 많이 중첩되어 콜 스택의 용량을 초과할 때 발생 --> 오류메세지 발생
RangeError: Maximum call stack size exceeded
쓰로틀(Throttle)
많이 호출되는 함수를 시간으로 조절하여 적게 호출하게끔 조절하는 기능
성능 향상과 메모리 부담을 적게 해주기 위해서 !
디바운스(Debounce)
자주 발생하는 이벤트를 제어하여 특정 시간이 지난 후에 한 번만 실행되도록 하는 기술
주로 성능 최적화를 위해 사용되며, 예를 들어 사용자가 입력 필드에 텍스트를 입력할 때, 각 입력마다 이벤트 핸들러가 호출되는 대신 일정 시간 동안 입력이 멈추면 한 번만 호출되도록 할 수 있음
scroll 예제
검색창 예제
--> 너무 서버와 통신이 잦음 !
디바운스를 이용해서 원하는 검색어를 다 타이핑 한 후 마지막 한 번만 네트워크 통신하도록 !
--> throttle로 사용해도 되긴함 (주의: 마지막을 보장해주지는 않음)
타입 단언
--> 타입 단언을 해주면 됨
타입스크립트가 정확한 타입 추론을 하기 어려울 때, 개발자가 '괜찮아 ! 내가 타입이 확실하다는 것을 단언할게 !'라고 확신하는 것
but 이는 아주 확실할 때 사용, 남발하면 안됨 (사람은 실수를 할 수 있으므로)
--> event.target(=inputEl)을 HTMLInputElement 타입으로 선언.
이를 통해 TypeScript는 event.target이 HTMLInputElement임을 알고 해당 타입의 속성에 안전하게 접근할 수 있게 됨 !
DefinitelyTyped
lodash-es 패키지와 함께 제공되는 타입 선언 파일을 의미
TypeScript 커뮤니티에서 관리하는 타입 선언 파일의 저장소로, JavaScript 라이브러리에 대한 타입 정보를 제공함
DT가 무엇인가요?
• DT: “DefinitelyTyped”의 약자입니다.
• 목적: JavaScript 라이브러리를 TypeScript에서 사용할 때 타입 정보를 제공하여 코드의 안정성과 오류를 줄입니다.
타입 정보가 왜 필요한가요?
JavaScript는 동적 타입 언어입니다. 즉, 변수나 함수의 타입을 명시적으로 지정하지 않습니다. 이로 인해 런타임 오류가 발생할 수 있습니다. 반면, TypeScript는 정적 타입 언어로, 타입 정보를 명시하여 컴파일 단계에서 오류를 잡을 수 있습니다. 타입 정보를 제공하면 개발할 때 타입 관련 오류를 미리 잡을 수 있어 코드의 안정성이 높아집니다.
DefinitelyTyped가 하는 일
DefinitelyTyped는 JavaScript 라이브러리용 TypeScript 타입 정의 파일을 모아 놓은 저장소입니다. 이 파일들은 JavaScript 라이브러리를 TypeScript에서 사용할 때 그 라이브러리가 어떤 타입을 사용하는지 알려줍니다.
// DT가 붙은 모든 것 같은 방법으로 설치하면 됨
// 별도 타입 설치하는 방법
npm i -D @types/lodash-es
양방향 데이터 바인딩과 단방향 데이터 바인딩
--> 패턴 암기하기 !!! ★★★
양방향 데이터 바인딩
--> 데이터의 흐름이 양방향
데이터를 입력하면 화면에 표시되고 화면에 표시되는 데이터를 수정하면 데이터가 수정되는 것
ex. input, button, select, textarea, checkbox 등에서 많이 사용됨
import { useState } from 'react'
export default function App() {
const [text, setText] = useState('')
return (
<>
<input
value={text}
onChange={(e) => setText(e.target.value)}
/>
<h2>{text}</h2>
</>
)
}
--> title이라는 데이터를 통해 input 요소에 값을 넣는 것도 가능하고
input 요소에서 입력한 값이 title을 갱신하여 값이 변경되는 것도 가능함 ! 양방향 데이터 바인딩
단방향 데이터 바인딩
--> 데이터의 흐름이 단방향
--> title이 div 요소로 들어가는 것은 되지만 div요소에서 title을 갱신하는 것은 안됨 (단방향 데이터 바인딩)
* 잘 모르는 기술 등을 검증해보는 것은 완전히 백지상태에서 해보기
진행 중인 프로젝트에서 테스트하면 주변 환경이 오염됨.
주변 환경 영향을 최소화시켜서 테스트해보고 프로젝트에 적용해보는 방식으로 !
* 프로젝트 초기화하고 싶을 때 (숨겨져 있는 .git 파일 찾아서 삭제하기)
// 버전 관리 초기화 rm -rf .git
*npm i lodash-es
• ES 모듈 형식: lodash-es 패키지는 ES 모듈 형식으로 작성되었습니다. 이는 모던 JavaScript 번들러(예: Webpack, Rollup, Vite)에서 사용하기에 적합합니다.
• Tree Shaking 지원: ES 모듈 형식이므로, 모던 번들러에서 Tree Shaking을 지원하여 사용하지 않는 코드를 제거할 수 있습니다.
* main으로 병합하는 방법
// 혼자 개발할 때, 중요하지 않은 프로젝트일 때 (실무에서는 잘 안씀) git merge setTodo
--> 실무에서는 PR(pull request) 방법을 주로 이용 !
리뷰 기능, 테스트 기능, 병합에 권한 부여해서 최종 병합 처리자 지정 가능 등의 기능이 있기 때문
= git hub flowpr 생성 리뷰 작성 가능 병합 성공
로컬 저장소에 업데이트
git switch -c feature/createTodo
feature: 기능을 만드는 브랜치임을 명시해주는 것branch 삭제하는 명령 'git branch -D'
* 개발공부
장기적인 관점에서 바라보고 어떤 패턴으로 공부할건지에 대한 패턴 구축 필요
https://www.heropy.dev/p/PcUkdT#h2_%EC%B4%88%EA%B8%B0%ED%99%94_Init
Git 핵심 명령어 모음
버전 관리 시스템(VCS) Git에서 주로 사용하는 명령을 빠르게 정리합니다.
www.heropy.dev
https://www.heropy.dev/p/OidQSe
React 핵심 패턴
React 기본 문법의 다양한 사용 패턴을 살펴봅니다.
www.heropy.dev