※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.
📚 스프링 입문을 위한 자바 객체지향의 원리와 이해
스택 영역 - 지역 변수
스태틱 영역 - 클래스 멤버 변수
힙 영역 - 객체 멤버 변수
(T메모리 -> TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고)
Study3.java 파일
1 public class Study3{
2 public static void main(String[] args) {
3 int i = 10;
4 int k = 20;
5
6 if( i == 10 ) {
7 int m = k + 5;
8 k = m;
9 } else {
10 int p = k + 10;
11 }
12 // k = m + p
13 }
14 }
만약 5번째 줄에 빈줄이 아니고 System.out.println(m);
일 경우
메모리 상에 존재하지 않는 변수 m을 참조 하여 'm cannot be resolved to a variable' 오류 발생
5번째 줄을 원상 복구하고 13번째 줄에 System.out.println(m);
일 경우
12번째 주이 끝나고 나서도 변수 m은 존재하지 않기 때문에 오류 메세지가 나타난다.
7번째 줄을 다시보자 int m = k + 5
if문 블록 스택 프레임 수행 중에 if 블록 스택 프레임 외부에 존재하는 변수 k는 접근가능하다.
-> 메모리 상에 존재하니 당연히 접근 가능!
"외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다"
👉 위의 내용은 코드 진행(시간의 흐름)에 따른 T메모리 변화를 보면 당연하다는 결론을 얻을 수 있다! 결과적으로 지역 변수는 그지역(스택 프레임)에서만 사용가능하고, 외부에서는 사용 불가능하다. 또한 해당 지역이 사라지면 지역 변수도 메모리에서 사라진다. 그래서 스택 메모리 내의 스택 프레임 안의 변수를 지역 변수라고 한다.
스택 영역 - 지역 변수, 스태틱 영역 - 클래스 멤버 변수, 힙 영역 - 객체 멤버 변수
외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능!!