2023년 6월 25일 일요일

[Java]Stack: 이해와 활용

이 글에서는 프로그래밍에서 중요한 자료 구조인 스택에 대해 알아보고, 자바에서 스택을 어떻게 활용하는지를 설명합니다. 기본 개념부터 실제 활용 사례까지, 스택에 대한 이해를 돕습니다.




스택이란 무엇인가요?

스택은 데이터를 저장하는 데 사용되는 추상적인 자료 구조입니다. 이를 사용하여 데이터를 'push' (즉, 추가)하거나 'pop' (즉, 제거)할 수 있습니다. 스택은 'LIFO' (Last-In, First-Out) 구조를 가지며, 마지막에 들어간 데이터가 가장 먼저 나오는 방식을 따릅니다.

이것은 실생활의 많은 예와 비슷하게 동작합니다. 생각해보세요, 쌓여있는 접시들 중에서 가장 아래에 있는 접시를 먼저 가져가려면 어떨까요? 스택과 동일한 원리입니다. 접시는 맨 위에서부터 차례대로 제거됩니다.




자바에서의 스택

자바에서는 스택을 java.util.Stack 클래스를 통해 제공합니다. 이 클래스는 Vector 클래스를 확장하여 만들어졌으며, 객체를 동적 배열에 저장합니다. 이 클래스의 주요 메소드로는 push(), pop(), peek() 등이 있습니다.

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        // 스택 생성
        Stack stack = new Stack<>();

        // 데이터 추가(push)
        stack.push("Apple");
        stack.push("Banana");
        stack.push("Cherry");
        // 스택 : [Apple, Banana, Cherry]

        // 맨 위의 데이터 확인(peek)
        System.out.println(stack.peek());  // 출력 : Cherry

        // 데이터 제거(pop)
        System.out.println(stack.pop());  // 출력 : Cherry
        // 스택 : [Apple, Banana]
    }
}

위의 예제에서는 Stack 객체를 생성하고, push() 메소드를 사용하여 데이터를 추가합니다. peek() 메소드는 스택의 맨 위 데이터를 확인하고, pop() 메소드는 스택의 맨 위 데이터를 제거합니다.

 

 

 

스택의 활용

스택은 컴퓨터 과학과 프로그래밍의 다양한 영역에서 사용됩니다. 이를 몇 가지 예로 들면, '실행 취소' 기능, 페이지 뒤로가기 기능, 메모리 관리, 트리 및 그래프 탐색 알고리즘 등에서 스택이 사용됩니다.

// '실행 취소' 기능 구현 예제
Stack history = new Stack<>();

void write(String text) {
    history.push(text);
    System.out.println(text);
}

void undo() {
    if (!history.isEmpty()) {
        System.out.println("Undoing " + history.pop());
    } else {
        System.out.println("Nothing to undo");
    }
}

public static void main(String[] args) {
    Main editor = new Main();
    editor.write("Hello, ");
    editor.write("World!");
    editor.undo();  // Undoing World!
    editor.undo();  // Undoing Hello, 
}

위의 예제에서는 텍스트 에디터에 '실행 취소' 기능을 구현하였습니다. write() 메소드를 호출할 때마다 텍스트를 스택에 push()하고, undo() 메소드를 호출할 때마다 가장 최근에 쓴 텍스트를 pop()하여 '실행 취소' 기능을 구현하였습니다.




마무리

이 글에서는 자바에서의 스택에 대해 알아보았습니다. 스택은 LIFO 원칙에 따라 데이터를 저장하며, 이 원칙은 컴퓨터 과학과 프로그래밍의 많은 문제를 해결하는 데 도움이 됩니다. 스택은 단순해 보일 수도 있지만, 그 사용법과 활용은 다양하고 강력합니다. 그래서 스택은 프로그래머라면 반드시 알아야 할 기본 개념 중 하나입니다.

이제 여러분은 자바에서 스택을 어떻게 사용하는지 이해하고 있을 것입니다. 실제 프로그래밍 문제를 해결하는 데 이 개념을 어떻게 적용할 수 있는지 꾸준히 고민하고 연습하는 것이 중요합니다.

댓글 없음:

댓글 쓰기

Java Record: 간결하고 불변성을 가진 데이터 클래스를 만들기 위한 기능

Java 14부터 도입된 Record는 Java 프로그래밍에서 데이터 클래스를 간결하게 정의하고, 불변성을 가진 객체를 생성하는 데 도움을 주는 기능입니다. 이 블로그에서는 Java의 Record에 대해 소개하고, Record의 기능과 활용 방법에 대...