1. type은 확장 가능하지 않은것인지?

    1. 확장 가능하다, 다만 병합(동일한 이름으로 선언하면 자동으로 병합되는 것을 말함)이 안될뿐
    // 교차 타입 (엠퍼센드 연산자를 사용)
    type Animal = {
      name: string;
    }
    
    type CanBark = {
      bark(): void;
    }
    
    type Dog = Animal & CanBark;
    
    // 유니온 타입 (파이프 연산자를 사용)
    type ID = string | number;
    type Status = "pending" | "completed" | "failed";
    
  2. interface와 type의 차이

    1. interface는 선언 병합이 가능하다.
    2. 확장하는 방식이 다름 (interface는 extends를 사용, type은 & 연산자 사용)
  3. interface를 type보다 더 많이 사용되는 이유

    1. 선언 병합으로 라이브러리 타입을 확장시켜서 사용할 수 있다.

      // 써드파티 라이브러리가 정의한 interface
      interface Window {
          title: string;
      }
      
      // 내가 필요한 속성 추가
      interface Window {
          darkMode: boolean;
      }
      
      // Window는 이제 title과 darkMode 모두 가짐
      
  4. type 중 null undefined any void never 에 대해서 설명

    1. null : 의도적으로 비어있는 값임을 명시할때 사용
    2. undefined : 할당 자체가 안되어 있는 상태
    3. any : 모든 타입을 사용할 수 있음. 특정 데이터의 타입을 잘 모를때 사용
    4. void : 반환값이 없는 함수의 반환 타입
    5. never : 절대 발생할 수 없는 값의 타입
  5. void와 never의 차이

    1. void: 함수가 아무것도 반환하지 않고 정상적으로 종료됨을 의미
    2. never : 함수의 끝에 절대 도달하지 않는 경우에 사용 (예를 들어 함수 반복문이나 에러 핸들링하는 함수)
  6. useState에서 사용되는 비동기 원리

  7. 같은 api 주소로 여러번의 여러개 요청이 갈때 응답받은 값들이 어디에서 보낸 요청인지 구분할 수 있는 방법

  8. 리덕스 툴킷을 사용한 이유와 작동원리

    1. 이유 : 오랫동안 많은 기업들에서 사용해왔고 메타에서 지원하는 라이브러리여서 안정성이 잇다고 생각했습니다. 또한, 리덕스 툴킷에 관한 자료가 풍부하다보니 문제가 생겼을때 해결책을 찾기가 좀 더 수월할 것이라고 판단했고 데브툴스와 같이 상태 변화를 추적하고 디버깅하기 좋은 개발 도구를 제공하기 때문입니다.
    2. 동작원리 : 상태를 configurestore 를 통해서 한군데에 보관하고, 상태를 변경하고 싶을땐 dispatch 함수를 통해서 action을 취하면 한곳에서 관리하던 상태를 변경할 수 있고, 상태를 어떻게 변경할건지에 대한 작동은 reducer에 정의해둠
  9. 프론트엔드 기술중에서 가장 어렵다고 느끼는 부분

    1. 불필요한 렌더링이 생기지 않게 상태관리하기
    2. 비동기처리를 받아와서 처리하는 과정
  10. 멀티쓰레드/싱글쓰레드

    1. 자바스크립트는 싱글쓰레드로 하나의 콜스택에서 실행 컨텍스트들을 처리한다.
  11. 실행 컨텍스트

  12. 호이스팅이 왜 발생하는지 (현상을 물어보는것이 아니라 원인에 대해서)

    1. 실행 컨텍스트를 생성하는데 이때 생성 단계와 실행 단계로 나누어 처리하기 때문에 생기는 현상
    2. 코드 실행 전에 필요한 메모리를 미리 할당하여 효율적인 메모리 관리를 하기 위해서
  13. 브라우저 렌더링

  14. 이벤트루프와 콜스택, 테스크 큐

    1. 콜스택은 자바스크립트의 싱글 스레드 실행을 담당
    2. 이벤트 루프는 콜스택이 비워지면 테스크 큐에 있는걸 하나씩 보냄.
  15. 콜백함수를 설명

    1. 콜백함수는 다른 함수의 인자로 전달되어 나중에 실행되는 함수
  16. 콜백지옥

    1. 비동기 작업의 연속적인 처리, 순차적으로 실행되어야 할 때 발생
  17. 비동기

    1. 실행이 완료되지 않더라도 다음 코드를 실행시킴 그렇기 때문에 메인스레드를 블로킹하지 않음
  18. async/await과 promise 차이점

    1. promise와 async/await은 비동기 처리를 위한 패턴입니다.
    2. promise는 비동기 작업의 상태와 결과를 나타내는 객체로, peding, fulfilled, rejected의 세 가지 상태를 가지며, then, catch, finally 메서드를 통해 비동기 작업을 체이닝 방식으로 처리할 수 있습니다.
    3. async/await은 promise를 기반으로 동작하는 문법적 설탕으로, 비동기 코드를 동기 코드처럼 작성할 있게 해줍니다. async 함수는 항상 promise를 반환하며, await 키워드는 promise가 처리될때까지 실행을 일시중지시킵니다.
  19. ssr/csr/ssg

  20. nextjs를 사용한 이유와 nextjs의 특징을 활용한 점