I_TStory/TIL

멘토링 2일차 내용정리

귤치 2025. 6. 29. 16:44

이벤트루프에 대해 설명해주세요

코드가 한줄씩 실행되면서 콜스택에 쌓입니다.

프로미스가 우선순위가 더 높아서 setTimeOut 보다 먼저 콜스택으로 넘어가고, 콜스택이 비워지면 setTimeOut도 콜스택으로 넘어가서 실행이 됩니다.

 

이벤트루프가 하는 역할은 뭔가요?

백그라운드에서 시간이 오래 걸리는 작업들을 따로 빼줌으로서 비동기적으로 실행하게 하는 역할을 합니다.

 

프로미스, 셋타임아웃, 셋인터벌은 어떻게 동작을 하나요?

셋타임아웃, 셋인터벌이 태스크큐에 먼저 들어가고

그다음 콜스택이 비면 셋타임아웃, 인터벌을 넣어줍니다. 다음으로 마이크로태스크큐에 있는 프로미스를 콜스택으로 옮깁니다

=> 순서 바꿔서 말한 것 같은데 멘토님도 모르신듯..?

Promise.then, catch, finally Microtask Queue
setTimeout, setInterval Task Queue (Macrotask Queue)

 

코드 보여주면서 호출순서 물어봄

셋타임아웃, 프로미스를 섞어놓은 코드였음

프로미스 먼저 찍히고 그다음 셋타임아웃

이벤트루프가 자바스크립트의 성능에는 어떤 영향을 미쳐요?

멘토님 답변: 비동기 작업이 늘어나면 성능에 안좋은 영향을 줌

(그러니까 이벤트루프가 있으면 비동기 작업에 부하를 덜하게 해서 성능이슈를 줄여준다는 말인듯)

 

아래와 같은 코드가 있을 때, 작업이 오래걸리는 for문을 어떻게 변경하면 되나요?

 

답: setTimeout으로 빼주기

 

setInterval은 절대적으로 1초마다 실행을 하는 걸까요?

그런 걸로 알고 있었어요. (절대적으로 라길래 오답인 건 알았지만)

 

내질문: 그럼 1초를 보장하게 할 수도 있나요?

=> 1초를 보장하게 하는 것보다는 실시간 통신이 중요하다 할 때는 소켓 통신을 쓰거나 폴링 방식을 써요

나: 그러면 이것도 초는 보장이 안되는 거죠?

=> 얘네는 초를 쓰는 게 아니라 계속해서 서버를 구독하고 있는 거예요.

 

흠 . .. 이건 GPT로 정리 한 번 해야겠다

 setTimeout, setInterval은 왜 마이크로 테스크큐에 들어가지 못했을까요?

멘토님 답변: 시간을 걸고 대기하는 애들은 마이크로 태스크큐로 분류된다.

근데 이건 왜라는 질문에 대한 올바른 답변이 아닌 것 같다 질문이 애매한 것 같기도

클로저가 뭐죠?

내답변:

클로저를 어떤 장점때문에 쓰나요?

정보 은닉화

 

클로저예시가 뭘까요?

리액트 useState

 

클로저의 단점

참조를 끊어주지 않으면 메모리가 낭비됩니다.

null로 참조를 끊어주는 작업을 해야합니다.

 

커링함수란?

하나의 함수에 여러 인자를 한 번에 넘기는 대신, 하나씩 나눠서 넘기는 방식

커링예시

프로토타입 체이닝은 왜 쓰는 거예요?

상속을 가능하게 하려고요

 

프로토타입 체인을 상속으로 쓰는 예시가 뭐가 있어요?

배열은 Array 프로토타입을 상속받고 Array는 Object 프로토타입을 상속받습니다.

그래서 배열에서도 오브젝트 메서드들을 사용가능

 

객체의 최상위 프로토타입은 뭘로 끝나나요?

null이요

 

null vs undefined

널은 명시적으로 없다고 표현하는 거고 언디파인드는 선언 후에 할당이 안됐을 때 나옵니다.

 

프로토타입이 클래스랑 비슷한데, 다른 언어의 클래스와 JS 클래스의 차이점이 뭔가요?

자바는 프라이빗을 직접 명시하고 JS는 명시하는 게 없습니다

멘토님: 우리도 프라이빗 있어요

나: 그 클래스 자체에는 없지 않나요?

멘토님: 클래스 자체에 있다기보다는 이제 그냥 프라이빗 필드를 만들 수 있는 거죠

나: 그러면 잘 모르겠습니다.

멘토님: 신택스 슈가라고 하는데, 그냥 얘는 문법만 클래스처럼 보일뿐 내부적으로는 다 함수 생성이랑 프로토타입체이닝이랑 이런 걸로 만들어졌다고 보면 됩니다.

GPT

 

오버라이딩과 오버라이딩의 차이 아세요?

오버라이딩은 부모의 메서드를 덮어 씌우는 거고, 오버로딩은 같은 함수의 인자를 다르게해서 쓰는 겁니다.

 

Object.create랑 프로토타입으로 생성했을 때 차이점

생성자 차이입니다. 

Object.create로 생성하면 Constructior가 없음 (=생성자가 없음)

 

콘솔에 직접 찍어보면 확인 가능.

Object.create()로 만든 객체는 constructor가 없지만 new를 붙여서 만든 객체는 있음

 

프로미스의 세가지 상태는 뭔가요?

펜딩, 풀필드, 리젝티드 입니다

 

데브 디펜던시, 일반 디펜던시 차이

배포 전에 개발용에서만 사용하는 걸 데브 디펜던시에 설치합니다

용량을 줄여줍니다. (가볍게 돌아가라고)