코린이의 소소한 공부노트

메서드의 호출 스택 본문

Java

메서드의 호출 스택

무지맘 2022. 3. 5. 21:22

메서드 호출이 일어날 때 메모리 상황이 어떤지를 알려면, 스택이라는 것을 먼저 이해해야 한다.

 

[스택 vs 큐]

1. 스택(stack): Last In First Out, 줄여서 리포 LIFO. 마지막에 들어간 것이 먼저 나온다는 뜻 = 후입 선출

  - 컵과 같이 한쪽이 막혀 있고 다른 한쪽에 쌓아 올리는 것

  - 주로 막힌 곳을 아래, 열린 곳을 위로 표현

  - 스택에 추가를 할 경우 위로 쌓게 됨

  - 스택에서 제거를 할 경우 위에서부터 제거가 됨

2. 큐(queue): First In First Out, 줄여서 피포 FIFO. 먼저 들어간 것이 먼저 나온다는 뜻 = 선입 선출

  - 파이프처럼 양쪽이 뚫려 있는 형태

  - 주로 들어가는 쪽을 뒤, 나오는 쪽을 앞으로 표현

  - 큐에 추가를 할 경우 맨 뒤에 추가됨

  - 큐에서 제거를 할 경우 맨 앞에서부터 제거됨

# 주로 추가를 push, 제거를 pop으로 표현

 

스택이 무엇인지 이해가 됐으니, 메서드의 호출 스택에 대해 알아보자.

메서드의 호출 스택(call stack)이란 메서드 수행에 필요한 메모리가 제공되는 공간을 말한다. 메서드가 호출되면 호출 스택에 메모리를 할당하고, 종료되면 해제된다.

public static void main(String args[]){
    System.out.println("Hi!");
}

main 메서드에서 println 메서드를 호출하고 있다. 이때 메모리 상황을 그림으로 보면 다음과 같다.

1. 프로그램을 실행해 main 메서드가 스택에 쌓여 있는 상태

2. main 메서드에서 println 메서드를 호출하면 main위에  println이 쌓임. 이때 main은 대기 상태로 바뀌고, println은 실행 상태가 됨

3. println이 "Hi!"를 출력한 후 종료되면 스택에서 사라지고 다시 main이 실행 상태로 바뀌게 됨

4. 프로그램이 종료되면 스택도 사라짐

이 흐름을 보면 스택에서 아래 있는 메서드(main)가 위에 있는 메서드(println)를 호출한 것이 된다. 이때 아래 있는 메서드를 콜러(caller), 위에 있는 메서드를 콜리(callee)라고도 부른다.

'Java' 카테고리의 다른 글

스태틱/인스턴스 메서드  (0) 2022.03.07
메서드의 매개변수  (0) 2022.03.06
메서드의 생성(선언)과 사용(호출)  (0) 2022.03.04
선언 위치에 따른 변수의 종류  (0) 2022.03.03
클래스의 정의  (0) 2022.03.02