📚Java 메모리 구조는 크게 3가지로 나뉩니다.

💡Java 메모리 구조 비유로 이해하기


Method Area(도서관 비유).class 파일) 가 올라가는 곳.Stack Area(접시 쌓기 비유)Heap Area(풍선 비유)new 키워드로 생성된 객체가 저장되는 곳입니다.stack 영역에 저장됩니다.❗편의상 하나의 코드파일로 제공되지만 파일 2개가 있다고 가정해 봅시다.
Main.java 파일 그리고 Person.java 파일💡Java 코드 실행 시각화 도구
코드 설명
public class Main {
static class Person {
// 1. 속성
String name;
int age;
String address;
// 2. 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 3-1. 소개 기능(이름 나이 출력 기능)
void introduce() {
System.out.println("나의 이름은");
System.out.println(this.name + "입니다.");
System.out.println("나의 나이는");
System.out.println(this.age + "입니다.");
}
// 3-2. 더하기 기능(소개를 하고 더하기 연산 수행)
int sum(int value1, int value2) {
introduce();
int result = value1 + value2;
return result;
}
}
public static void main(String[] args) {
String name = "Steve";
int age = 20;
Person personA = new Person(name, age);
personA.introduce();
int value1 = 1;
int value2 = 2;
int ret = personA.sum(value1, value2);
System.out.println(ret);
}
}
📚Method Area 이해해 봅시다.
Method(static)영역에 저장됩니다.Method 영역에 저장된 데이터는 프로그램 전체에서 공용으로 활용 가능합니다.static 키워드를 배우지 않았지만 static 으로 선언된 변수와 메서드들이 이 공간에 위치하게 됩니다.
📚Heap 영역을 이해해 봅시다.
new 키워드로 생성된 객체는 Heap 영역에 저장됩니다.
💡프로그램 실행 흐름에서 Stack 영역의 변수가 Heap 영역의 객체를 참조(화살표→ 로 가리키고 있는 모습)을 꼭 확인해 봅시다. 지금은 객체를 담은 변수에는 실제 객체의 Heap 메모리 주소 값이 저장되는구나 라고 이해하고 넘어가셔도 충분합니다.
📚Stack 영역을 이해해 봅시다.
Stack 영역에 메모리가 할당됩니다.LIFO-후입선출 구조입니다.Stack 에 저장되고 메서드 실행이 끝나면 그 메모리는 자동으로 제거 됩니다.
public class Main {
public static void main(String[] args) {
String name = "Steve"; // 1
int age = 20;
Person **personA** = new Person(name, age); // personA = @100호
personA.introduce(); // 2
}
}
📚LIFO(Last In First Out) - 후입선출
마지막에 들어온 요소가 제일 먼저 나가게 되는 구조를 뜻합니다.