Stack

  • 데이터를 제한적으로 접근할 수 있는 구조
    • 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조
  • 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조
    • 큐 : FIFO 정책
    • 스택 : LIFO 정책



스택 구조

  • 스택은 LIFO(Last In, First Out) 또는 FILO(First In Last Out)데이터 관리 방식을 따름
    • LIFO : 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책
    • FILO : 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책
  • 대표적인 스택의 활용
    • 컴퓨터 내부의 프로세스 구조의 함수 동작 방식
  • 주요 기능
    • push() : 데이터를 스택에 넣기
    • pop() : 데이터를 스택에서 꺼내기



스택의 장단점

  • 장점
    • 구조가 단순해서 구현이 쉽다.
    • 데이터 저장/읽기 속도가 빠르다.
  • 단점
    • 데이터 최대 갯수를 미리 정해야 한다.
    • 저장 공간의 낭비가 발생할 수 있음
      • 미리 최대 갯수만큼 저장 공간을 확보해야 함
  • 스택은 단순하고 빠른 성능을 위해 사용되므로 보통 배열 구조를 활용해서 구현하는 것이 일반적임. 이 경우 위에서 열거한 단점이 있을 수 있음



Stack 사용해보기

- JAVA ArrayList 클래스를 활용해서 스택을 다루는 push,pop 기능 구현
- pop 호출 시 스택에 데이터가 없을 경후 null을 리턴하도록 함
- 다양한 데이터 타입을 다룰 수 있도록 Java 제너릭 타입 문법 활용


MyStack.java

package pack_stack;

import java.util.ArrayList;

public class MyStack<T> {

	private ArrayList<T> stack = new ArrayList<T>();
	
	public void push(T item) {
		
		stack.add(item);
	}
	
	public T pop() {
		
		if (stack.isEmpty()) {
			
			return null;
		}
		
		return stack.remove(stack.size()-1);
	}
	
	public boolean isEmpty() {
		
		return stack.isEmpty();
	}
	
	public static void main(String[] args) {
		
		MyStack<Integer> ms = new MyStack<Integer>();
		
		ms.push(1);
		ms.push(2);
		System.out.println(ms.pop());
		ms.push(3);
		System.out.println(ms.pop());
		System.out.println(ms.pop());
		
	}

}



결과

2
3
1

Leave a comment