❗매우 중요한 개념❗
변수 - int, double, boolean, String
static (main이 실행 되기 전에 메모리에 로드 된다) - 공간 분리 (class 별로/class.~)
static은 정적, 한 개만 메모리에 로드 된다
메서드(함수) - 4가지 유형 (기본, 인수 1개, 인수 여러 개, 리턴이 있는) - void (리턴이 없음)
<자료 구조>
1. 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 = 10;
s2.show();
Student s3 = new Student();
s3.no = 3;
s3.name = "임꺽정";
s3.age = 15;
s3.show();
}
}
2. Stack

행위 시 필요한 데이터(메서드: 지역변수) 저장
Stack은 FILO (First In Last Out)
Push > Pop
Queue에서 Pop이 종료되어 삭제되면 Stack도 삭제됨
package Jvm;
public class Stack01 {
static void m1() {
int a = 1; // m1 호출시 실행됨,
m2();
}
static void m2() {
int b = 1; // m2 호출시 실행됨,
}
public static void main(String[] args) {
System.out.println("");
m1();
System.out.println("");
}
}
Stask Overflow
package Jvm;
public class Stack02 {
static void m1() {
int a = 1;
m1(); // 재귀함수: 함수 안에 자신의 함수를 다시 호출하는 함수
}
public static void main(String[] args) {
m1();
}
}
C:\workspace\tools\jdk-21\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\lib\idea_rt.jar=50598:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.2.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\java_lec\study\out\production\study Jvm.Stack02
Exception in thread "main" java.lang.StackOverflowError
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
at Jvm.Stack02.m1(Stack02.java:7)
3. Queue
코드 실행 순서
Queue는 FIFO (First In First Out)
Queue에서 Pop이 종료되면 삭제됨
Stack와 Queue는 일대일 대응 (ex. m1 stask - m1 queue / m2 stack - m2 queue)

package Jvm;
public class Queue01 {
static void m1() {
int n1 = 1; // 6번
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("🧀"); // 21번
}
public static void main(String[] args) {
System.out.println("main 시작");
m1();
System.out.println("main 종료"); // 27번
}
}

4. 참조 자료형
크기를 알 때 - 기본 자료형
크기를 모를 때 - 참조 자료형 / 주소가 있다 → 두 번 찾아가야함

Share article