2023년 6월 25일 일요일

[JAVA]자바 스택(Stack)과 Empty 상태에 대해 알아보기


이 포스트에서는 자바의 스택 자료구조와 빈 상태(Empty)에 대해 이해하고, 실제 예제를 통해 어떻게 활용하는지 알아보겠습니다. 또한, 스택이 비어 있는 경우를 안전하게 처리하는 방법을 학습하게 될 것입니다.


안녕하세요, 오늘은 자바에서의 스택(Stack)에 대한 내용을 공유하려 합니다. 특히 스택이 빈 상태(Empty)일 때 발생할 수 있는 상황과 대처법에 대해서 알아보도록 하겠습니다. 이 글을 통해 Stack과 관련된 개념을 철저하게 이해하고, 실제 코드 상황에서 어떻게 활용할 수 있는지 학습해 보시길 바랍니다.






스택(Stack)이란 무엇인가요?

스택은 자료구조 중 하나로, Last In First Out (LIFO) 원칙을 따릅니다. 즉, 가장 마지막에 들어간 데이터가 가장 먼저 나오는 형태를 가지고 있습니다. 그렇기 때문에 스택은 데이터의 추가와 제거가 한 쪽 끝에서만 발생하는 제한된 데이터 구조라고 볼 수 있습니다.

자바에서는 java.util.Stack 클래스를 통해 스택을 사용할 수 있습니다. 이 클래스는 push(), pop(), peek(), empty() 등의 메소드를 제공하여 스택의 동작을 제어합니다.




스택의 Empty 상태

스택이 비어있는 상태, 즉 Empty 상태란 스택 내에 아무런 요소도 없는 상태를 말합니다. 스택에서 pop() 혹은 peek() 메소드를 호출할 때, 스택이 비어있다면 EmptyStackException이 발생합니다. 이런 상황을 방지하기 위해 스택의 상태를 확인하는 것은 중요합니다. 자바의 Stack 클래스는 이를 위해 empty() 메소드를 제공합니다.

이제 실제 코드 예제를 통해 이해를 깊게 해보도록 하겠습니다.




예제 1: 스택 생성 및 데이터 추가

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Stack;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(10);
        stack.push(20);
        stack.push(30);
        // 출력: [10, 20, 30]
        System.out.println(stack);
    }
}
cs

위 코드는 Integer 형태의 Stack을 생성하고, 10, 20, 30을 순서대로 추가하는 예제입니다. 결과적으로 출력되는 스택은 [10, 20, 30]이 됩니다.




예제 2: 스택에서 데이터 제거

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Stack;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(10);
        stack.push(20);
        stack.push(30);
 
        // 스택의 top에 있는 데이터 제거
        Integer removed = stack.pop();
        // 출력: 30
        System.out.println(removed);
        // 출력: [10, 20]
        System.out.println(stack);
    }
}
cs

위 코드는 스택에서 데이터를 제거하는 과정입니다. pop() 메소드를 호출하면 가장 최근에 추가된 요소, 여기서는 30이 제거되며, 그 값을 반환합니다. 결과적으로 removed에는 30이, 스택에는 [10, 20]이 남게 됩니다.




예제 3: 스택의 상태 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Stack;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        // 스택이 비어있는지 확인
        // 출력: true
        System.out.println(stack.empty());
        stack.push(10);
        // 다시 확인
        // 출력: false
        System.out.println(stack.empty());
    }
}
cs

위 코드는 empty() 메소드를 활용해 스택이 비어있는지 확인하는 예제입니다. 처음에는 스택이 비어있으므로 true를 출력하며, 데이터를 추가한 후에는 false를 출력합니다.




예제 4: 스택이 비어있는 경우의 예외 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Stack;
import java.util.EmptyStackException;
 
public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        try {
            Integer removed = stack.pop();
        } catch (EmptyStackException e) {
            System.out.println("Stack is empty!");
        }
    }
}
cs

마지막으로, 스택이 비어있을 때 pop()을 호출하면 EmptyStackException이 발생합니다. 이를 try-catch문을 사용하여 예외를 처리하는 방법을 보여줍니다.


이렇게 스택과 Empty 상태에 대해 알아보았습니다. 실제 개발 상황에서는 스택이 비어있는지 확인하는 절차를 거치는 것이 중요합니다. 이를 통해 불필요한 예외 상황을 미연에 방지하고, 효과적인 코드를 작성할 수 있습니다.






댓글 없음:

댓글 쓰기

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

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