Static

클래스에 고정

프로그램의 시작부터 끝까지 메모리(RAM)에 남아있음

즉, 게임 실행시 메모리에 로드되고 게임이 종료되면 메모리에서 사라짐

 

StackArea (LIFO 구조) 

메서드 내에서 정의하는 기본자료형에 해당하는 지역변수의 데이터 값이 저장됨

메서드가 호출될때 메모리에 할당되고 종료되면 사라짐

static메서드라면 게임을 구동하는 순간이 호출되는 순간인 것

 

HeapArea

참조형 데이터타입을 갖는 객체, 배열이 heap영역에 저장됨

참조형 타입의 변수는 참조하는 객체의 주소(참조값)를 저장함 > Heap영역에 존재하는 객체,인스턴스(실제값)을 가리키는 역할

new 연산자를 통해 실제값의 주소를 stack 영역의 변수(객체명, 인스턴스명 등 다양하게 불림)에게 반환

클래스 인스턴스명 = new 클래스();  //생성자와 new를 통해 해당 클래스를 인스턴스화한 것

@Getter
class Tv1{
	private String name;
	private String jejo;
	
	public Tv1(String name, String jejo) {
		this.name = name;
		this.jejo = jejo;
	}
}
public class lesson02 {

	public static void main(String[] args) {
    		Tv1 samsung = new Tv1("OLED","2021.11.11");
		Tv1 lg = new Tv1("LED","2019.05.09");
		
		System.out.println(lg.getJejo());  
		System.out.println(samsung.getJejo()); 각각의 제조값이 나옴
	}
}

Tv1 이라는 클래스가 있다. 이는 뼈대다

main에서 같은 Tv1 클래스에 new 연산자를 더해 samsung과 lg라는 변수를 만들었다

이는 Tv1이라는 뼈대는 그대로 있는거고 이 뼈대를 복사하여 "OLED","2021.11.11" 이라는 살을 붙여 인스턴스화하고

주소값을 samsung 이라는 변수에 넣어준 것,

그래서 변수인 samsung을 인스턴스명, 객체명이라고 부르기도 한다

그리고 samsug, lg는 Stack 영역에 생성된 것이고 살을 붙여 인스턴스화한 인스턴스(실제 값)는 Heap영역에 있는 것

** 어떤 참조 변수도 Heap영역에 있는 인스턴스를 참조하지 않게되면 GC(가비지 컬렉터)에 의해 메모리에서 사라짐

 

위 글은 본인이 이해하기쉽게 주관적으로 작성한 것이라 의미가 틀린 부분이 있을 수 있습니다

 

네이밍이 굉장히 중요하다고 생각하는데 객체, 인스턴스, 변수 선생님들마다 다르게 부르고 혼용하다보니

본인은 굉장히 헷갈렸다.. 또한 컴퓨터, 메모리의 구조적인 부분 설명없이 생성자란 이런것이다라고

당시에는 아는게 없고 단어자체도 생소하다보니 저렇게 생겼구나 그렇게 쓰는구나 하고 넘어가는데 조금만 변형되더라고 이해를 못하고 적용을 못하는 참담한결과가 나왔다

new가 도대체 무슨 역할인지 생각하고 정의하느라 꼬박 하루 걸린것 같다

이렇게 몽충몽충해서 좋은 개발자가 될 수 있을것인가..!

참조

https://wildeveloperetrain.tistory.com/33

 

Static, Stack, Heap / Java 메모리 영역의 구조와 특징

Java를 사용하면서 알아야 할 메모리 구조 및 특징에 대해서 정리합니다. (Static, Stack, Heap) 먼저 프로그램을 구동하기 위해서는 운영체제(OS)가 메모리(RAM)에 데이터 및 명령어를 저장할 공간을 할

wildeveloperetrain.tistory.com

 

'JAVA > Java 기초' 카테고리의 다른 글

JAVA 1.01 변수와 상수  (0) 2022.03.30

+ Recent posts