※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
(T메모리 -> TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고)
Study5.java 파일
1 public class Study5{
2 static int share;
3
4 public static void main(String[] args{
5 share = 55;
6
7 int k = fun(5, 7);
8
9 System.out.println(share);
10 }
11
12 public static int fun(int m, int p){
13 share = m + p;
14
15 return m -p;
16 }
17}
① 4번째 줄을 실행하기 전 T 메모리
② 7번째 int k = fun(5,7)
줄을 실행 했을 때 T 메모리
③ 13번째 줄 share = m + p
이 실행되고 나서의 T메모리
④ 15번째 줄 return m-p
이 실행되고 나서의 T메모리
⑤ 16번째 줄의 닫는 중괄호를 만나면 fun() 메서드 스택 프레임이 사라지면서 반환값이 k로 들어가짐-> 제어는 fun() 메서드를 호출 했던 7번째 줄로 옮겨짐
⑥ 8번째 줄의 닫는 중괄호를 만나면 main() 메서드 스택 프레임 소멸, T 메모리 반납이 일어남
👉 5번째 줄과 13번째 줄을 보면 메서드 밖에서 선언된 share 변수는 메서드들 사이에서 공유해서 사용할 수 있는 전역 변수임을 알 수 있다. 여기서 기억해야 할 부분은 지역 변수는 스택 프레임에 종속적 이고, 전역 변수는 스택 프레임에 독립적이라는 것이다.
전역변수는 코드 어느 곳에서나 접근할 수 있다고 해서 전역 변수라 하고, 메서드들이 공유해서 사용할 수 있어서 공유 변수라고도 한다.
만약 프로젝트 규모가 커진 상태에서 여러 메서드들이 전역 변수의 값을 변경 할 경우 T 메모리로 추적하지 않는 이상 전역 변수에 저장되어 있는 값을 파악하기 쉽지 않다. 이러한 이유때문에, 전역 변수의 사용은 되도록 피하는게 좋다.
지역 변수는 스택 프레임에 종속적 !!
전역 변수는 스택 프레임에 독립적 !!
프로젝트 규모가 커질 경우 전역 변수 값을 추적 하기 쉽지 않음!! ➡ 전역변수 사용 지양