스택 (Stack)

스택 (Stack)

스택 (Stack)

- 스택은 박스 쌓기처럼 먼저 쌓은 박스를 마지막에 꺼낼 수 있다

- 이러한 구조를 선입 후출(First In Last Out / FILO) 혹은 후입 선출(Last In First Out) 구조라고 말한다

- 스택은 데이터를 일시적으로 저장하기위한 데이터 구조이다

- 스택에 데이터를 넣는 작업은 push, 스택에서 데이터를 꺼내는 작업은 pop이라고 말한다

- 박스쌓기와 같은 스택은, 데이터를 넣는 작업과 꺼내는 작업 모두 위쪽으로부터 수행된다

- JVM은 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다

- 그 중 메서드의 작업에 필요한 메모리 공간을 호출 스택이라고 부른다

- 자바의 내부에서 메서드를 호출하고 실행할 때 프로그램 내부에서는 스택을 사용한다

호출 스택(call stack)

- 호출 스택은 메서드의 작업에 필요한 메모리 공간을 제공한다

- 메서드를 호출하면, 호출 스택에 해당 메서드를 위한 메서드가 할당된다

- 메서드가 작업을 수행하는 동안 매개 변수, 지역변수 등과 연산의 중간 결과 등을 저장하는데 사용된다

- 그리고 메서드가 작업을 마치면 할당된 메모리 공간은 반환되어 비워진다

public class Test { public static void main(String[] args) { z(); } static void x() {System.out.println("x");} static void y() {System.out.println("y");} static void z() { x(); y(); } }

예제 코드를 통해 Java 프로그램에서 메서드를 호출하고 실행할하는 과정을 살펴보자. 그림으로 표현하면 아래와 같다.

- 가장 먼저 main 메서드가 호출 스택에 올라간다

- main 메서드에서 z 메서드를 호출하면, main메서드의 위에 z메서드가 올라간다

- z 메서드에서 또 다른 메서드인 x 메서드를 호출하므로, z 메서드의 위에 x 메서드가 push 된다

- x 메서드가 종료되면, x 메서드는 호출 스택에서 pop 된다

- 다시 z 메서드로 돌아가 다음 코드를 수행하는데, 이번에는 y 메서드가 z 메서드 위에 push 된다

- y 메서드가 종료되어 호출 스택에서 pop 되고, 다시 z 메서드로 돌아간다

- z 메서드도 종료되어 호출 스택에서 pop 되고, 호출 위치인 main 메서드로 돌아간다

- main 메서드 역시 종료되어 호출 스택에서 pop 된다

from http://dev-ku.tistory.com/244 by ccl(A) rewrite - 2021-12-08 03:28:06