자료구조 with 자바

준비중..

자료구조 with 자바

데이터를 효율적으로!

06 스택(stack)

# 스택(stack) <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/opqs6alITOs" frameborder="0" allowfullscreen></iframe> </div> ## 목차 1. 스택이란? 2. 장점 3. 특징 4. 사용 예 5. 구현 + 명세 + 설계 + 코드 ## 1. 스택이란? 스택이란 가장 마지막에 넣은 자료가 가장 먼저 나오는 특징(LIFO: last in first out)을 가진 자료구조이다. ![](https://i.imgur.com/CMnwFY3.png) ## 2. 장점 스택은 히스토리 역추적에 최적화 되어있다. 가장 최근에 일어난 이벤트부터 가장 이전에 일어난 이벤트 관리 시 스택을 사용하면 수월하다. 문서 작업시 빈번히 사용하는 실행 취소(Undo) 및 복구(Redo)의 경우를 스택의 적용 예로 들 수 있다. ## 3. 특징 스택은 탑(top)이라 하는 한쪽 끝에서 모든 삽입(push)과 삭제(pop)가 이루어진다. 쌓아 올린 동전을 생각하면 이해가 쉽다. 무너지지 않은 채, 동전을 쌓거나 내리려면 제일 윗 부분에서 작업을 해야 한다. ![Imgur](https://i.imgur.com/24L1JNs.png) ## 4. 사용 예 메소드 호출과 복귀는 스택을 통해 관리된다. 프로그램의 호출과 복귀는 가장 나중(last)에 호출된 함수가 가장 먼저(first) 실행을 완료하고 복귀한다. 이때 사용하는 스택을 시스템 스택이라 한다. 다음 코드를 예로 시스템 스택의 동작 흐름을 확인해보자. ``` public class MainTest { public static void main(String[] args) { System.out.println("Hello"); printJava(); System.out.println("World"); } public static void printJava() { System.out.println("Java"); } } ``` 위 소스코드의 결과는 아래와 같다. ``` Hello Java World ``` JVM은 메소드 호출 시 수행에 필요한 지역변수, 매개변수, 수행 후 복귀 주소 등의 정보를 시스템 스택에 삽입한다. 시스템 스택의 top은 현재 실행중인 메소드이다. 메소드 수행이 완료되면 top 원소는 제거되고 새로운 top의 메소드의 복귀주소로 실행흐름이 넘어간다. 이러한 과정을 반복하여 전체 프로그램 수행이 종료되면 시스템 스택은 공백이 된다. ![Imgur](https://i.imgur.com/9W6ah8H.png) ## 5. 구현 스택을 구현해보자. ### 5.1 명세서 스택의 명세서는 다음과 같다. + 요소를 삽입(push)하고 꺼낼(pop) 수 있다. + 마지막에 넣은 요소가 가장 먼저 나오게 된다. (Last In First Out) + 스택이 가득찬(full) 경우 요소를 삽입 할 수 없다. + 스택이 비어있는(empty) 경우, 요소를 꺼내올 수 없다. ### 5.2 설계 명세서를 기반으로 클래스 다이어그램을 설계한다. ![Imgur](https://i.imgur.com/1QXBodC.png) ### 5.3 코드 코드는 아래의 실습 문제를 통해 연습해보자.

Challenge

개념 실습! 학습 내용을 진짜 내 것으로 만들기!