개발자라면 알아야 할 필수개념들

bebrain·2023년 3월 21일
0
  1. 시간복잡도와 공간복잡도

알고리즘의 성능을 판단하는 기준으로써 시간 복잡도는 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미합니다. 연산의 실행 횟수는 입력한 데이터의 개수를 의미하는 n에 따라 변하게 됩니다. 최악의 경우의 수로 가정하였을 때를 계산하는 방식을 표기한 것을 빅-오 표기법이라고 부릅니다. 공간복잡도는 작성한 프로그램이 얼마나 많은 공간(메모리)을 차지하느냐를 분석하는 방법입니다. 최근에는 컴퓨터 성능의 발달로 대용량 시스템이 보편화되면서 공간복잡도보다는 시간복잡도의 중요성이 강조되고 있습니다.

  1. 스택, 큐

스택(stack)이란 쌓아 올린다는 것으로 차곡차곡 쌓아 올린 형태의 자료구조를 의미합니다. 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을 수 있고, top으로 정한 곳을 통해서만 접근할 수 있습니다. 따라서 스택은 시간 순서에 따라 자료가 쌓여서 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO, Last-In-First-Out) 구조입니다.
큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어지는데, 이때 삭제연산만 수행되는 곳을 프론트(front), 삽입연산만 이루어지는 곳을 리어(rear)라고 하며 각각의 연산작업만 수행됩니다. 따라서 스택과 달리 데이터가 입력된 시간 순서대로 처리되는 선입선출(FIFO, First in first out) 구조입니다.

  1. 배열, 링크드리스트

배열은 입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조입니다. 메모리 상에서 연속적으로 저장되어 있는 특징을 갖기 때문에, index를 통한 접근이 용이합니다. 배열의 크기는 처음 생성할 때 결정하며 이후에는 변경할 수 없습니다.
반면 링크드리스트의 경우 여러 개의 노드들이 순차적으로 연결된 형태를 갖는 자료구조입니다. 메모리를 연속적으로 사용하지 않기 때문에 순차적 접근은 배열에 비해 불리하나 삽입, 삭제가 용이합니다.
따라서 빠른 접근이 요구되고 데이터의 수정이 적을 때는 배열을 사용하고 탐색 빈도가 적고 데이터의 수정이 많은 경우에는 링크드리스트를 쓰는 것이 유리합니다.

  1. CORS

브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한합니다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요합니다. 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절합니다. 이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS(Cross-Origin Resource Sharing)라고 부릅니다.
cross-origin이란 프로토콜, 도메인, 포트번호 중 한 가지라도 다른 경우를 말합니다.

  1. Promise

프로미스는 자바스크립트 비동기 처리에 사용되는 객체입니다. 여기서 자바스크립트의 비동기 처리란 ‘특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 자바스크립트의 특성’을 의미합니다.

  1. Hoisting

호이스팅은 코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것처럼 동작하는 것을 말합니다. 자바스크립트 엔진은 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는데(실행 컨텍스트를 위한 과정) 이 때 모든 선언(var, let, const, function, class)을 스코프에 등록합니다. 그래서 코드 실행 전 이미 변수선언/함수선언이 저장되어 있기 때문에 선언문보다 참조/호출이 먼저 나와도 오류 없이 동작합니다.

0개의 댓글