티스토리 뷰
자료구조 중 Stack을 자바의 제네릭을 이용하여 구현해보고 테스크 코드를 작성해보았다.
자바의 최상위 객체인 Object를 이용한 것인데 제네릭은 이를 이용하여 특정 자료형(ex:String)에 관한
Stack으로 사용할 수 있게끔 한다.
즉, Stack<String> stack = new Stack<String>(); 으로 Stack 객체를 만들고
stack.push("stack"); 와 같이 자료를 넣을 수 있다는 것이고,
stack.push(1); 처럼 선언시 지정한 엘리먼트와 다른 자료형을 코딩하게 되면 컴파일 에러가 나게 된다.
전체 코드는 다음과 같다.
public class Stack<Element> {
private int size;
private int top;
private Object buffer[];
public Stack() {
this(10);
}
public Stack(int size) {
this.top = -1;
this.size = size;
this.buffer = new Object[this.size];
}
public void push(Element number) {
top++;
if (top < size) {
buffer[top] = number;
} else {
size *= 2;
Object[] temp = buffer.clone();
buffer = new Object[this.size];
System.arraycopy(temp, 0, buffer, 0, temp.length);
buffer[top] = number;
}
}
@SuppressWarnings("unchecked")
public Element pop() {
if (top < 0) {
return null;
}
return (Element) buffer[top--];
}
}
=============================================
다음은 Stack 클래스에 대한 테스트 코드이다.
public class StackTest {
private Stack<Integer> integerStack;
private Stack<String> stringStack;
private Stack<Object> objectStack;
@Before
public void setUp() {
integerStack = new Stack<Integer>();
stringStack = new Stack<String>();
objectStack = new Stack<Object>();
}
@Test
public void 빈스택에서_팝하면_널() {
assertEquals(null, integerStack.pop());
}
@Test
public void 스택크기를_넘도록_푸시하고_팝() throws Exception {
for (int i = 0; i < 11; i++) {
integerStack.push(1);
}
for (int i = 0; i < 10; i++) {
integerStack.pop();
}
assertEquals(new Integer(1), integerStack.pop());
assertEquals(null, integerStack.pop());
}
@Test
public void 문자열_스택을_넣고_팝하면_스택() throws Exception {
stringStack.push("스택");
assertEquals("스택", stringStack.pop());
}
@Test
public void 객체도_반환() throws Exception {
Object obj = new Object();
objectStack.push(obj);
assertEquals(obj, objectStack.pop());
}
}
'공부 > Java, JSP' 카테고리의 다른 글
[자바] 은행 전산시스템 프로젝트 (0) | 2014.02.20 |
---|---|
[JSP Tag Library] id masking, count 태그 작성 (0) | 2014.02.18 |
String, StringBuffer, StringBuilder (0) | 2014.01.08 |
정렬 알고리즘 - command 패턴 및 리팩토링 적용 (0) | 2013.12.18 |
Sorting Algorithm (2) | 2013.12.06 |