[java] 스택의 데이터 타입 제한하기

스택은 자료 구조 중 하나로, 데이터를 쌓아놓는 역할을 하는 자료구조입니다. 스택에서는 데이터의 추가는 항상 가장 위에만 할 수 있고, 데이터의 삭제도 가장 위에서만 가능합니다. 자바에서는 기본적으로 제공되는 스택 자료구조인 java.util.Stack을 사용할 수 있습니다.

하지만 때때로 스택에 저장할 데이터의 타입을 제한하고 싶을 수 있습니다. 즉, 특정 클래스나 인터페이스를 상속받은 객체만 스택에 저장하고 싶을 경우가 있을 수 있습니다. 자바에서는 제네릭을 사용하여 스택의 데이터 타입을 제한할 수 있습니다.

아래는 java.util.Stack을 제네릭으로 사용하여 데이터 타입을 제한하는 예시입니다.

import java.util.Stack;

public class GenericStack<T extends Number> {
    private Stack<T> stack;

    public GenericStack() {
        stack = new Stack<>();
    }

    public void push(T item) {
        stack.push(item);
    }

    public T pop() {
        return stack.pop();
    }

    public boolean isEmpty() {
        return stack.isEmpty();
    }
}

위의 예시에서는 T extends Number라는 제약 조건을 지정하여, GenericStack 클래스에 저장되는 데이터 타입을 Number 클래스를 상속받은 타입으로 제한하고 있습니다. 이렇게 하면 GenericStack 객체를 생성할 때 Number 클래스를 상속받은 타입의 객체만 사용할 수 있습니다.

public static void main(String[] args) {
    GenericStack<Integer> stack = new GenericStack<>();
    stack.push(1);
    stack.push(2);
    stack.push(3);

    while (!stack.isEmpty()) {
        System.out.println(stack.pop());
    }
}

위의 예시에서는 GenericStack 객체를 생성할 때 Integer 타입을 사용하여 제한된 스택을 만들었습니다. 따라서 오직 Integer 타입의 객체만 스택에 저장할 수 있습니다.

제네릭을 사용하여 스택의 데이터 타입을 제한하는 것은 프로그램의 안정성을 높이고, 잘못된 데이터가 스택에 저장되는 것을 방지할 수 있습니다.

참고 자료: