본문 바로가기
개발일지 Dev Diaries/회고 Retrospective

[TIL] (22.07.22) 타입스크립트를 쓰는 이유, 모듈, Node.js, npm,자바스크립트 데이터 타입, 배열과 연결리스트

by 이땡칠 2022. 7. 22.

새로 정리한 개념

1. 타입스크립트를 쓰는 이유

1) 데이터 타입을 엄격하게 지켜주기 위해 사용한다.

자바스크립트는 다이나믹 타이핑을 제공하는 언어이기 때문에 데이터 타입을 알아서 변경하는 경우가 있고, 오류를 발생시키는 경우가 있다.

 

2) 타입을 체크하기 때문에 명확한 에러 메시지를 받을 수 있다.

자바스크립트는 에러메시지가 추상적인 경우가 많은데 비해, 타입스크립트는 ‘여기 숫자가 들어와야 하는데 문자가 들어왔다’라던지 오타 교정 등의 작업을 수행한다.

 

2. 모듈 

모듈은 애플리케이션을 구성하는 개별 요소로, 파일 단위로 분리되어 있다.

모듈은 대개 클래스 하나 혹은 특정한 목적을 가진 복수의 함수로 구성된 라이브러리 하나로 구성된다.

모듈은 아래와 같은 이유로 사용한다.

  • 유지보수성 : 기능들이 모듈화가 잘 되어있다면, 의존성을 그만큼 줄일 수 있기 때문에 어떤 기능을 개선한다거나 수정할 때 훨씬 편하게 할 수 있다.
  • 네임스페이스화 : 자바스크립트에서 전역변수는 전역공간을 가지기 때문에 코드의 양이 많아질수록 겹치는 네임스페이스가 많아질 수 있다. 그러나 모듈로 분리하면 모듈만의 네임스페이스를 갖기 때문에 그 문제가 해결된다.
  • 재사용성 : 똑같은 코드를 반복하지 않고 모듈로 분리시켜서 필요할 때마다 사용할 수 있다.

 

자바스크립트에선 모듈을 개발하기 위한 여러가지 시도들이 있었는데(CommonJS, AMD, UMD 및 ES6 등) 가장 익숙한 것은 ES6 방식이다. 

  • import 와 export 구문 사용
  • default 의 유무 : export 를 사용할 때는 named export 와 default export 를 사용할 수 있다. 단, default export는 모듈 내에서 한번만 사용할 수 있고 named export는 여러번 사용할 수 있다. default export로 내보내면 import 에선 내보낸 이름 그대로 바로 사용할 수 있지만, named export로 내보내면 {} 로 묶어서 불러와야 한다.
  • 별칭 : as 를 사용하여 별칭 지정 가능
  • 와일드카드 : * 를 사용하여 한번에 불러오거나 내보낼 수 있다.

 

3. Node.js & npm 의 개념

Node.js

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임이다.

런타임이란 프로그래밍 언어가 구동되는 환경을 말한다. 

Node.js는 비동기 이벤트 기반, Non-Blocking I/O 모델을 사용해 가볍고 효율적이다.

 

 

npm

자바스크립트 프로그래밍 언어를 위한 패키지 관리자이다. 자바스크립트 런타임 환경 Node.js의 기본 패키지 관리자 입니다. Node.js에서 사용할 수 있는 모듈들을 패키지화하여 모아둔 저장소 역할을 하고, 패키지 설치 및 관리를 위한 CLI(Command line interface)를 제공한다.

 

 

 

 

기술면접 준비

Q. undefined 와 null 의 차이점을 설명해주세요

A.

 

먼저. undefined은 변수를 선언하고 값을 할당하지 않은 상태를 의미하고, null은 변수를 선언하고 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용되는 값이라는 점에서 차이가 있습니다.

 

두번째는 typeof 로 확인하는 자료형의 차이가 있습니다. 값을 할당받지 않은 변수의 자료형은 undefined 이지만, null 값을 가지고 있는 변수의 자료형은 object 로 반환됩니다. null의 타입이 object 로 반환되는 것은 자바스크립트의 첫 번째 버전의 버그라고 합니다. 그렇지만 기존 코드에 영향을 줄 수 있기 때문에 아직까지 수정되지 못하고 있다고 합니다. 

 

세번째는 null 은 함수의 반환값에 사용될 때가 있다는 점입니다.

null 은 함수가 유효한 값을 반환할 수 없는 경우에, 그 함수가 반환하는 값으로 사용되기도 합니다.

 

 

[+] typeof null 에 대한 자세한 설명

https://curryyou.tistory.com/183

 

[JS] 자바스크립트 null은 객체? 기본 타입! (typeof null)

# 자바스크립트 null? 자바스크립트의 null은 '의도적으로 값이 없음'을 명시하기 위한 기본 데이터 타입이다. 타입도 null이며, 값도 null인 Primitive Type이다. 즉, null은 객체가 아니다!(기본 타입이다!

curryyou.tistory.com

[+] undefined 에 대해 자세한 설명

  • var 키워드로 선언된 변수는 실행 컨텍스트 객체에 등록(즉, 렉시컬 횐경 등록, 즉, 실행컨텍스트의 렉시컬 환경이라는 객체 형태의 자료구조, 스코프에 등록)과 동시에 초기화 단계도 진행한다. 초기화 단계에서는 등록된 변수를 위한 메모리 공간을 확보한다. 이 단계에서 undefined로 초기화된다.
  • let 키워드로 선언된 변수는 실행 컨텍스트 객체에 등록되고 소스코드가 실행후 선언문을 만났을 때 비로소 undefined로 초기화된다. 즉, 변수를 위한 메모리 공간을 확보한다. 그리고 할당 단계에서 undefined로 초기화된 변수에 실제 값을 할당한다.

 

Q. Array과 LinkedList 을 설명해주세요. (특징 / 장단점 / 사용하면 좋을 데이터 예시)

A.

배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조입니다.

한편, 연결리스트는 여러 개의 노드들이 순차적으로 연결된 형태를 갖는 자료구조이며, 배열과는 다르게 메모리를 연속적으로 사용하지 않습니다. 

 

 

배열은 메모리상에서 연속적으로 저장되어 있는 특징을 갖기때문에, index를 통한 빠른 접근이 가능하다는 장점이 있지만, 삽입과 삭제가 오래걸리고 배열 중간에 있는 데이터가 삭제되면 공간 낭비가 발생한다는 단점이 있습니다. 배열은 빠른 접근이 요구되고, 데이터의 삽입과 삭제가 적을 때 사용하는 것이 좋습니다.

 

연결리스트는 삽입과 삭제가 용이하다는 장점이 있지만, 각 노드가 데이터와 다음 노드를 가리키는 포인터로 이루어져 있어 처음부터 탐색을 진행해야 한다는 단점이 있습니다. 연결리스트는 삽입과 삭제 연산이 잦고, 검색 빈도가 적을 때 사용하는 것이 좋습니다.

 

 

 

[+] 연결리스트 부가 설명

이중 연결리스트

이중연결리스트의 노드는 데이터, 이전 노드의 주소와 다음 노드의 주소를 저장하게 되어, 앞에 말한 연결리스트(단순 연결리스트)와 다르게 전, 후로 탐색이 가능한 구조입니다.

장점으로는 단순 연결리스트에서는 최악의 경우 n번의 탐색을 해야하지만, 이중 연결리스트에서는 얻고자 하는 데이터의 위치가 tail에 가깝다면 tail에서 부터 역방향으로 탐색이 가능하기 때문에 탐색 시간을 줄일 수 있습니다.

 

원형 연결리스트

원형 연결리스트는 단순 연결리스트의 마지막 노드가 null이 아닌 처음 노드를 가리키는 자료구조입니다.

즉, head에서부터 순회를 반복적으로 진행하다보면 다시 처음으로 돌아오는 구조입니다. 이중 연결리스트도 마지막 노드가 처음 노드를 가리키는 구조가 되면, 이를 이중 원형 연결리스트라고 합니다.

 

 

 

댓글