JavaScript
스택(Stack) 구현하기
히찔
2022. 5. 19. 19:18
스택(Stack) 이란?
- 스택은 자료구조형에 속한다.
- 먼저 들어간 자료가 나중에 나오는 후입선출 자료구조로, LIFO(Last In First Out)라고도 부른다.
- 데이터를 입력하는 push()와 데이터를 제거하는 pop() 등의 작업을 할 수 있다.
- ctrl+Z로 이전 작업을 취소하는 동작 등에서 사용된다.
Stack의 멤버변수
c언어로 스택을 구현할 때는 구조체(struct)를 사용하면 되지만, 자바스크립트에서는 구조체가 없어 class로 새로운 객체를 만들어 사용해 보자!
- size : 해당 스택의 max_size
- top : 해당 스택의 데이터 높이
- array : 데이터를 담을 배열
constructor(size){
this.size = size
this.top = 0
this.array = []
}
- size 를 생성자 인자로 받는다.
Stack의 기능들
stack을 구현하려면 총 3가지의 기능을 정의 해야 한다.
JavaScript는 이미 이 기능들을 모두 배열의 내장함수로 가지고 있다!
- pop() : 스택에서 가장 최근에 들어온 데이터를 방출하고 그 데이터를 return 하는 함수로 stack의 top이 0인데 pop인 경우 에러를 호출
- push() : 스택의 마지막에 데이터를 입력 하는 함수로 size보다 높다면 에러를 호출
- peek() : 스택의 마지막 데이터를 return 하는 함수
pop(){
let temp = this.array[this.top]
this.top--
return temp
}
push(item){
if(this.size > this.top){
this.top++
return this.array[this.top] = item
}else{
console.log(new Error("stack is full"))
}
}
peek(){
return this.array[this.top]
}
스택 구현하기
- 해당 클래스는 변수에 할당한 후 array.push() 로 사용하기 때문에 프로퍼티에 직접 영향을 미칠 수 있는 큰 단점이 있다.
- 그래서 캡슐화를 통해 멤버변수를 setting 하지 못하게 했다.
- 캡슐화를 하는 가장 큰 이유는 정보은닉 때문이다!
- 정보은닉이란 객체에 대한 구체적인 정보를 노출시키지 않도록 하기 위한 기법이다.
function Stack(max_size){
const size = max_size
let top = 0
let array = []
return{
pop(){
if(top==0){
console.log("stack is empty")
}else{
let temp = array[top]
top--
return temp
}
},
push(item){
if(size > top){
top++
return array[top] = item
}else{
console.log(new Error("stack is full"))
}
},
peek(){
return array[top]
}
}
}
let a = Stack(5)
a.push(1)
a.push(2)
a.push(3)
a.push(4)
a.push(5)
console.log(a.pop()) // 5
console.log(a.peek()) // 4
반응형