FE BE 개발 메모장
async & await
async & await이란? 자바스크립트 비동기처리 방식은 처음에 callback방식을 썼었지만, 가독성이 떨어지고 콜백지옥에 쉽게 빠져 복잡한 코드가 되었기 때문에 그걸 개선한 Promise가 나오게 되었다. 그리고 최근에 Promise와 callback의 단점을 보완하여 나온 비동기처리 방식이 async와 await이다. async & await 기본문법 async 키워드는 항상 function 앞에 위치하여야한다. function 앞에 async가 붙으면 해당 함수는 항상 Promise를 반환하게 된다. async function funcName() { return 1; 또는 return Promise.resolve(1); } funcName().then(alert); // 1 프로미스가 아닌 값..
Promise
프로미스(Promise)란? 자바스크립트 비동기 처리에 사용되는 객체이다. 비동기 처리는 특정 코드의 실행이 완료될 때 까지 기다리지 않고, 다음 코드를 먼저 수행하는 자바스크립트의 특성을 뜻한다. 프로미스 3가지 상태 프로미스(Promise)를 사용할 때 반드시 알아야 하는 개념이 프로미스의 상태(states)이다. 이 상태는 프로미스의 처리 과정을 의미하는데, new Promise()로 프로미스를 생성하고, 종료될 때까지 3가지 상태를 갖는다. Pending(대기) : 비동기 로직이 아직 완료되지 않은 상태 new Promise() 메소드를 호출하면 대기 상태가 된다. new Pormise() 메소드를 호출하게 되면 콜백함수를 선언할 수 있고, 콜백함수는 reslove, reject 두 가지가 있다...
비동기 처리, 콜백함수
비동기처리란? 특정 코드의 연산이 끝날 때 까지 코드의 실행을 멈추지 않고, 순차적으로 다음 코드를 먼저 실행하는 자바스크립트의 특성(싱글스레드, 콜스택). 즉, 요청을 보낸 후 응답에 관계없이 다음 동작을 실행한다. 동기와 비동기의 차이점 동기(sync): 요청을 보낸 후 해당 응답을 받아야 다음 동작을 실행한다. 비동기(async: 요청을 보낸 후 응답에 관계없이 다음 동작을 실행한다. 비동기 처리를 위해서 사용하는 메소드중 대표적인 setTimeout()이 있다. Web API의 한 종류로 코드를 바로 실행하지 않고, 지정한 시간만큼 기다렸다가 로직을 실행한다. //5초후에 console.log를 띄움 setTimeout( () => { console.log('this is timer'); }, 5..
깊이 우선 탐색, 너비 우선 탐색
깊이우선 탐색(DFS, Depth-First Search) 루트 노드에서 시작해서 연결된 노드의 가지 하나의 최하단 노드까지 탐색 하고, 그다음 노드의 최하단까지 탐색한다. 전체적으로 깊게 탐색 한다고 해서 깊이 우선 탐색이라불린다. 특징 자기 자신을 호출하는 순환 알고리즘의 형태를 가지고 있다. 전위 순회(Pre-Order)를 보함한 다른 형태의 트리순회는 모두 DFS의 한 종류이다. 그래프 탐색의 경우 반드시 어떤 노드를 방문했었는지 여부를 반드시 검사해야한다. 그렇지 않을경우 무한루프에 빠질 위험이 있다. 너비우선탐색(BFS, Breadth-First Search) 루트 노드에서 시작해 탐색한 노드의 가장 인접한 노드들부터(좌우로) 먼저 탐색 한다음, 그 다음 자식 노드들을 넓게 탐색한다. 특징 직..
알고리즘의 기초 Big-O Notation과 복잡도(Complexity)
Big-O Notation Big-O는 알고리즘의 효율성을 나타내는 지표로서 알고리즘의 시간 복잡도와 공간 복잡도에 사용하며, 불필요한 연산들을 제거하고 알고리즘 분석을 쉽게 할 목적으로 사용된다. 시간복잡도와 공간복잡도 시간 복잡도(Time Complexity): 입력된 N의 크기에 따라 실행되는 조작의 수를 나타낸다. 공간 복잡도(Space Complexity): 알고리즘이 실행될 때 사용하는 메모리의 양을 나타낸다. 각 Big-O 표기법에 대한 시간복잡도(Time Complexity) Big-O는 다양한 실행시간이 존재하여, 다양하게 표현되지만, 가장 대표적인 표기법을 나열했다. O(1) 시간 복잡도 Constant time 입력 데이터의 크기에 상관없이 일정한 시간이 걸리는 알고리즘의 시간복잡도를..
자료구조 Graph
그래프(Graph) 단순히 노드(N, Node)와 그 노드를 연결하는 간선(E, edge)을 하나로 모아놓은 자료 구조이다. 연결 되어있는 객체 간의 관계를 표현할 수 있고, 여러개의 고립된 부분 그래프로 구성될 수 있다. 그래프의 특징 그래프는 네트워크 모델이다 2개 이상의 경로가 가능하다.(노드들 사이에 무방향/방향 또는 양방향 경로를 가질 수 있다) 루트 노드라는 개념이 없다 부모-자식 관계개념이 없다. 간선의 유무는 그래프에 따라 다르다. 그래프와 트리의 차이 그래프(Graph 트리(Tree) 정의 노드와 그 노드를 잇는 간선을 하나로 모아 놓은 자료구조 그래프의 한 종류 DAG(Directed Acyclic Graph, 방향성이 있는 비순환 그래프)의 한종류 방향성 방향 그래프(Directed)..
자료구조 Tree, BST
Tree 트리로 부르는 이유는 거꾸로 뒤집어 놓은 나무처럼 생겼다고 해서 불려진 이름이다. 트리의 특징. 그래프의 한 종류이다. 트리는 계층 모델이다. 트리의 순회는 Pre-oreder, In-order, Post-order로 이루어진다. 트리의 종류는 이진 트리, 이진 탐색 트리, 균형 트리, 이진 힙 등이 있다. 트리(Tree)의 구조 루트노드(Root Node) : 트리의 맨 위에 있는 노드로, 트리 당 단 하나의 루트만 있다. 부모노드(Parent Node) : 루트 노드를 제외하고, 간선으로 연결된 자식 노드 위의 노드를 부모노드라고 부른다. 자식노드(Child Node) : 특정 노드 아래로 연결된 노드를 자식 노드라 부른다. 단말노드(Leaf Node) : 자식이 없는 노드로, 말단 혹은 잎..