팀원들과 알고리즘 코드리뷰 중 스택을 for 문으로 출력했을 때 값이 순서대로 나온다는 걸 알게 되었다.
원래 스택 자료구조는 LIFO 구조로 넣은 순서의 반대로 출력되는게 아닌가? 라는 궁금증으로 한 번 공부해 봤다.
궁금증이 생긴 코드는 이렇다.
Stack<Integer> stack = new Stack<>();
stack.push(3);
stack.push(5);
stack.push(8);
stack.push(10);
for (Integer temp : stack) {
System.out.println(temp + " ");
}
// 출력 : 3 5 8 10
스택을 사용할 때 보통 while 문을 사용하기에 반복문을 활용한 출력은 시도해본적이 없다.
하지만 출력해보니 저렇게 LIFO 가 아닌 앞에서부터 순서대로 출력이 되고 있었다. 이유가 뭘까? 궁금하여 알아보았다.
Stack은 vector 클래스의 자식 클래스이고
Vector 클래스는 AbstractList 의 자식 클래스이고
AbstractList 는 List 인터페이스를 구현한 클래스이다.
결론 : List -> AbstractList -> Vector -> Stack 제일 위로 올라가다 보면 List 가 보인다..



아니 List 인터페이스를 통해 Stack 이 만들어졌다는게 너무 놀랍다.
그래서 결국 List 에서 사용할 수 있는 메서드 들을 Stack 에서 사용할 수 있다는 것이다. 홀리몰리
그렇다면 Vector 클래스는 뭘까??
찾아본 바로는, ArrayList와 같이 List 인터페이스를 상속받는 컬렉션 프레임워크이며, 가변 개수의 배열이 필요할 때 과거에 사용되었다고한다. 이 후 지금은 ArryaList를 사용하고 있는 것이다.
자바를 공부하면 할수록 아주 잘 짜여진 우주를 탐험하는 기분이다. 놀랍기도하고 까마득하기도 한 것 같다.