JavaScript에서 Array 객체의 push() 메서드와 shift() 메서드를 사용하여 큐(Queue)처럼 사용할 수 있습니다.
큐(Queue)
큐(Queue)란, 한쪽으로 데이터를 넣고 다른 쪽으로 데이터를 가져오는 구조입니다.
큐의 모양을 빨대나 호스를 생각하시면 됩니다.
데이터를 추가한 순서대로 데이터가 저장되고 추가한 순서대로 데이터를 가져오게 됩니다. 즉, 가장 먼저 추가한 데이터가 가장 먼저 나오는 것을 FIFO(First In First Out)라고 합니다.
그리고 데이터를 넣는 쪽을 rear라고 하고 데이터를 가져오는 쪽을 front라고 하고 데이터를 넣는 것을 인큐(Enqueue), 데이터를 가져오는 것을 디큐(Dequeue)라고 합니다.
Array 객체의 push() 메서드와 shift() 메서드를 사용하여 큐(Queue)에 데이터 넣고 가져오기
var queue = [];
console.log(queue);
--> []
console.log(queue.length);
--> 0
// 데이터 넣기
queue.push("Data 1");
queue.push("Data 2");
console.log(queue);
--> (2) ['Data 1', 'Data 2']
console.log(queue.length);
--> 2
// 데이터 가져오기
var popData = queue.shift();
console.log(popData);
--> Data 1
console.log(queue);
--> ['Data 2']
console.log(queue.length);
--> 1
큐(Queue) 객체 생성하기
JavaScript에서 객체 생성하는 방법은 "JavaScript Object - 객체 생성"(https://carrotweb.tistory.com/184)를 참고하시기 바랍니다.
JavaScript의 Array 객체로 만들기 때문에 크기에 제한 없이 사용할 수 있습니다. 그래서 데이터를 계속 넣어도 오버플로(Overflow)가 발생하지 않습니다. 다음에 크기를 제한해서 만들어 보겠습니다.
function()으로 Queue 객체를 선언하겠습니다.
var Queue = function() {
// Array 객체 생성
this.queue = [];
// Push 함수 - 데이터 넣기
this.push = function(data) {
this.queue.push(data);
}
// Pop 함수 - 데이터 가져오기
this.pop = function() {
return this.queue.shift();
}
// Length 함수 - 스택 크기 가져오기
this.length = function() {
return this.queue.length;
}
// GetData 함수 - 지정된 인덱스에 있는 데이터 가져오기
this.getData = function(index) {
return this.queue[index];
}
}
데이터를 넣는 함수 명을 push가 아닌 enqueue(인큐)로 데이터를 가져오는 함수 명을 pop이 아닌 dequeue(디큐)로 사용하셔도 됩니다.
function()으로 선언된 큐(Queue)를 생성(new) 하겠습니다.
var queue = new Queue();
console.log(queue);
--> Queue {queue: Array(0), push: ƒ, pop: ƒ, length: ƒ, getData: ƒ}
console.log(typeof queue);
--> object
console.log(queue instanceof Object);
--> true
console.log(queue instanceof Queue);
--> true
생성된 큐(Queue)는 function()으로 생성되었기 때문에 console.log()로 출력하면 Array처럼 배열이 나오지 않고 함수가 나옵니다.
queue 객체의 프로토타입 체인(Prototype Chain)은 다음과 같습니다.
queue > Queue > Object
생성된 큐(Queue)에 데이터를 넣고 가져오겠습니다.
// 데이터 넣기
queue.push("Data 1");
queue.push("Data 2");
console.log(queue.length());
--> 2
// 데이터 가져오기
var popData = queue.pop();
console.log(popData);
--> Data 1
console.log(queue.length());
--> 1
getData 함수로 데이터를 가져오게 하겠습니다.
var queue = new Queue();
// 데이터 넣기
queue.push("Data 1");
queue.push("Data 2");
queue.push("Data 3");
console.log(queue.length());
--> 3
// 데이터 가져오기
var popData = queue.pop();
console.log(popData);
--> Data 1
console.log(queue.length());
--> 2
// 큐 데이터 가져오기
for (var index = 0; index < queue.length(); index++) {
var queueData = queue.getData(index);
console.log(queueData);
}
--> Data 2
--> Data 3
Queue 선언에 다양한 함수를 추가하여 사용해 보시기 바랍니다.