변수 (int, double, boolean, String)
static main 실행되기 전에 메모리에 로드 된다) - 공간 분리 (class별로 분리되어있음)
static 정적이고 1개만 메모리에 로드 된다.
메서드 함수 4가지 유형(기본, 인수가 1개, 인수가 여러개, 리턴이 있는) -void(리턴이없는)
1.heap
1.1 Heap이란?
- 동적으로 생성되는 객체들이 저장되는 메모리 영역
new
키워드로 생성되는 모든 객체가 저장됨
- 가비지 컬렉터에 의해 자동으로 메모리 관리
1.2 예제 코드
java
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();
}
// static show() {
// System.out.println(no);
// System.out.println(name);
// System.out.println(age);
// System.out.println();
// }
}
public class Heap01 {
static int no;
public static void main(String[] args) {
Student s1 = new Student();//new가 되면, static이 붙지 않은 모든(변수, 매서드)가 heap에 로드 된다. Student(타입) s1
s1.no = 1;
s1.name = "홍길동";
s1.age = 20;
s1.show();
//Student.show(); static show()하면 값이떠도 안됨
System.out.println("");
Student s2 = new Student();
s2.no = 2;
s2.name = "임꺽정";
s2.age = 30;
s2.show();
}
}
Heap 메모리 특징
- 객체의 생명주기 관리
- 인스턴스 변수와 메서드 저장
- Static이 아닌 멤버들의 저장소
2.stack
2.1 Stack의 특징
- FILO (First In Last Out) 구조
- 메서드 호출과 실행을 관리
- Push와 Pop 연산으로 동작
2.2 Stack 프레임 구조

2.3 Stack 동작 방식
- Push (추가)
- 메서드 호출 시 스택에 프레임 추가
- 지역 변수와 매개변수 저장
- Pop (제거)
- 메서드 실행 완료 시 프레임 제거
- FILO 순서로 제거됨
3.queue
소개
이 글에서는 컴퓨터 과학의 두 가지 기본적인 자료구조인 Stack과 Queue에 대해 알아보겠습니다. 이들의 차이점, 동작 패턴을 살펴보고 Java 예제를 통해 실제 동작을 확인해보겠습니다.
3.1 Queue란?
- FIFO (First In First Out) 구조
- 먼저 들어온 데이터가 먼저 나가는 구조
- 대기열과 같은 개념
3.2 Queue vs Stack 비교
Stack (FILO - First In, Last Out, 선입후출)
- 접시를 쌓아놓은 것과 같은 구조
- 마지막에 추가된 요소가 가장 먼저 제거됨
- 한쪽 끝에서만 작업이 이루어짐
- 주요 연산: push (추가)와 pop (제거)
Queue (FIFO - First In, First Out, 선입선출)
- 줄을 서서 기다리는 사람들과 같은 구조
- 처음 추가된 요소가 가장 먼저 제거됨
- 양쪽 끝에서 작업이 이루어짐
- 주요 연산: enqueue (추가)와 dequeue (제거)
3.3 Queue 주요 작업
- Enqueue: 데이터 추가
- Dequeue: 데이터 제거
- Front: 첫 번째 데이터 확인
- Rear: 마지막 데이터 확인
Java 구현 예제
다음은 Java 가상 머신(JVM)이 메소드 실행을 위해 스택을 사용하는 방법을 보여주는 상세한 예제입니다:
java
Copy
package jvm;
public class Queue01 {
static void m1() {
int n1 = 1;// 스택 프레임에 저장되는 지역 변수
System.out.println("🚒");
System.out.println("🏍");
System.out.println("🚲");
m2();// 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();// m1 메소드 호출
System.out.println("main 종료");
}
}

프로그램 실행 흐름
- 스택 프레임 생성
- 프로그램이 시작되면 JVM은
main
메소드를 위한 스택 프레임을 생성 - 각 메소드 호출마다 새로운 스택 프레임이 생성됨
- 스택 프레임은 지역 변수와 실행 컨텍스트를 포함
- 메소드 실행 순서
Copy
main() → m1() → m2() → m1()로 복귀 → main()으로 복귀
- 스택 프레임 생명주기
- 메소드가 호출될 때 스택 프레임이 생성됨
- 메소드 실행이 완료되면 스택 프레임이 제거됨
- 실행 순서는 FILO(선입후출) 방식을 따름
출력 순서
프로그램은 다음 순서로 출력됩니다:
- "main 시작"
- 🚒
- 🏍
- 🚲
- 🍕
- 🍔
- 🌭
- 🥚
- 🧀
- 🚝
- 🛫
- "main 종료"
4.참고자료형
1. 기본 자료형(Primitive Data Types) vs 참조 자료형(Reference Data Types)
기본 자료형
- 크기가 고정되어 있으며, 메모리에 직접 값이 저장됩니다.
- 종류:
int
,double
,boolean
,char
등.
- 예시:
java
Copy
int n = 7; // 4바이트 고정
double k = 10; // 8바이트 고정
참조 자료형
- 크기가 동적으로 결정되며, 메모리 주소를 통해 객체를 참조합니다.
- 종류:
String
, 클래스, 배열 등.
- 예시:
java
Copy
String s1 = "안녕"; // 문자열은 참조 자료형
Student s2 = new Student(); // 클래스 객체 생성
2. 메모리 할당과 저장 한계
- 기본 자료형은 고정 크기로 메모리 효율이 높습니다.
- 예:
int
1개 = 4바이트 → 160억 개 저장 시 약 640GB 필요.
- 참조 자료형은 객체 크기에 따라 유동적이며, 주소값(4바이트 or 8바이트) 이 저장됩니다.
- 10억 개의 참조 변수 저장 시 약 4GB (32비트) 또는 8GB (64비트) 필요.
저장 용량 예시
- 160억 개 데이터 → 약 1TB 이상 필요 (데이터 타입에 따라 변동).
- 80억 개 데이터 → 약 500GB (기본 자료형 기준).
- 10억 개 데이터 → 약 10GB (참조 자료형 기준).

Share article