[꼼꼼한 개발자] 꼼코더
09. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 절차적/구조적 프로그래밍] - 변수와 메모리, 블록 스택 프레임 본문
09. 스프링 입문을 위한 자바 객체 지향의 원리와 이해 - [자바와 절차적/구조적 프로그래밍] - 변수와 메모리, 블록 스택 프레임
꼼코더 2022. 12. 27. 01:59👀 변수와 메모리 : 변수! 너 어디 있니?
👨🏻💻 예제코드
코드 실행의 5번째 줄 실행 후 T메모리 상황은 아래와 같다(종이와 펜을 가지고 그려볼 수 있어야 한다.)
6번째 줄 실행 시 변수 공간을(i) 마련한다
7번째 줄 실행시 i 변수 공간에 10을 저장된다.
9번째 줄은 d라는 ‘변수 공간이 마련’ 되는 즉시 ‘20.0’라는 값을 저장한다.
- 이때 중요한 점은 명령문이 '한 개가 아닌 두 개'이다.
10번째 줄은 닫는 중괄호호 ‘}’ main 메서드 스택 프레임이 스택 영역에서 사라진다. (프로그램 종료)
🧱 블록 구문과 메모리 : 블록 스택 프레임
👨🏻💻 예제 코드
8번째 구문에서 실행할 부분은 if 블록이다.
i가 10이 맞으면(true). if 블록이 실행된다.
여는 중괄호는 스택 프레임의 시작을 의미한다.
따라서 지금 만들어지는 스택 프레임은 if문이다 그것도 참인 블록의 스택 프레임이다.
9번째 구문에서 int m = k + 5는 두 개의 명령이 하나의 문장으로 표현돼 있다.
지금은 T 메모리를 학습하고 있으니 두 개의 명령문으로 분할해 보자
- int m;
- m = k + 5;
m = k + 5 구문은 if 스택 프레임 안의 변수 m에 값을 할당한다.
이때 if 스택 프레임 밖에 있으면서 main() 메서드 스택 프레임 안에 있는 k 변수를 연산에 참여시킨다.
10번째 구문 k = m 을 실행하고 난 T 메모리 그림이다.
11번째 구문에서 if 블록 중 ‘참’ 일 때의 ‘{’를 만나면 if 블록 스택 프레임은 스택영역에서 사라진다.
12 ~ 13번째 구문은 볼 기회가 없다.
16번째 줄은 주석이다. 만약 헤제한다면 T 메모리에 m 변수와 p변수가 존재하지 않으니 컴파일 오류가 나온다.
- m cannot be resolved to a variable > m이라는 변수를 찾을 수 없습니다.
- p cannot be resolved to a variable > p 라는 변수를 찾을 수 없습니다.
17번째 줄은 스택 프레임을 소멸시키는 ‘{’가 보인다. 아래에 과정이 이루어진다.
- T메모리 소멸 > JVM 가동중지 > JRE가 사용했던 시스템 자원을 운영체제에 반납
위 예제에서 중요한 부분은 if 블록 스택 프레임을 수행하는 중에 if 블록 스택 프레임 외부에 존재하는 변수 ‘k’에 접근이 가능하다는 것이다. 메모리 상에 변수 ‘k’가 존재하니 가능한 일이다.
“외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능하다.”
그래서 스택 메모리 → 스택 프레임 → 변수를 지역변수라고 한다.
외부에서 사용할 수 없기 때문.
또한 그 지역이 사라지면 지역 변수도 메모리에서 함께 사라진다.
위 내용은 스프링 입문을 위한 자바 객체 지향의 원리와 이해 교재를 참고하여 작성되었습니다.