Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트(JavaScript) 스택에서 요소 엿보기(Peek) 구현 방법

자바스크립트로 간단한 스택(Stack) 클래스를 구현해 보겠습니다. 스택은 LIFO(Last In First Out, 후입선출) 구조를 가지는 대표적인 자료구조로, 가장 나중에 삽입된 요소가 가장 먼저 제거되는 특징이 있습니다.

스택 클래스 기본 구현

class Stack {
    constructor(maxSize) {
        // 최대 크기가 지정되지 않은 경우 기본값 설정
        if (isNaN(maxSize)) {
            maxSize = 10;
        }
        this.maxSize = maxSize;
        // 스택 값을 저장할 배열 초기화
        this.container = [];
    }

    // 개발 중 내용을 확인하기 위한 메서드
    display() {
        console.log(this.container);
    }

    // 배열이 비어 있는지 확인
    isEmpty() {
        return this.container.length === 0;
    }

    // 배열이 가득 찼는지 확인
    isFull() {
        return this.container.length >= this.maxSize;
    }

    push(element) {
        // 스택이 가득 찼는지 확인
        if (this.isFull()) {
            console.log("Stack Overflow!");
            return;
        }
        this.container.push(element);
    }

    pop() {
        // 비어 있는지 확인
        if (this.isEmpty()) {
            console.log("Stack Underflow!");
            return;
        }
        this.container.pop();
    }
}

위 코드에서 isFull 함수는 컨테이너의 길이가 maxSize와 같거나 그 이상인지 확인한 뒤 그 결과를 반환합니다. isEmpty 함수는 컨테이너의 크기가 0인지 검사합니다. 그리고 pushpop 함수는 각각 스택에 새 요소를 추가하고 기존 요소를 제거하는 역할을 담당합니다.

Peek 연산 추가하기

이번 섹션에서는 이 클래스에 PEEK(엿보기) 연산을 추가해 보겠습니다. 스택을 엿보기(Peek)한다는 것은 배열의 맨 위 값, 즉 가장 마지막에 삽입된 요소를 제거하지 않고 단순히 조회하는 것을 의미합니다. pop과 달리 스택의 상태를 변경하지 않으므로, 데이터를 확인만 하고 싶을 때 유용하게 사용됩니다.

peek 함수는 다음과 같이 구현할 수 있습니다.

peek() {
    if (this.isEmpty()) {
        console.log("Stack Underflow!");
        return;
    }
    return this.container[this.container.length - 1];
}

여기서 핵심은 this.container[this.container.length - 1] 부분입니다. 배열의 인덱스는 0부터 시작하므로, 전체 길이에서 1을 뺀 인덱스가 곧 스택의 맨 위(top) 요소를 가리킵니다. 또한 스택이 비어 있으면 조회할 요소가 없기 때문에 "Stack Underflow!" 메시지를 출력하고 종료하도록 처리했습니다.

동작 확인

다음 코드로 peek 함수가 정상적으로 작동하는지 확인할 수 있습니다.

let s = new Stack(2);
s.peek();
s.push(10);
console.log(s.peek());

출력 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

Stack Underflow!
10

첫 번째 줄은 스택이 비어 있는 상태에서 s.peek()을 호출했기 때문에 "Stack Underflow!"가 출력된 것이고, 두 번째 줄은 10을 push한 뒤 다시 peek을 호출했을 때 맨 위 요소인 10이 정상적으로 반환된 결과입니다.