[자바 JVM] 29. 자료구조

김건우's avatar
Feb 06, 2025
[자바 JVM] 29. 자료구조
💡
변수 (int, double, boolean, String)
static (main이 실행되기 전에 메모리에 로드된다.) = 공간 분리 (class 별로 분리되어있음)
static은 정적이고, 한개만 메모리에 로드된다. (여러개 띄울 수 없음)
메서드(함수) - 4가지 유형(기본, 인수 1개, 인수 여러개, 리턴이 있는 함수) - void (리턴이 없는)

2. 자료구조

1. Heap

💡
Student 변수명 = new Student();
new가 되면, static이 붙지 않은 모든(변수, 메서드)가 heap에 로드 된다.
package jvm; // 이름, 나이 학생 번호 class Student { int no; String name; int age; void show() { System.out.println(no); System.out.println(name); System.out.println(age); System.out.println(); } } public class Heap01 { public static void main(String[] args) { Student s1 = new Student(); // new가 되면, static이 붙지 않은 모든(변수, 메서드)가 heap에 로드 된다. s1.no = 1; s1.name = "홍길동"; s1.age = 20; s1.show(); Student s2 = new Student(); s2.no = 2; s2.name = "임꺽정"; s2.age = 30; s2.show(); } }

2. Stack

💡
First In Last Out = FILO
바디가 들어오면 들어온 순서대로 나가는 것이 아닌 제일 마지막에 들어온 게 먼저 나간다
들어오다 = PUSH / 나가다 = POP
데이터를 저장하는 공간 (지역변수)
package ex04; // 오류는 위에서 터져서 밑으로 가기 때문에 항상 위에서 부터 체크 public class Stack02 { static void m1() { int a = 1; m1(); // 재귀함수 : 자기가 자기를 호출 하는 것 (데몬) } public static void main(String[] args) { m1(); } }

3. Queue

💡
First In First Out = FIFO
첫번째로 들어온 게 첫번째로 나간다
코드를 실행하는 공간
package ex04; public class Queue01 { static void m1() { int n1 = 1; System.out.println("🚒"); System.out.println("🏍️"); System.out.println("🚲"); m2(); System.out.println("🚅"); System.out.println("✈️"); } static void m2() { int n2 = 2; System.out.println("🍕"); System.out.println("🍔"); System.out.println("🌭"); System.out.println("🥚"); System.out.println("🧀"); } public static void main(String[] args) { System.out.println("main 시작"); m1(); System.out.println("main 종료"); } }
notion image
💡
static fhem → main 실행 (stack, queue 생성) → m1 실행 (stack, queue 생성) → m2 실행 (stack, queue 생성) → 다 pop 된 m2 queue 삭제, stack 삭제 → 다 pop 된 m1 queue 삭제, stack 삭제 → 다 pop 된 main queue 삭제, stack 삭제 → 프로그램 종료

4. 참조 자료형

💡
기본 자료형 : 값이 있다
참조 자료형 : 값이 있는 게 아닌 주소가 있음 → 그 주소로 가서 값을 찾음
모든 참조 자료형의 크기는 4Byte이다.
package jvm; class Data { int num; } public class Ref01 { public static void main(String[] args) { Data d1 = new Data(); Data d2 = d1; d1.num = 10; d2.num = 20; System.out.println("d1.num = " + d1.num); System.out.println("d2.num = " + d2.num); } }
notion image
Share article

gunwoo