Algorithm/Linear

Stack이란 ?, Java Stack class 사용법 & 예제

Juwon2106 2022. 1. 19. 17:36
728x90

이번 포스팅에서 알아볼 내용은

Stack의 정의와 

Java Stack Class 사용 예제를 알아보겠습니다.

 

Stack 이란? ( 쌓다, 적재 ) 

후입 선출 ( Last In First Out : LIFO ) 특성을 가지는 자료구조( Data Stucture )라고 말합니다. 

입력 연산은 Push( 푸시 ), 출력 연산은 Pop( 팝 ), 조회 연산은 Peek( 픽 )이라고 부릅니다.

조회 연산시 데이터를 조회만 할 뿐, 순번( Index )은 변화시키지 않는 연산을 의미합니다.

( 선입선출 (First In First Out : FIFO)인 Queue와 비교되는 개념입니다. )

 

우리가 흔히 알고 있는 Undo( Ctrl + z ) 영역이 바로 Stack입니다.

 

가장 최근에 실행한 명령어를 취소해야하기 때문에 마지막에 들어간 자료가 먼저 나오는 구조가 효율적입니다.

 

Stack은 보통 크기를 고정하여 사용하기 때문에 크기를 다 사용하게 되면 넘치게 됩니다.

 

이에 대한 대처방안이 없으면 다른 메모리 영역을 침범할 수 있게 됩니다. 

 

이런 현상을 이용해 해킹하는 방법이 StackOverflow입니다.

 

Stack이라는 Data Structure는 프로세스( Process )를 구성하는 4개의 요소 중 하나이며, 함수의 호출에도 관여합니다.

 

Stack

 

Java Stack Class Method 

Stack<Integer> stack = new Stack();

int temp = 1;

// stack의 가장 위에 temp를 추가
stack.push(temp);

// return 1
stack.peek();

// return false
stack.isEmpty();


// Stack의 가장 윗 부분에 있는 요소를 제거
stack.pop();
  • pop() : Stack에서 가장 위에 있는 항목을 제거합니다.
  • push(Element) : Element를 Stack의 가장 윗부분에 추가합니다.
  • peek() : Stack에서 가장 위에 있는 Element를 반환합니다.
  • isEmpty() : Stack이 비어 있을 때에 true를 반환합니다.
  • size() : Stack의 크기를 출력합니다.
  • contains( Element ) : Stack에 Element가 있는지 여부를 반환합니다. 있으면 true 

 

Stack Class의 특징

 

Stack은 상황에 따라 Array보다 Stack에 Data를 저장하는 것이 적합할 때가 있습니다.

 

Array와는 다르게 Stack은 i번째 항목에 접근할 수 없습니다.

 

 

Stack의 사용 사례

  • 재귀 알고리즘 혹은 재귀적 함수를 호출할 때 사용
  • 브라우저의 뒤로 가기
  • 실행 취소
  • 역순 문자열 만들기
  • 수식의 괄호 검사 ( 올바른 괄호 문자열 판단하기 )
  • 후위 표기법 계산
  • 그래프의 깊이 우선 탐색( DFS )에서 사용

 

이번 포스팅에서는 자료구조 Stack에 대해 알아보았습니다.

728x90