[TIL] 메서드 호출과 메모리: 메서드 스택 프레임2

hyo_·2021년 1월 12일
0

JAVA 

목록 보기
7/20

※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.

📚 스프링 입문을 위한 자바 객체지향의 원리와 이해


예제 코드의 T메모리 변화를 살펴보면서 메서드 호출과 메모리의 관계 알아보자!

(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 메모리 스냅샷

  • 메서드 호출이 일어나면 무조건 호출되는 메서드의 스택 프레임이 T 메모리 스택 영역에 새로 생성된다.
    square() 메서드는 인자,반환값을 둘 다 가지고 있기 때문에 square 스택 프레임 안에 반환값, 인자, 메서드의 지역변수의 공간이 순서대로 생성된다.

    👉 만약 squar() 메서드 호출이 여러번 발생하면 매번 square() 메서드 스택 프레임이 생성되는데, 각각 square() 메서드의 변수는 별개로 작용한다.

    ※ 반환값은 메서드가 종료될 때 반환해 줄 값을 가지고 있는 가상의 변수

④ 12번째 줄 k=25 을 실행한 후 T 메모리

  • main() 메서드가 가진 변수 k 와 square() 메서드가 가진 변수 k는 이름만 같고 서로 별도의 공간을 가지고 있다.
    -> Call By Value(값에 의한 호출)

⑤ 14번째 줄 result = k 을 실행하고 나면 result 변수에 25 값이 저장되고, 16번째 줄이 끝나면 반환값 변수에 result 값인 25가 복사됨

⑥ 17번째 줄에서 square() 메서드의 닫는 중괄호를 만나면 square() 메서드 스택 프레임은 스택에서 사라짐. -> m = square(k); 반환값은 돌려주면서 사라진다.

  • 여기서 square() 메서드와 main()메서드는 서로 내부의 지역 변수를 접근 할 수 없고, 입력값과 반환값에 의해서만 메서드 사이에 값이 전달된다. . -> 이것을 메서드의 블렉박스화라고 한다.

⑦ 7번째 줄 main() 메서드의 닫는 중괄호로 main() 메서드 스택 프레임 또한 메모리에서 사라지고, 모든 프로그램이 종료됨



🌞 Check it!! 🌞

  • 메서드 호출이 일어나면 무조건 호출되는 메서드의 스택 프레임이 T 메모리 스택 영역에 새로 생성

  • 메서드가 변수들을 가지고 있을 경우, 메서드 스택 프레안에 반환값, 인자, 메서드의 지역변수 순서대로 공간 생성

  • 메서드 사이에 값을 전달하거나 반환하는 방법은 메서드의 인자와 반환값으로만 가능! -> 서로의 변수 접근 불가!( 전역변수 사용이 가능하나 쓰지 않는 것이 좋음)
profile
🎓의지적인 삶을 살자!😊

0개의 댓글