※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
(T메모리 -> TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고)
Study4.java 파일
1 public class Study4 {
2 public static void main(String[] args) {
3 int k = 5;
4 int m;
5
6 m = square(k);
7 }
8
9 private static int square(int k ) {
10 int result;
11
12 k = 25;
13
14 result = k;
15
16 return result;
17 }
18 }
① 5번째 줄이 끝났을 때 T 메모리 스냅샷
② 6번째 줄에서 square() 메서드 호출 -> 9번째 줄로 이동(square() 메서드는 인자값과 반환값을 가짐)
③ 11번째 줄이 끝났을 때 T 메모리 스냅샷
👉 만약 squar() 메서드 호출이 여러번 발생하면 매번 square() 메서드 스택 프레임이 생성되는데, 각각 square() 메서드의 변수는 별개로 작용한다.
※ 반환값은 메서드가 종료될 때 반환해 줄 값을 가지고 있는 가상의 변수
④ 12번째 줄 k=25
을 실행한 후 T 메모리
⑤ 14번째 줄 result = k
을 실행하고 나면 result 변수에 25 값이 저장되고, 16번째 줄이 끝나면 반환값 변수에 result 값인 25가 복사됨
⑥ 17번째 줄에서 square() 메서드의 닫는 중괄호를 만나면 square() 메서드 스택 프레임은 스택에서 사라짐. -> m = square(k);
반환값은 돌려주면서 사라진다.
⑦ 7번째 줄 main() 메서드의 닫는 중괄호로 main() 메서드 스택 프레임 또한 메모리에서 사라지고, 모든 프로그램이 종료됨
메서드 호출이 일어나면 무조건 호출되는 메서드의 스택 프레임이 T 메모리 스택 영역에 새로 생성
메서드가 변수들을 가지고 있을 경우, 메서드 스택 프레안에 반환값, 인자, 메서드의 지역변수 순서대로 공간 생성