JAVA 기초 - 선언위치에 따른 변수(클래스 변수, 인스턴스 변수, 지역변수)

코린이서현이·2023년 9월 3일
0

Java

목록 보기
41/46

🤔들어가면서🤔

앞에서 변수의 종류에 대해서 짧게 공부를 했는데, 너무 짧았던 것인지 이후 지역변수 이야기가 
나올때마다 헷갈려서 제대로 짚고 넘어가려고 한다!

📕 메모리 영역의 특징

📒 클래스영역 (static 영역)

프로그램의 시작부터 종료될때까지 사라지지 않고 존재한다.
따라서 프로그램 실행 중에는 어디서든 사용할 수 있다.
다만 static 데이터를 무분별하게 많이 사용할 경우 메모리 부족 현상이 일어날 수 있다.

✅ 저장 내용

  • 클래스, 인터페이스, 메소드, 필드, 상수, 상수풀

📒 스택 영역

후입선출(LIFO)의 구조를 가지고 스코프의 범위를 벗어나면 스택메모리에서 사라진다.
※ java.lang.StackOverFlowError 발생
스레드 개수마다 생성된다.

✅ 저장 내용

  • 객체 참조 변수, 원시타입의 지역변수, 매개변수, 리턴 값

➕ 스택 프레임
메서드가 호출될때 필요한 메모리 덩어리를 묶어서 스택프레임이라고 한다.
하나의 메서드당 하나의 스택프레임이 필요하며, 메소드 호출 범위가 종료되면 해당 메모리는 제거된다.

📒 힙 영역

단 하나의 Heap영역만 존재한다. (stack 영역과의 차이점)
보관되는 메모리 호출이 끝나더라도 삭제되지 않고 유지된다.
그러나 인스턴스를 참조하는 참조변수가 없을 경우에는 가비지컬렉터에 의해 메모리에서 청소된다.

✅ 저장 내용

  • 객체, 배열

📒 PC Register

  • 현재 스레드의 실행주소 저장

📒 Native Method Stacks

  • 자바외 다른 언어로 구현된 정보 저장

💭 알아보기

String str1 = new String("abc");
String str2 = "abc";

str1, str2 → 스택 영역
new 생성자로 생성된 "abc" → 인스턴스로 힙 영역에 저장
"abc" → 상수풀로 클래스 영역에 저장

📕 변수 종류

📒 클래스 변수

  • static 예약어를 사용해서 클래스 내부에 선언
  • 클래스 영역에 저장

📒 인스턴스 변수

  • 클래스 내부에서 선언
  • 힙 영역에 저장

📒 지역 변수

  • 함수 내부에서만 사용
  • 스택에 저장

🤓들어가면서🤓

꾸역꾸역 변수와 메모리 공간에 대해서 공부를 해봤는데, 앞으로도 좀 모르는 부분이 나오면 추가적인 공부를 해가면서 기초를 탄탄히 쌓고 싶다.
profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글