자바 함수 호출과 스택 메모리

자바 내에서 로직이 어떻게 수행되는지 알아봐요.

함수 호출과 스택 메모리

스택(Stack)

여기서 말하는 스택은 함수가 호출될 때 지역 변수들이 사용하는 메모리에요. 운영체제를 공부하셨다면 메모리 공간을 코드, 데이터, BSS(초기화 안된 정적, 전역 변수), 힙, 스택으로 구성되었단걸 아실겁니다. 그 스택Stack을 말하는 거에요. 스택은 함수의 수행 또는 지역변수 범위가 끝나면 자동으로 반환되요.

전개 방식

우선 아래 코드를 기준으로 설명드려요.

public class FunctionTest {

    public static int addNum(int n1, int n2){
        int result;
        result = n1 + n2;
        return result;
    }

    public static void sayHello(String greeting){
        System.out.println(greeting);
    }

    public static int calcSum(){
        int sum = 0;
        for(int i = 0; i <= 100; ++i){
            sum += i;
        }
        return sum;
    }

    public static void main(String[] args){
        int num1 = 10;
        int num2 = 20;

        int sum = addNum(n1, n2);
        System.out.println(total);

        sayHello("하이여");

        total = calcSum();
        System.out.println(total);
    }
}

해당 코드가 수행하는 로직, 그 중 addNum 함수를 수행하는 동안 메모리 공간의 변화는 아래와 같아요.

부연 설명을 하자면, 처음에 main() 함수가 사용할 메모리 공간이 스택에 생성되요(num1, num2, sum). 그 다음에 addNum이 호출되면 스택에 함수의 메모리 공간을 할당해요(n1, n2, result). 그 다음에 addNum 수행이 끝나면 해당 공간은 자동으로 사라져요, 스택Stack처럼요.

자바는 다른 메모리 관리 방식이 있는 줄 알고 들으면서 정리했는데 별반 차이는 없네요 ㅎㅎ. 그래도 리마인드 겸에서 기록해봅니다 ~,~

좋은 웹페이지 즐겨찾기