일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부트캠프
- git
- 컴퓨터공학
- 패스트캠퍼스
- DFS
- 호이스팅
- 컴퓨터과학
- nodejs
- CS
- 자바스크립트
- computerscience
- js
- CSS
- KAKAO
- 백준
- 국비지원
- 국비지원취업
- LinkSnap
- 코딩테스트
- github
- 알고리즘
- 코테
- Javascript
- 너비우선탐색
- 프론트엔드개발자
- 야놀자
- cpu
- 그리디
- BFS
- html/css/js
- Today
- Total
목록FrontEnd (190)
My Boundary As Much As I Experienced
교차 타입 커스텀 타입을 혼합해서 쓸 수 있다. 사용법1. 객체 커스텀 타입과 객체 커스텀 타입을 혼합하면 합집합을 강제한다. type Admin = { name: string; privilages: string[]; }; type Employee = { name: string; startDate: Date; // 자바스크립트 Date객체를 말한다. }; type ElevatedEmployee = Admin & Employee; // 이런걸 교차타입이라고 한다. const e1: ElevatedEmployee = { name: "Max", privilages: ["create-server"], startDate: new Date(), }; console.log(e1); 인터페이스를 커스텀 타입으로 조합할..
두 개 중 뭘 사용해야 되나? 거의 비슷해서 서로 immigration해도 문제 없는 경우가 대부분이긴 한데 사소한 차이점들이 있긴 하다. 차이1: 문법 커스텀 타입은 등호를 이용하여 값을 할당한다. // 타입은 등호를 활용하여 값을 할당해준다. type Credit = number type People = { name: string; age: number; } type Id = string | number 인터페이스는 객체 형식꼴로 만든다. // 인터페이스는 객체 형식 혹은 클래스 형식과 비슷하게 생겼다. interface GreenThings { tree: string[]; jewel: string[]; brand: string[]; } interface Korean { name: string; id..
특정 숫자에 의미를 부여해서 타입들을 관리하고 싶을 때, 예를 들어 어떤 게임에서 player = 0, staff = 1, manager = 2 이런 식으로 코드를 부여해서 쓰고 싶다고 하자. 이런 상황에서 유용하게 사용할 수 있는게 enum이다. 이걸 자바스크립트에서 쓰려면 이런식으로 사용한다. // 자바스크립트에서도 통하는 방식 const ADMIN = 0 const READ_ONLY = 1 const AUTHOR = 2 이걸 아래 role에다 넣는게 더 간편할 수 있다. (자바스크립트에도 통하는 방식) 그러나 TS의 enum을 사용하면 조금 더 그룹화된 사용을 할 수 있다. 순서대로 0,1,2,... 식으로 일종의 인덱스가 부여된다. // 각기 변수를 만들지 않고 통합된 하나의 그룹처럼 쓰는게 en..
배열 타입 '배열'의 타입은 : []라고 지정하면... 될 줄 알았다. 그러나 이렇게 빈 배열을 타입으로 지정하면 '진짜 빈 배열' 이외에는 받지 못한다. string[], number[], ... 이런 식으로 어떤 데이터를 받는지를 리터럴 앞에 써줘야 한다. const person: string[] = ["Kim", "Han"] // 문자열만 받는 배열 생성. 초기화 때 비워놔도 된다. 어차피 문자열 들어간다고 선언해놨으니 다른 데이터가 들어갈 가능성은 없다. person.push(5) // 에러 만약 받을 수 있는 데이터 타입이 2개 이상이면 어떻게 할까? 유니언 타입을 [] 앞에 써두면 된다. ([]은 객체 리터럴이라 한다.) const person: (string|number)[] = ["Kim"..
직관적으로 오브젝트의 타입 지정은 아래처럼 하면 될거같다. const person: object = { name: "bumang", age: 30, }; 하지만 이건 틀렸습니다~ object라고 타입지정을 해버리면 타입스크립트는 이게 빈 객체{} 인줄 안다. 빈 객체가 아니라 안에 속성들이 있다면 그 속성들의 타입을 모두 지정해줘야 한다. const person: object = { name: "bumang", age: 30, }; // 라고 쓰면 const person: {} = { name: "bumang", age: 30, } // 처럼 쓴 것과 같다. // 둘 다 안 된다. 타입스크립트에서 객체의 타입을 명확히 기입하려면 아래처럼 하면 된다. const person: { name: string; ..
자바스크립트에서 없는 값을 호출하면 런타임 시 undefined가 나온다. 즉 아래처럼 person이란 객체가 있을 때 nickname이란 속성이 없는데 참조를 해오면 undefined가 나오고, 그곳에 메소드라도 체이닝 되어 있었으면 reference error 뜨는거다. 하지만 타입스크립트는 그런 가능성을 일절 차단하기 위해서 컴파일을 해주지 않는다. 컴파일 에러에서 타입이 없거나 참조할 수 없는 값들을 다 솎아내서 고치라고 프로그래머에게 말해준다. 실사용 서비스에서 에러 터지는 것보다 좀 귀찮아도 고치라는 잔소리해주는게 더 낫기 때문에 타입스크립트를 쓴다. const person = { name: "bumang", age: 30, }; // 타입 추론으로 name: string; age: numbe..
타입스크립트 내에서 이 상수의 타입은 5이다. constant(상수)이기 때문이다. const num1 = 5 반면 이 변수의 타입은 number이다. 재할당이 일어날 가능성이 있기 때문이다. let num2 = 5 사실 아주 명확하게 쓰려면 : number를 붙이면 된다. 하지만 충분히 TS가 추론 가능한 변수는 굳이 타입을 안 적어도 된다. (오히려 일일이 다 안 적는게 깔끔하다.) let num2: number = 5 하지만 아래처럼 초기화만 할 경우엔 타입을 같이 적어주는게 좋다. 아니면 계속 any타입으로 남는다. // let num3 이 아니라, let num3: number;
메모이제이션 연산의 결괏값을 메모리에 저장해 두고 이전 값과 결과가 동일할 때 재사용하는 기법 그렇다면 react의 메소드들은 어떤식으로 메모이제이션을 하고 있을까? React.memo()는 props의 값으로 변경을 확인을하고 useCallback()과 useMemo()는 dependency 배열 내부의 값으로 변경사항을 확인한다. React.memo() - 컴포넌트 자체를 메모이제이션 - 자체적으로 props값을 비교해서 달라진 부분이 없다면 리액트 DOM에서 비교 작업이 들어가지 않는다. useCallback() - 함수 자체를 메모이제이션 - 자바스크립트에서 함수는 객체로 취급되기 때문에 리렌더링이 일어날 때마다 새로운 함수가 생성 - 자식 컴포넌트의 불필요한 리렌더링을 막기 위해선 useCall..
리액트에서 동적으로 컴포넌트를 추가해주고 싶을 때 map 메소드를 주로 사용한다. 그런데 map 메소드가 순회할 때 JSX코드를 뱉어낼 때 key인자가 없다면 리액트가 개발자 도구에 경고 메시지를 출력한다. 그런데 왜 key props가 필요한지를 알아보자 이유: 렌더링 최적화 Key는 React가 어떤 항목을 변경, 추가 또는 삭제할지 식별하는 것을 돕는다. 만약 Key가 없다면 배열에서 무언가 수정하거나 삭제하면 전체 배열을 다시 렌더링하게 된다. 그러나 Key를 넣어준다면 해당 instance만 수정하거나 삭제하여 불필요한 재렌더를 방지할 수 있다. 주의할 점: map((value, idx) => { return }) 처럼 2번째 인자를 key에 넣는 것도 좋지 않다. 에러를 없애기 위해 임시 방편..
Props를 자손으로 쭉쭉 내려다보내다보면 props가 어디까지 보내지는지 그 깊이를 알기 어려워지는 현상. 3~4개면 어떻게든 파악을 할텐데, depth가 15개 이상이면? props가 어떻게 보내지고 있는지 파악하는 것 자체가 시간이 든다. import React from "react"; import "./styles.css"; export default function App() { return ( ); } function FirstComponent({ content }) { return ( I am the first component; | ); } function SecondComponent({ content }) { return ( I am the second component; ); } fun..