[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
타입의 객체만 스택에 저장할 수 있습니다.
제네릭을 사용하여 스택의 데이터 타입을 제한하는 것은 프로그램의 안정성을 높이고, 잘못된 데이터가 스택에 저장되는 것을 방지할 수 있습니다.
참고 자료: