분류 전체보기
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..
재귀(Recursion)
재귀(Recursion) 재귀는 간단하게 요약하면 어떤 함수가 자기 자신을 호출하는 순간을 의미한다. 조금 더 비유하자면 아래의 이미지와 같다. 재귀는 어떠할 때 사용하는게 좋을까? Google에 재귀함수 성능을 찾아보면 대부분의 사람들이 재귀함수 대신 for 반복문을 쓰는게 훨씬 효과적일 거라고 말한다. Stack이라는 메모리 공간을 이용하기 때문에 메모리의 제한이 있는경우 Stack overflow가 뜨면서 결국 답이 없는 상황까지 온다고 한다. 즉, 재귀함수는 메모리를 많이 먹고 반복문에 비해 느리다. 그런데도 쓰는 이유는 무엇일까? 1. 구조가 비슷한 주어진 문제가 더 작은 문제로 나뉘어 질 수 있는 경우 2. 중첩된 루프가 많거나 중첩의 정도를 미리 알 수 없는 경우 두가지로 나뉘게된다.. 재귀..
깊이 우선 탐색, 너비 우선 탐색
깊이우선 탐색(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) : 자식이 없는 노드로, 말단 혹은 잎..
연결리스트와 이중연결리스트(LinkedList Family)
연결 리스트(Linked List) 이름 그대로 연결 리스트이다. 각 데이터들을 줄로 매듭을 지어 묶어놓은 것처럼 데이터들 끼리 이어져 있다는 추상적인 이유로 연결 리스트라고 부른다. 이 데이터들은 동적이며, 이어주는 줄을 링크라고 부른다. 맨 앞의 노드를 의미하는 head와 맨 마지막노드는 tail이라는 구조로 이어져있다. 노드의 구조 연결리스트의 각 노드(node)는 두개의 필드가 존재한다. 값을 저장해줄 데이터 필드 : data 나 value등으로 불린다. 다음 노드의 주소를 담고있는 포인터 : next나 next link, pointer라고 불린다. 이런 연결리스트 구조는 쭉 나열되어 있는 배열의 구조와 다르게 다양한 공간에 흩어져있는 데이터들을 포인터로 이어주기만 하 면 된다. 처음 노드는 he..