[TIL] 230913

jeongjwon·2023년 9월 13일
0

이론

목록 보기
4/19

자바스크립트

1. 자바스크립트는 무슨 언어인가요?
자바스크립트는 본래 스크립트 언어로 이미 존재하는 프로그램을 제어하기 위해 사용되는 언어입니다. 브라우저를 제어하기 위해 탄생한 언어입니다. 웹페이지에서 기본적인 구조를 HTML 이, 디자인을 CSS, 그리고 동작을 JavaScript 가 담당합니다. V8 엔진이 등장함에따라 자바스크립트의 속도를 향상시켰고, Node.js 가 등장함에 따라 웹 서버에서도 구축할 수 있게 되었습니다.


2. 변수 선언, 초기화, 할당의 차이점에 대해 설명해주세요.
변수 선언이란 let, const, var 키워드를 통해 자바스크립트 엔진에 변수 객체를 등록, 생성하는 것입니다.
다음으로 초기화는 자바스크립트 엔진에 등록한 변수의 메모리 공간이 생성되어 값이 없다면 undefined 로 초기화되고, 변수에 메모리 주소값이 저장되는 것입니다.
할당이란 undefined 로 할당된 변수나 이미 값이 들어있는 변수에 사용자가 원하는 값을 할당 연산자인 = 을 통해 변수에 값을 할당하는 것입니다.
변수 값 할당 단계는 선언 후 할당 할 수 있고, 선언과 할당이 동시에 이루어 질 수도 있습니다.


3. 데이터 타입에 대해 설명해주세요.
자바스크립트에서 데이터 타입은 프로퍼티를 여러 개 가질 수 있는지에 대한 여부에 따라 기본 타입과 객체타입으로 분류할 수 있습니다.
기본타입은 하나의 값만 가지며 값에 의한 호출 Call by Value 방식으로 동작합니다. 이 기본 타입에는 number, string, boolean, undefined, null등이 포함됩니다. undefined 와 null은 모두 값이 없음을 의미합니다. undefined 는 기본적으로 값이 아직 할당되지 않은 상태일 때의 값이고 null은 명시적으로 빈값임을 나타낼 때 사용합니다. typeof 함수에 의해 타입 변수를 확인하면 undefined 는 그대로 undefined 가 나오지만, null은 object 가 반환됩니다.
객체 타입은 여러 개의 프로퍼티를 가질 수 있고 참조에 의한 호출 Call by Reference 방식으로 동작하고 배열, 함수 등이 속합니다.

(https://velog.io/@argos_js/BegachuJavaScript%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90)

4. 생성자에 대해 설명해주세요.
생성자 함수는 자바스크립트에서 객체를 생성하기 위해 사용되는 함수입니다. new 키워드를 이용하여 객체를 생성할 수 있고, 오직 화살표 함수가 아닌 function 키워드를 사용해야합니다.

5. ⭐ this에 대해 설명해주세요.
생성자 함수 자기 자신을 호출한 객체를 의미합니다.

6. call, apply, bind에 대해 설명해주세요.
함수호출에 있어서 함수 뒤에 ()를 붙여 호출하는 방법과 call, apply, bind 가 있습니다.
call()의 매개변수에는 함수 호출에 제공되는 this 자기 자신의 객체 값과 두번째 매개변수는 호출할 함수의 인수들입니다. call 메서드는 호출 주체인 함수를 즉시 실행합니다.
apply()는 call 과 같이 즉시 실행하고 첫번째 인자로 this 함수 객체를 바인딩하지만 두번째 인자부터는 배열로 매개변수를 받습니다.
bind() 는 함수를 call 메서드와 매개변수는 같지만 즉시 실행하지 않고 넘겨 받은 인수를 바탕으로 새로운 함수를 반환하는 메서드입니다.

7. ⭐ 콜백 함수에 대해 설명해주세요.
매개변수로 함수 객체를 전달해서 호출 함수 내에서 매개 변수 함수를 실행하는 것을 말합니다. 파라미터로 일반적인 변수나 값을 전달하는 것이 아니라 함수 자체를 전달하는 것이 핵심입니다. 이 때 함수는 보통 일회용으로 사용하는 경우가 많아 코드의 간결성 때문에 이름이 없는 익명 함수 형태로 넣어주게 됩니다.
이는 자바스크립트가 일급 객체의 특성을 가지고 있기 때문에 undefined 와 Null 을 제외하고 모든 것을 객체로 다루어 함수 자체를 객체로서 전달이 가능한 것입니다.

8. ⭐ 콜백 지옥을 해결하는 방법을 설명해주세요.
콜백지옥이란 콜백함수를 익명함수로 전달하는 과정에서 반복적으로 콜백 안에 함수호출이 되면서 깊어지는 현상을 말합니다. 이는 이벤트 처리나 서버 통신과 같은 비동기 처리를 제어하기 위해 사용되는데 가독성이 떨어집니다.

콜백지옥, 즉 비동기를 제어하는 방법은 먼저 Promise 를 이용하는 방법입니다.
Promise 는 비동기적 함수를 호출하면 그 함수는 Promise 인스턴스를 반환하면서 대기 중인 promise 는 실패 혹은 성공으로 이어지면서 이행되거나 거부가 될 때 then 메서드를 통해 함수 실행 순서를 정할 수 있습니다. 따라서 대기열(큐)에 추가된 처리기들이 호출되어 콜백 지옥을 해결할 수 있습니다.

하지만 Promise 또한 코드가 길어지고 복잡할수록 가독성이 떨어지면서 Promsise Hell 이 발생할 수 있어 보완하기 위한 것이 바로 async await 키워드입니다. 함수 앞에 async 키워드를 사용해서 자동적으로 promise 를 반환하고 함수 내에서 await 키워드를 사용하여 동기적으로 처리할 수 있습니다.


9. ⭐ Promise에 대해 설명해주세요.


10. Promise.all() 에 대해 설명해주세요.

여러 개의 비동기 작업을 동시에 혹은 병렬적으로 처리하고 싶을 경우에 사용합니다.
Promise Chaining 을 이용하여 코드가 순차적으로 동작되면 같은 코드가 중복적으로 발생하게 되는데,
서로 의존 관계가 아닌 여러 프로미스들을 이터러블 객체에 담아 Promise.all 메서드를 이용하게 되면 한번에 병렬처리가 가능하게 됩니다. 그 중 하나라도 에러 rejected 발생하고 거부되고, 모두가 fullfilled 가 되면 결과값을 배열에 담아 새로운 프로미스를 반환합니다.


11. ⭐ Promise와 Callback를 비교 설명해주세요.


12. ⭐ Async, Await이 뭔지 그리고 사용 방법을 설명해주세요.


13. ⭐ Promise와 Async, Await의 차이를 설명해주세요.


14. AJAX에 대해 설명해주세요.
AJAX 는 Asynchronous Javascript And XML 의 약자로 비동기식 자바스크립트와 XML 을 말합니다. 자바스크립트를 이용해서 서버와 브라우저가 비동식으로 데이터를 교환할 수 있는 통신 기능을 말합니다. 비동기식 방식이란 웹페이지를 리로드하지 않고 데이터를 불러오는 방식으로 불필요한 리소스를 낭비하지 않는 장점이 있습니다. AJAX 를 통해 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest 객체를 통해 서버에 요청하기 때문에 JSON 이나 XML 형태로 필요한 데이터만 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있습니다.

15. ⭐ var, let, const 차이를 설명해주세요.
변수 선언 방식에 있어서 사용되는 키워드입니다.
var 로 선언한 변수는 동일한 이름으로 여러번 중복해서 선언이 가능합니다. 이의 경우 마지막에 선언된 변수에만 값이 할당되어 저장됩니다. 이는 필요할 때마다 변수를 유연하게 사용할 수 있다는 장점이 있지만, 기존에 선언해두었던 변수에 재할당함에 따라 문제가 발생할 수 있습니다.
이를 보완하기 위해 ES6 이후로 let 과 const 키워드가 등장하였고 두 키워드는 중복 선언이 불가능합니다.
이 둘의 차이는 바로 immutable의 여부입니다.
let 키워드는 변수 선언 및 초기화 이후에 반복해서 다른 값을 재할당 할 수 있습니다.
반면에, const 키워드는 재할당시 에러 메시지가 출력이 됩니다.

immutable 한 array 를 만들기 위해서는 spread 연산자를 이용하면 가능합니다.

16. TDZ에 대해 설명해주세요.
TDZ 란 Tmeporal Dead Zone 으로 일시적인 사각지대입니다. 변수를 선언하고 초기화하기 전 사이의 사각지대로 이 타이밍에 변수를 사용하게 된다면 TDZ 에서 사용하는 것이므로 ReferenceError 가 발생하게 됩니다.
TDZ 에 영향을 받는 구문은 const, let 변수, class 구문이 있고
영향을 받지 않는 구문으로는 var 변수, function, import 구문이 있습니다.
그렇기 때문에 영향을 받는 구문을 이용하여 사용할 때는 순서를 주의해서 사용해야하고 선언 전에 사용하지 않아야 합니다.

(https://velog.io/@soshin_dev/JS-JS%EC%9D%98-TDZ%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C)


17. 함수 선언형과 함수 표현식의 차이에 대해 설명해주세요.
함수 선언형이란 함수명이 정의되어 있고 별도의 할당 명령이 없는 것이고,
함수 표현식이란 정의한 function 을 별도의 변수에 할당하는 것입니다.

주요 차이점은 호이스팅에서 차이가 발생합니다.
함수 선언형은 함수 전체를 호이스팅하여 정의된 범위의 맨 위로 호이스팅되서 함수 선언 전에 함수를 사용할 수 있다는 것이고,
함수 표현식은 별도의 변수에 할당하게 되어 변수는 선언부와 할당부를 나누어 선언부만 호이스팅하게 됩니다.


18. ⭐ 이벤트 버블링과 캡처링에 대해 설명해주세요.
이벤트 버블링이란 한 요소에 이벤트가 발생하면 이 요소의 부모 요소의 이벤트도 같이 발생되는 이벤트 전파를 말합니다.
이벤트 캡처링은 버블링과는 반대로 최상위 태그에서 자식 요소의 이벤트도 같이 발생되는 이벤트 전파를 말합니다.

이벤트 전파가 아니라 단지 자식요소에만 혹은 부모요소에만 이벤트를 발생시키고 싶을 상황이 있을 경우에는 이벤트 전파 방지를 처리하는 방법이 있습니다. 바로 stopPropagation() 메서드를 사용하여 버블링 혹은 캡처링 설정에 따라 상위, 하위로 가는 이벤트 전파를 막을 수 있습니다. 각 요소를 클릭시 각 요소에만 이벤트 리스너가 동작됨을 알 수 있습니다.

추가적으로 stopImmediatePropagation() 메서드는 이벤트 전파와 더불어 형제 이벤트 실행을 중지합니다. 동일한 자식 요소의 이벤트 리스너가 여러 개일 경우 이벤트 전파 중지할 뿐만 아니라 형제 이벤트의 실행을 중지합니다. preventDefault() 메서느는 이벤트 전파 뿐만 아니라 기본 이벤트 동작 자체를 취소합니다. a 링크 기능이나 form 태그의 submit 이벤트를 취소할 때 유용합니다.

(https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90%EB%A7%81#%EB%B2%84%EB%B8%94%EB%A7%81_+_%EC%BA%A1%EC%B2%98%EB%A7%81_%EB%8F%99%EC%8B%9C_%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0)


19. ⭐ 이벤트 위임에 대해서 설명해주세요.
이벤트 위임이란 하위 요소마다 이벤트를 붙이지 않고 상위 요소에서 하위 요소의 이벤트들을 제어하는 방식을 말합니다. 위임을 사용하면 요소마다 핸들러를 할당하지 않고, 요소의 공통 조상에 이벤트 핸들러를 단 하나만 할당해도 여러 요소를 한꺼번에 다룰 수 있어 코드를 간결화할 수 있어 리소스를 효율적으로 관리할 수 있습니다.

(https://ingg.dev/event-delegation/#event-delegation)


20. 이벤트 위임의 동작 방식에 대해서 설명해주세요.


21. ⭐ 호이스팅과 발생하는 이유에 대해 설명해주세요.
호이스팅이란 변수나 함수의 호출 코드가 선언 코드보다 아래에 있음에도 불구하고 에러가 발생하지 않고, 마치 선언 코드가 호출 코드보다 더 위에 선언된 것고 같이 동작하는 특성을 말합니다.
ES6 버전 이상의 let과 const 변수에서는 사용할 수 없고 오직 var 변수에서만 발생합니다.
호이스팅이 발생하는 이유는 자바스크립트 엔진은 함수 선언문을 해석하고 변수를 초기화하고 코드를 실행하는 순서로 진행이 됩니다. 코드를 실행할 때는 이미 함수 선언문과 변수가 생성되어 있는 상태이기 때문에 변수를 찾아 어디에서든 함수나 변수를 호출할 수 있는 동작 방식입니다.


22. 스코프 (Scope)에 대해 설명해주세요.
스코프란 선언된 변수에 대해서 접근할 수 있는 유효한 범위를 말합니다.
계층적인 구조를 가지기 때문에 하위 스코프는 상위 스코프의 접근이 가능하지만, 반대로 상위 스코프는 하위 스코프에 접근할 수 없습니다.


23. 스코프 체인에 대해 설명해주세요.
스코프 체인이란 현재 스코프 레벨에서 변수가 존재하지 않는 경우 상위 스코프에서 찾는 것을 의미합니다. 과정은 스코프를 안에서 바깥쪽으로 내부 외부 전체로 단계적으로 탐색합니다.

24. ⭐ 클로져(Closure)에 대해 설명해주세요.


25. 실행 컨텍스트에 대해 설명해주세요.
실행 컨텍스트란 코드가 실행되기 위해 필요한 정보들을 가진 범위를 추상화하기 위해 객체형태로 나타낸 것을 말합니다. 자바스크립트 엔진은 해당 컨텍스트의 코드를 실행하는데 필요한 환경 정보들을 수집해서 실행 컨텍스트에 저장합니다.

🔗


26. 렉시컬 환경(Lexical Environment)에 대해 설명해주세요.
스코프를 결정하는 방식에 따라서 정적 스코프와 동적 스코프로 나뉩니다.
정적 스코프가 곧 렉시컬 환경으로 함수를 선언한 시점에서 스코프를 결정하는 방식을 말합니다. 함수가 중첩되어 있을 경우, 내부 함수 내에 해당 변수가 존재하지 않는 경우 상위 스코프에서 해당 변수를 찾습니다.

동적스코프란 함수를 호출한 시점에서 스코프를 결정하는 방식으로 런타임 도중에 실행 컨텍스트나 호출 컨텍스트에 의해 결정됩니다.

27. 자바스크립트에서 일어나는 데이터 형변환에 대해 설명해주세요.
자바스크립트는 느슨한 타입 언어 혹은 동적 타입 언어로 변수의 타입을 미리 선언할 필요없이 프로그램이 처리되는 과정에서 자동으로 파악되고 상황에 따라 값의 타입이 바뀔 수 있습니다. 또한 컴파일 과정 없이 실행과 동시에 해석을 하는 인터프리터 언어입니다.
형변환은 크게 명시적 형변환과 암시적 형변환으로 두 종류로 일어납니다.
명시적 형변환은 의도적으로 형 변환을 하는 것으로 주로 string, number, boolean 타입으로 이루어집니다.
암시적 형변환은 연산시 필요한 상황에 따라 형 변환이 일어납니다.

28. 자바스크립트가 동적 언어인 이유는 무엇인가요?
자바스크립트는 느슨한 타입 언어 혹은 동적 타입 언어로 변수의 타입을 미리 선언할 필요없이 프로그램이 처리되는 과정에서 자동으로 파악되고 상황에 따라 값의 타입이 바뀔 수 있습니다. 또한 컴파일 과정 없이 실행과 동시에 해석을 하는 인터프리터 언어입니다.
고정된 타입이 없어 같은 변수에 여러 타입의 값을 자유롭게 할당할 수 있습니다.
그렇기 때문에 유연성이 높고 개발 속도가 향상된다는 장점이 있지만, 타입 자동변환으로 타입 에러가 발생할 수 있고 오류가 날 경우 유지보수가 어려울 수 있습니다.


29. 프로토타입에 대해 설명해주세요.


30. 깊은 복사와 얕은 복사에 대해 설명해주세요.
먼저 복사에 대해 얘기 드리기 전에 자바스크립트에서 값은 원시값과 참조값으로 나뉩니다.
원시 타입의 값은 새로운 메모리 공간에 독립적인 값을 저장하고 참조타입은 메모리의 주소값을 참조합니다.
따라서 깊은 복사는 객체의 실제 값을 복사하는 것이고 얕은 복사는 객체의 주소값을 복사합니다.
큰 차이는 원본이 바뀌면 참조 타입은 복사본도 같이 변경되지만 원시 타입은 값을 저장하기 때문에 변경되지 않습니다.


31. 불변성을 유지하려면 어떻게 해야하나요?


32. Blocking과 Non-Blocking에 대해 설명해주세요.
블로킹과 논블로킹은 처리되어야 하는 작업이 전체적인 작업 흐름을 막는지에 대한 관점입니다.
블로킹은 요청한 작업을 마칠 때까지 계속 대기하고 return 값을 받아야 끝이 납니다.
논 블로킹은 요청한 작업을 즉시 마칠 수 없다면 즉시 return 하여 여러개의 IO 처리가 가능합니다.

어떻게 보면 동기와 블로킹이 비슷하고, 비동기와 논블로킹이 비슷해보입니다.
그렇지만 블로킹과 논블로킹은 호출되는 함수가 바로 리턴을 하는지 마는지에 대한 관점입니다.
호출된 함수가 자신의 작업을 모두 마칠 때까지 제어권을 넘겨주지 않고 대기하게 한다면 블로킹이고,
제어권을 넘겨주고 다른 일을 할 수 있는 기회를 주면 논블로킹입니다.

(https://velog.io/@wonhee010/%EB%8F%99%EA%B8%B0vs%EB%B9%84%EB%8F%99%EA%B8%B0-feat.-blocking-vs-non-blocking)

🎒


33. ⭐ 동기와 비동기에 대해 설명해주세요.

동기란 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것을 말합니다. 바로 요청시 시간이 얼마나 걸리던지 상관없이 결과값을 도출해야합니다. 이는 순서에 맞게 진행되는 장점이 있지만, 여러가지 요청을 동시에 처리할 수 없다는 단점이 있습니다.
반면에 비동기란 동시에 일어나지 않는 것 입니다. 하나의 요청에 따른 응답을 즉시 처리하지 않아도 그 대기 시간동안 다른 요청에 대한 처리가 가능합니다. 여러 개의 요청을 동시에 처리할 수 있어 자원을 효율적으로 사용할 수 있다는 장점이 있지만 동기방식보다는 속도가 떨어질 수 있습니다.


34. ES6에서 새로 생긴 기능을 아는대로 말씀해주세요.


35. undefined, null, undeclared를 비교해주세요.
말씀하신 용어는 모두 변수에 값이 없다는 점을 의미합니다.그치만 의미는 각각 다릅니다.
null은 의도적으로 변수에 null 을 할당하여 값이 없다는 것을 나타냅니다. typeof 키워드로 변수의 타입을 확인하면 object 로 타입은 객체로 비어있는 변수에 해당합니다.
undefined 는 변수를 선언하고 할당하기 전의 값이며 아직 변수에 할당되지 않은 상태로 타입이 결정되지 않은 변수입니다.
undelared 는 미선언변수로 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태입니다. 타입을 확인시 undefined 로 확인됩니다.

추가적으로 NaN 은 Not a Number 의 약어로 표현을 하지 못하는 수치형 결과를 나타냅니다. 이 속성은 값이 유효한 숫자가 아닌, 즉 컴퓨터로 표현할 수 없는 숫자값이라는 것입니다.


36. 자바스크립트를 멀티 쓰레드처럼 사용하는 방법이 뭔가요? / 자바스크립트에서 비동기


37. 로직이 어떻게 동작하는지 설명해주세요. (이벤트 루프)


38. 태스크 큐와 마이크로 태스트 큐에는 어떤 함수가 들어가나요?


39. requestAnimationFrame에 대해 설명해주세요.


40. 비동기적으로 실행되는 것을 동기적으로 코딩하는 방법이 있나요?


41. map과 forEach, reduce에 대해 설명해주세요.
map 메서드는 배열 내의 모든 요소를 각각에 대하여 주어진 함수를 호출한 결과를 가진 새로운 배열을 만들어냅니다.
forEach 메서드는 주어진 함수를 한번씩 각각의 배열 요소들에게 실행하는 것입니다.
reduce 메서드는 배열의 각 요소에 대해 주어진 reducer 함수를 실행하여 압축/축소하여 하나의 결과값을 반환합니다.


42. 자바스크립트의 메모리 관리에 대해 아는 대로 설명해주세요.


43. 클래스에 대해 설명해주세요.


44. 즉시 실행 함수 (IIFE)에 대해 설명해주세요.
즉시 실행함수는 immediately Invoked Function Expression 의 약자로 정의되지마자 즉시 실행되는 함수를 말합니다. 즉시실행함수는 소괄호로 함수를 감싸서 실행하는 문법을 사용하고 선언과 동시에 호출되어 반환되어 재사용할 수 없습니다. 그렇다고 즉시 실행 함수를 사용하는 이유는 즉시 실행함수로 선언하면 내부 변수가 전역에 저장되지 않기 때문에 필요없는 전역 변수의 생성을 줄여 전역 스코프의 오염을 줄일 수 있습니다. 그리고 외부에서 접근할 수 없는 자체적인 스코프를 가지기 때문에 내부 변수를 외부로부터 private 하게 보호할 수 있다는 장점이 있습니다.


45. 엄격 모드에 대해 설명해주세요.
엄격모드 strict ahemsms ES5 에 추가된 키워드로 묵인했던 에러 메시지를 발생시켜 엄격하게 문법 검사를 하겠다는 의미입니다.
엄격 모드를 실행시키기 위해서는 시작 혹은 함수 시갖 부분에 use strict 구문을 사용하여 문법과 런타임 동작을 모두 검사하여 실수를 에러로 변환시켜줍니다.

46. 콜 스택 (Call Stack)과 힙 (Heap)에 대해 설명해주세요.
자바스크립트 엔진은 콜스택 과 힙으로 두 가지 구성요소로 이루어져있다.
콜 스택은 실행 컨텍스트가 추가 혹은 제거를 통해 코드의 실행순서를 관리하는 스택 자료구조이다. 스택이기 때문에 선입후출이 된다.
힙은 콜 스택의 최상단에 있는 실행 컨텍스트가 실행되면서 참조되는 객체들이 저장되어 있는 메모리 공간이다.

🚨


47. Rest 연산자와 Spread 연산자에 대해 설명해주세요.

먼저, spread 스프레드 연산자는 배열이나 문자열과 같이 여러 개의 요소를 결합하거나 복사할 때 사용됩니다. concat 메서드를 대체할 수 있어 훨씬 간단하게 배열 복사가 가능합니다.
rest 연산자는 spread 연산자와 똑같지만 정확히 반대의 기능을 합니다. 여러 개의 배열을 확장시킨다면 rest 연산자는 하나로 압축시킵니다.


48. 제너레이터에 대해 설명해주세요.
제너레이터란 이터러블을 생성하는 함수입니다. 일반 함수와는 다르게 함수의 코드 블록을 일시 중지했다가 필요한 시점에 재시작할 수 있는 특수한 함수로 제너레이터를 반환할 수 있다. 제너레이터는 이터러블이면서 이터레이터인 객체이다.
function 키워드로 선언하고 하나 이상의 yield 문을 포함시켜 작성할 수 있다.


49. 이터러블과 이터레이터 프로토콜에 대해 설명해주세요.
이터러블은 반복할 수 있는 객체 이터레이터를 리턴하는 [Symbol.iterator]() 를 가진 값입니다.
이터레이터란 {value, done} 객체를 리턴하는 next() 를 가진 값인데, 이터레이터 프로토콜이란 이터러블을 for..of, 전개 연산자 등과 함께 동작하도록 한 규약입니다.

(https://velog.io/@kimjeongwonn/%EC%9D%B4%ED%84%B0%EB%9F%AC%EB%B8%94%EC%9D%B4%ED%84%B0%EB%A0%88%EC%9D%B4%ED%84%B0%EC%A0%9C%EB%84%A4%EB%A0%88%EC%9D%B4%ED%84%B0-%EB%B3%B5%EC%8A%B5)

타입스크립트

1. 타입스크립트를 사용하는 이유에 대해 설명해주세요.
기존에 쓰던 자바스크립트와는 다르게 정적이고 컴파일을 거쳐 자바스크립트로 변환되는 컴파일 언어입니다.
컴파일 과정에서 오류를 쉽게 잡을 수 있고, 바벨의 도움없이 브라우저 호환성 문제를 해결할 수 있습니다.
또한, 타입을 지정해주기 때문에 코드의 가독성과 퀄리티를 향상시킬 수 있습니다.


2. Type과 Interface의 차이점에 대해 설명해주세요.
타입과 인터페이스 모두 타입스크립트에서 객체의 타입, 함수의 타입 등을 정의하고 변수 타입이나 함수의 반환값을 지정하는데 사용될 수 있습니다.
타입은 기존 타입의 새 이름을 정의하는 방법이고, 인터페이스는 새로운 객체를 처음부터 정의합니다.
또한 인터페이스는 선언적 확장이 가능하지만 타입은 그렇지 않습니다.


3. 제네릭에 대해 설명해주세요.
제네릭이란 타입을 마치 함수의 파라미터처럼 사용하는 것을 의미합니다. 코드를 작성할 때 식별자를 포함해서 써서 아직 정해지지 않은 타입을 표시하고 런타임 때 타입을 명시하도록 합니다.
이는 한 가지 타입보다는 여러 가지 타입에서 동작할 수 있도록 하는데 사용이 되어 재사용이 높은 함수와 클래스를 생성할 수 있습니다. 오류 또한 쉽게 파악할 수 있다는 장점이 있습니다.


4. 제네릭 유틸리티 타입에 대해 설명해주세요.
먼저, 유틸리티 아비이란 이미 정의한 타입을 변환할 때 사용하는 타입 문법입니다.
특정 타입의 부분집합을 나타내는 Partial<T> 과 읽기전용인 Readonly<T>, 특정 타입에서 몇 개의 속성을 선택한 Pick<T>, 차집합을 나타내는 Omit<T,K> 타입이 존재합니다.

(https://velog.io/@ongddree/TIL-Typescript-%EC%A0%9C%EB%84%A4%EB%A6%AD-%EB%B0%8F-%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0-%ED%83%80%EC%9E%85)


5. 클래스의 Public, Private, Protected에 대해 설명해주세요.
클래스의 접근 제한자로 public, private, protected 를 지원합니다.
먼저 접근제한자를 명시하지 않았을 경우 타입스크립트에서는 public 로 지정됩니다.
pulbic 으로 선언되면 클래스 내부, 자식 클래스 내부, 클래스 인스턴스 모두 접근 가능합니다.
protected 는 클래스 내부와 자식 클래스 내부에서만 접근이 가능합니다.
private 같은 경우는 오직 클래스 내부에서만 사용가능합니다.
이런 접근 제한자들은 클래스의 메서드를 안전하게 은닉하기 위한 캡슐화를 위해 사용됩니다.


6. 클래스의 Static에 대해 설명해주세요.
클래스의 static 키워드는 정적 메서드를 정의합니다. 이는 별도의 인스턴스나 객체를 생성하지 않고도 클래스 내부의 함수 및 인자를 사용할 수 있습니다.

0개의 댓글