변수 ( nt, double, boolean, String)
static (main이 실행되기 전에 로드된다.) - 공간 분리 (class 별로 분리되어 있음)
static은 정적이고, 한 개만 메모리에 로드된다.
메서드(method) (함수) - 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(); // new 했기 때문에 s1과 같을 수 없음, 다른 공간임
        s2.no = 2;
        s2.name = "임꺽정";
        s2.age = 24;
        s2.show();
        Student s3 = new Student();
        s3.no = 3;
        s3.name = "이춘향";
        s3.age = 30;
        s3.show();
    }
}
2. stack (자료구조)
First In Last Out = FILO
한 쪽 끝에서 데이터가 들어오면 나중에 들어온 데이터부터 빠져나가는 형식이다.
즉, 먼저 들어온 데이터는 마지막에 나가는 것

package jvm;
public class Stack01 {
    static void m1() {
        int a = 1;
        m2();                                   // 7번라인 - 이 순간엔 변수 a와 b가 떠 있다.
    }
    static void m2() {
        int b = 1;
    }
    public static void main(String[] args) {
        System.out.println("10번 라인");
        m1();
        System.out.println("12번 라인");
    }
}
StackOverFlow Error
Stack 영역의 메모리가 지정된 범위를 넘어갈 때 발생한다.
- 오류는 위에서 터져서 밑으로 내려 오는 것이다.
package jvm;
public class Stack02 {
    static void m1() {
        int a = 1;
        m1();                       // 재귀 함수
    }
    public static void main(String[] args) {
        m1();
    }
}
3. pueue
- First In First Out = FIFO
- 한쪽 끝에서 데이터가 들어오면 반대 쪽 끝에서 데이터가 나가는 형식이다.
- 즉, 선입선출

package jvm;
public class Queue01 {
    static void m1() {
        int n1 = 1;
        System.out.println("🚒");
        System.out.println("🏍️️");
        System.out.println("🚲");
        m2();                           // 16번 라인으로 점프(이동)
        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 종료");
    }
}
4. 참조 자료형

Share article