[LIFO / Stack class]

Last In, First Out!!!

스택 구조는 bottom에서부터 top으로 쌓이는 자료형 입니다. 그렇기 때문에 추가와 삭제가 제일 마지막 원소에서 이뤄집니다.

이는 자바스크립트에서 제공하는 내장 메서드 중에서 push와 pop이랑 같은 역할을 합니다.

아래는 WeakMap을 이용한 Stack 클래스입니다.

// 스택 클래스

const items = new WeakMap;
class Stack {
  constructor () {
    items.set(this, []);
  }

  push (element) {
    const s = items.get(this);
    s.push(element);
  }

  pop () {
    const s = items.get(this);
    const r = s.pop();
    return r;
  }

  peek () {
    const s = items.get(this);
    return s[s.length - 1];
  }

  size () {
    const s = items.get(this);
    return s.length;
  }

  isEmpty () {
    const s = items.get(this);
    return s.length === 0;
  }

  clear () {
    while (!this.isEmpty()) {
      this.pop();
    }
  }

  toString () {
    const s = items.get(this);
    return s.toString();
  }
}
  • WeakMap은 이곳에서 아주 자세히 소개하고 있으니 링크를 따라가 보세요. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

  • 부수적이지만 items를 WeakMap의 인스턴스로 만들면 스택 안의 데이터를 임의로 수정하거나 삭제할 수 없습니다. Symbol()을 활용 및 참조하여 private하게 만들 수도 있지만 그렇게 되면 데이터를 들여다보고 수정 및 삭제가 가능하므로 WeakMap을 사용합니다.

  • const items = Symbol('items'); this[items] = []의 형태로 사용이 가능합니다.

+ Recent posts