2023년 6월 25일 일요일

JAVA Stack에서 'empty'와 'isEmpty'를 이해하고 활용하기

JAVA의 Stack 클래스에서 제공하는 'empty'와 'isEmpty' 메소드를 깊게 이해하고 실제 활용하는 방법을 배워봅시다. 이 글에서는 두 메소드의 차이점, 기본적인 사용법부터, 괄호 매칭 등 실제 문제 해결에 활용하는 방법까지 다룹니다.


안녕하세요, JAVA에 관심이 많은 개발자 여러분. 오늘은 JAVA Stack 클래스의 두 중요한 메소드인 'empty'와 'isEmpty'에 대해 알아보겠습니다. 이 두 메소드는 Stack이 비어있는지 여부를 판단하는 데 사용되며, 다양한 상황에서 유용하게 사용될 수 있습니다.




Stack이란?

Stack은 LIFO(Last In, First Out) 원칙에 따라 동작하는 데이터 구조입니다. 이는 마지막에 추가된 요소가 가장 먼저 제거되는 원칙을 의미합니다. JAVA에서는 Stack 클래스를 제공하여 이러한 구조를 쉽게 구현할 수 있습니다.




empty 메소드 vs isEmpty 메소드

Stack 클래스의 'empty' 메소드와 'isEmpty' 메소드는 둘 다 Stack이 비어있는지 여부를 판단하는 데 사용됩니다. 그러나 두 메소드는 서로 다른 인터페이스에 속합니다. 'empty'는 Stack 클래스의 메소드이고, 'isEmpty'는 Stack 클래스가 구현하는 Collection 인터페이스의 메소드입니다.


두 메소드 모두 Stack이 비어있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 그러나 일반적으로 'isEmpty' 메소드가 더 일반적으로 사용되며, 'empty'는 하위 호환성을 위해 남겨진 것입니다.


이제 'empty'와 'isEmpty' 메소드를 활용하는 몇 가지 예제를 살펴보겠습니다.




예제 1: 기본적인 empty와 isEmpty 메소드의 활용

이 예제에서는 Stack 객체를 생성하고, 'empty'와 'isEmpty' 메소드를 활용하여 Stack의 상태를 출력하는 간단한 예제를 살펴보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Stack;
 
public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
 
        // Stack의 상태 출력
        System.out.println("Is the stack empty? (Using empty) " + stack.empty()); // true
        System.out.println("Is the stack empty? (Using isEmpty) " + stack.isEmpty()); // true
 
        // 요소 추가
        stack.push(1);
 
        // Stack의 상태 출력
        System.out.println("Is the stack empty? (Using empty) " + stack.empty()); // false
        System.out.println("Is the stack empty? (Using isEmpty) " + stack.isEmpty()); // false
    }
}
cs

이 코드에서는 Stack이 비어있는 상태에서 'empty'와 'isEmpty' 메소드를 호출하면 둘 다 true를 반환하고, 요소를 추가한 후에는 둘 다 false를 반환함을 확인할 수 있습니다.




예제 2: Stack과 empty, isEmpty를 활용한 괄호 매칭

이 예제에서는 'empty'와 'isEmpty' 메소드를 활용하여 문자열 내의 괄호가 올바르게 매칭되었는지 확인하는 알고리즘을 구현해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.Stack;
 
public class Main {
    public static void main(String[] args) {
        String str = "{()}[]";
 
        System.out.println(isBalanced(str)); // true
    }
 
    public static boolean isBalanced(String str) {
        Stack<Character> stack = new Stack<Character>();
 
        for(int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
 
            // 여는 괄호를 만나면 스택에 추가
            if(ch == '{' || ch == '[' || ch == '(') {
                stack.push(ch);
            } else { 
                // 닫는 괄호를 만나면 스택에서 제거하고 매칭 확인
                if(stack.empty()) {
                    return false// 스택이 비어있으면 매칭 실패
                }
 
                char top = stack.pop();
 
                if((top == '{' && ch != '}'|| (top == '[' && ch != ']'|| (top == '(' && ch != ')')) {
                    return false// 괄호가 매칭되지 않으면 실패
                }
            }
        }
 
        return stack.isEmpty(); // 모든 문자열을 확인한 후에도 스택이 비어있다면 괄호가 올바르게 매칭된 것임
    }
}
cs

이 코드에서 'empty' 메소드는 스택이 비어있는 상황에서 닫는 괄호를 만날 경우와, 모든 문자열을 확인한 후에도 여는 괄호가 남아있지 않는지 확인하는 데 사용됩니다.



JAVA Stack의 'empty'와 'isEmpty' 메소드에 대해 궁금증이 해결되었길 바랍니다. 다음 시간에는 더 심도 있는 JAVA에 대한 내용을 다루도록 하겠습니다. 감사합니다.

댓글 없음:

댓글 쓰기

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

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