Stack, Queue

Dec 19, 2023
Stack, Queue
Contents

JVM 구조

💡
Stack과 Queue는 프로그램 내에서 실행될 때 잠깐 생겼다가 사라진다. Stack은 임시 저장소이고 Queue는 실행될 목록을 대기시키는 공간이라고 생각하면 좋을 것 같다.
 
package ex04.test; public class ScopeEx01 { int n1 = 1;// heap static int n2 = 2; //static static void m8() { int n8 = 8; } static void m1() { // int n1 = 10;//stack // System.out.println("m1: " + n1); // 위에 int n1 = 10; 이 없다면 아무 것도 화면에 보여줄 수 없다. 5행의 int n1 = 1;은 static에 올라와 있지 않기 때문이다. System.out.println(); } void m2() { System.out.println("m2: " + n1); System.out.println("이거 되나? " + n2); } // 메인 시작 전에 static에 변수 n2와 메서드 m1이 로드되어 있음. public static void main(String[] args) { System.out.println(1); m1(); // return이 있으면 여기로 오고, 없으면 다음 줄로 간다. System.out.println(2); ScopeEx01 sc = new ScopeEx01(); // static이 붙어 있지 않은 모든 것이 뜸. 그냥 남는 공간 찾아서 뜸. // main stack에 뜬 sc는 heap의 주소.(참조 변수) System.out.println(sc.n1); sc.m2(); // heap과 static은 떠있기만 하다면 어디서든 찾을 수 있어. 어차피 이름은 중복되지 않을테니까. } }
 
 
 
상단에 작성된 코드를 토대로 그렸음
상단에 작성된 코드를 토대로 그렸음
 
💡
지역변수는 stack에 뜬다. 실행시에만 생겼다 사라지기 때문에 다른 곳에서 찾을 수가 없다. 찾고 싶다면 return을 하면 된다.
 
static (n2=2, m1(), main) -> 클래스명.찾는것의이름 -> 클래스명을 통해 접근(어디에서든지 접근 가능하다) heap (n1=1, m2() -> static이 아닌 모든 것) -> 레퍼런스 주소를 통해 접근(heap 끼리는 같은 scope이기 때문에 접근이 가능하다. ) stack (n5=10) -> 같은 스택에서만 접근(외부에서 접근 불가능)
 
Share article
RSSPowered by inblog