Stack의 구조를 더욱 자세히 이해하기 위해 클래스를 직접 구현하고자 하였다.
때문에 직접 구현한 ArrayList를 상속받아서 Stack을 구현하고자 한다.
모든 메서드를 직접 구현하지 않고 주요 메서드 몇 개만 구현하였다.
class MakeStack<E> {
private MakeArrayList<E> stack; // 스택
// 생성자
public MakeStack() {
stack = new MakeArrayList<>();
}
// System.out.println 에서는 toString 이 돼 있어 정상출력 되지만
// 해당 클래스는 본인이 임의로 만든 것 이기 때문에 별도의 메소드를 만들어 toString화 해 준다.
public String toString() {
return stack.toString();
}
// 값 추가(add)
public void add(E data) {
stack.add(data);
}
// 값 하나 조회(peek)
public E peek(){
return stack.get(stack.size() - 1);
}
// 값 하나 삭제(pop)
public E pop() {
if (stack.isEmpty()) {
System.out.println("데이터가 없습니다.");
return null;
}
int lastIndex = stack.size() - 1;
return stack.remove(lastIndex);
}
// 전체 삭제(clear)
public void clear(){
if (stack.isEmpty()){
System.out.println("데이터가 없습니다.");
} else {
stack.clear();
}
}
class MakeStack<E> {
private MakeArrayList<E> stack; // 스택
// 생성자
public MakeStack() {
stack = new MakeArrayList<>();
}
// System.out.println 에서는 toString 이 돼 있어 정상출력 되지만
// 해당 클래스는 본인이 임의로 만든 것 이기 때문에 별도의 메소드를 만들어 toString화 해 준다.
public String toString() {
return stack.toString();
}
// 값 추가(add)
public void add(E data) {
stack.add(data);
}
// 값 하나 조회(peek)
public E peek(){
return stack.get(stack.size() - 1);
}
// 값 하나 삭제(pop)
// 데이터가 없을 경우 null과 "데이터가 없습니다." 반환하기때문에
// 예외발생 여부가 없다.
public E pop() {
if (stack.isEmpty()) {
System.out.println("데이터가 없습니다.");
return null;
}
int lastIndex = stack.size() - 1;
return stack.remove(lastIndex);
}
// 전체 삭제(clear)
public void clear(){
if (stack.isEmpty()){
System.out.println("데이터가 없습니다.");
} else {
stack.clear();
}
}
}
public class MakeStackMain {
public static void main(String[] args) {
MakeStack<Object> stack = new MakeStack<>();
// add Test
for (int i = 0; i <= 10; i++) {
stack.add(i);
}
System.out.println("add Test : " + stack);
// peek Test
System.out.println("peek Test : " + stack.peek());
// pop Test
System.out.println("pop Test : " + stack.pop());
System.out.println("pop Test : " + stack);
// clear Test
stack.clear();
System.out.println("clear Test : " + stack);
}
}
add Test : [0,1,2,3,4,5,6,7,8,9,10]
peek Test : 10
pop Test : 10
pop Test : [0,1,2,3,4,5,6,7,8,9]
clear Test : []