[TIL] 지역 변수와 메모리: 스택 프레임에 갇혔어요!

hyo_·2021년 1월 8일
0

JAVA 

목록 보기
6/20

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

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


TIL : 변수와 메모리: 변수! 너 어디 있니?에 대한 답

변수는 T메모리 영역 어디든 존재

스택 영역 - 지역 변수

  • 지역 변수는 스택 영역의 스택 프레임 안에 생성된다. 스택 프레임 소멸 시 함께 소멸된다.

스태틱 영역 - 클래스 멤버 변수

  • JVM이 종료될 때까지 고정된(Static) 상태로 있는다.

힙 영역 - 객체 멤버 변수

  • 객체 멤버 변수들은 객체와 함께 힙 메모리 회수기(가비지 컬렉터)에 의해 일생을 마친다.

지역 변수

예제 코드의 T메모리 변화를 살펴보면서 지역변수와 메모리 관계가 어떠한지 알아보자!

(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);일 경우

  • 4번째 줄을 실행한 후 T 메모리 구조

메모리 상에 존재하지 않는 변수 m을 참조 하여 'm cannot be resolved to a variable' 오류 발생

5번째 줄을 원상 복구하고 13번째 줄에 System.out.println(m);일 경우

  • 12번째 줄을 실행한 후 T 메모리

12번째 주이 끝나고 나서도 변수 m은 존재하지 않기 때문에 오류 메세지가 나타난다.


7번째 줄을 다시보자 int m = k + 5

  • 7번째 줄을 실행 한 후 T 메모리

if문 블록 스택 프레임 수행 중에 if 블록 스택 프레임 외부에 존재하는 변수 k는 접근가능하다.
-> 메모리 상에 존재하니 당연히 접근 가능!

"외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다"

정리

👉 위의 내용은 코드 진행(시간의 흐름)에 따른 T메모리 변화를 보면 당연하다는 결론을 얻을 수 있다! 결과적으로 지역 변수는 그지역(스택 프레임)에서만 사용가능하고, 외부에서는 사용 불가능하다. 또한 해당 지역이 사라지면 지역 변수도 메모리에서 사라진다. 그래서 스택 메모리 내의 스택 프레임 안의 변수를 지역 변수라고 한다.


🌞 Check it!! 🌞

  • 스택 영역 - 지역 변수, 스태틱 영역 - 클래스 멤버 변수, 힙 영역 - 객체 멤버 변수

  • 외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능!!

profile
🎓의지적인 삶을 살자!😊

0개의 댓글