-
Notifications
You must be signed in to change notification settings - Fork 13
the little guide of queue in javascrip
Yongkwan Lim edited this page Sep 26, 2019
·
1 revision
큐는 간단한 데이터 구조이다. 요소를 뒤쪽(tail)에서 추가 앞쪽(head)에서 삭제할 수 있다.
이 동작을 선입 선출 (First In First Out )이라고 한다.
큐는 선형(linear) 데이터 구조이다. 매우 중요한 개념은 가장 오래된 요소를 먼저 삭제한다는 것이다.
- 큐는 첫 번째 항목부터 순서대로 객체를 관리해야 할 때마다 사용된다.
- 예를들어 프린터의 문서 출력, 대기자들게 차례대로 응답하는 콜 센터 시스템등이 있다.
- 배열 또는 링크드 리스트 사용하여 큐를 구현할 수 있다.
자바스크립트에서는 shift 및 pop과 같은 배열 메서드를 사용할 수 있으므로 *큐**를 만드는 것은 매우 간단하다.
-
unshift
: 요소를 배열의 맨 앞에 추가한다. -
pop
: 배열의 마지막 요소를 제거한다.
먼저 가장 먼저 할 일은 빈 배열을 가진 큐 생성자 함수를 만드는 것이다.
function Queue() {
this.data = [];
}
this
는 우리가 만든 객체를 가리켜야 하기 때문에 사용한다는 것을 기억하라.
주요 메서드는 add와 remove가 있다.
Queue.prototype.add = function(record) {
this.data.unshift(record);
}
Queue.prototype.remove = function() {
this.data.pop();
}
추가로 3개의 보조 메서드를 추가한다.
Queue.prototype.first = function() {
return this.data[0];
}
Queue.prototype.last = function() {
return this.data[this.data.length - 1];
}
Queue.prototype.size = function() {
return this.data.length;
}
그러면 아래와 같은 결과를 얻을 수 있다.
const q = new Queue():
q.add(1);
q.add(2);
q.add(3);
console.log(q);
가장 오래된 요소는 1을 제일 먼저 추가했기 때문에 1이다.
못 믿겠으면 last 메서드를 사용하여 확인 할 수 있다.
console.log(q.first());
// -> 3
console.log(q.last());
// -> 1
또한 remove 메서드를 사용하면 가장 오래된 요소인 1이 제거된다.
q.remove();
console.log(q);
마지막으로 size 메서드를 호출한 결과는 아래와 같다.
console.log(q.size())
// -> 2
마지막 요소를 제거하고 호출했기 때문에 2가 반환된다.
완전한 예제: https://github.com/germancutraro/Queue-Data-Structure
일부 의역이 들어간 경우도 있으므로 해당 원문의 내용과 조금 다를 수 있습니다.
문제가 될 소지가 있다거나 혹은 수정이 필요한 사항이 있다면 있다면 issues 보내주세요.
기술문서
- 호출스택
- 원시자료형
- 값타입과 참조타입
- 명시적 변환, 암시적 변환, Nominal, 구조화, 덕 타이핑
- == vs === vs typeof
- 함수 범위, 블록 범위, 렉시컬(lexical) 범위
- 식(expression) vs 문(statement)
- IIFF, Modules, Namespaces
- 메세지큐와 이벤트루프
- setTimeout, setInterval, requestAnimationFrame
- 자바스크립트 엔진
- 비트 연산자, 형식화 배열, 버퍼(배열)
- DOM과 Layout Trees
- 팩토리와 클래스
- this, call, apply, bind
- new, 생성자, instanceof, 인스턴스
- 프로토타입의 상속과 체인
- Object.create와 Object.assign
- map, reduce, filter
- 순수함수, 부수효과, 상태변이
- Closure
- 고차함수
- 재귀
- 컬렉션과 생성기
- Promise
- async, await
- 자료구조
- 함수 성능과 빅 오 표기법
- 알고리즘
- 상속, 다형성, 코드의 재사용성
- 설계패턴
- 부분 어플리케이션, 커링, Compose, Pipe
- 클린코드