-
type은 확장 가능하지 않은것인지?
- 확장 가능하다, 다만 병합(동일한 이름으로 선언하면 자동으로 병합되는 것을 말함)이 안될뿐
// 교차 타입 (엠퍼센드 연산자를 사용)
type Animal = {
name: string;
}
type CanBark = {
bark(): void;
}
type Dog = Animal & CanBark;
// 유니온 타입 (파이프 연산자를 사용)
type ID = string | number;
type Status = "pending" | "completed" | "failed";
-
interface와 type의 차이
- interface는 선언 병합이 가능하다.
- 확장하는 방식이 다름 (interface는 extends를 사용, type은 & 연산자 사용)
-
interface를 type보다 더 많이 사용되는 이유
-
선언 병합으로 라이브러리 타입을 확장시켜서 사용할 수 있다.
// 써드파티 라이브러리가 정의한 interface
interface Window {
title: string;
}
// 내가 필요한 속성 추가
interface Window {
darkMode: boolean;
}
// Window는 이제 title과 darkMode 모두 가짐
-
type 중 null undefined any void never 에 대해서 설명
- null : 의도적으로 비어있는 값임을 명시할때 사용
- undefined : 할당 자체가 안되어 있는 상태
- any : 모든 타입을 사용할 수 있음. 특정 데이터의 타입을 잘 모를때 사용
- void : 반환값이 없는 함수의 반환 타입
- never : 절대 발생할 수 없는 값의 타입
-
void와 never의 차이
- void: 함수가 아무것도 반환하지 않고 정상적으로 종료됨을 의미
- never : 함수의 끝에 절대 도달하지 않는 경우에 사용 (예를 들어 함수 반복문이나 에러 핸들링하는 함수)
-
useState에서 사용되는 비동기 원리
-
같은 api 주소로 여러번의 여러개 요청이 갈때 응답받은 값들이 어디에서 보낸 요청인지 구분할 수 있는 방법
-
리덕스 툴킷을 사용한 이유와 작동원리
- 이유 : 오랫동안 많은 기업들에서 사용해왔고 메타에서 지원하는 라이브러리여서 안정성이 잇다고 생각했습니다. 또한, 리덕스 툴킷에 관한 자료가 풍부하다보니 문제가 생겼을때 해결책을 찾기가 좀 더 수월할 것이라고 판단했고 데브툴스와 같이 상태 변화를 추적하고 디버깅하기 좋은 개발 도구를 제공하기 때문입니다.
- 동작원리 : 상태를 configurestore 를 통해서 한군데에 보관하고, 상태를 변경하고 싶을땐 dispatch 함수를 통해서 action을 취하면 한곳에서 관리하던 상태를 변경할 수 있고, 상태를 어떻게 변경할건지에 대한 작동은 reducer에 정의해둠
-
프론트엔드 기술중에서 가장 어렵다고 느끼는 부분
- 불필요한 렌더링이 생기지 않게 상태관리하기
- 비동기처리를 받아와서 처리하는 과정
-
멀티쓰레드/싱글쓰레드
- 자바스크립트는 싱글쓰레드로 하나의 콜스택에서 실행 컨텍스트들을 처리한다.
-
실행 컨텍스트
-
호이스팅이 왜 발생하는지 (현상을 물어보는것이 아니라 원인에 대해서)
- 실행 컨텍스트를 생성하는데 이때 생성 단계와 실행 단계로 나누어 처리하기 때문에 생기는 현상
- 코드 실행 전에 필요한 메모리를 미리 할당하여 효율적인 메모리 관리를 하기 위해서
-
브라우저 렌더링
-
이벤트루프와 콜스택, 테스크 큐
- 콜스택은 자바스크립트의 싱글 스레드 실행을 담당
- 이벤트 루프는 콜스택이 비워지면 테스크 큐에 있는걸 하나씩 보냄.
-
콜백함수를 설명
- 콜백함수는 다른 함수의 인자로 전달되어 나중에 실행되는 함수
-
콜백지옥
- 비동기 작업의 연속적인 처리, 순차적으로 실행되어야 할 때 발생
-
비동기
- 실행이 완료되지 않더라도 다음 코드를 실행시킴 그렇기 때문에 메인스레드를 블로킹하지 않음
-
async/await과 promise 차이점
- promise와 async/await은 비동기 처리를 위한 패턴입니다.
- promise는 비동기 작업의 상태와 결과를 나타내는 객체로, peding, fulfilled, rejected의 세 가지 상태를 가지며, then, catch, finally 메서드를 통해 비동기 작업을 체이닝 방식으로 처리할 수 있습니다.
- async/await은 promise를 기반으로 동작하는 문법적 설탕으로, 비동기 코드를 동기 코드처럼 작성할 있게 해줍니다. async 함수는 항상 promise를 반환하며, await 키워드는 promise가 처리될때까지 실행을 일시중지시킵니다.
-
ssr/csr/ssg
-
nextjs를 사용한 이유와 nextjs의 특징을 활용한 점