-
스택(Stack) 구현하기JavaScript 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
반응형'JavaScript' 카테고리의 다른 글
Object Method (0) 2022.05.24 Object (객체) (0) 2022.05.24 String Method (0) 2022.05.13 제어문 (조건문, 반복문, 분기문) (0) 2022.05.13 논리 연산자 (0) 2022.02.21