๐ ์๋ก
ํ๋ก๊ทธ๋๋ฐ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์์ฃผ ๋ง์ฃผ์น๋ '์คํ'๊ณผ 'ํ'์ด๋ผ๋ ์ฉ์ด๋ค. ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ ์ด ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ๋น์ ๊ณต์๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์ค์ํ์ ์์์ ํจ๊ป ์ค๋ช ํด๋๋ฆฌ๊ฒ ์ต๋๋ค. (๋น์ ์ด๊ธฐ ๋๋ฌธ์ 100% ์ผ์นํ์ง ์์ ์๋ ์์ต๋๋ค. ์ฐธ๊ณ ๋ง ํด์ฃผ์ธ์!)
๐ก ๋ณธ๋ก
1. ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ฐ์
JVM(Java Virtual Machine)์ ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ์คํ(Stack)๊ณผ ํ(Heap) ์์ญ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ค์ํ์ ๋น์ ํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- ์คํ(Stack): ์ฌ๋ฌด์ค์ ์ฑ
์
- ๋น์ฅ ํ์ํ ๋ฌผ๊ฑด๋ค์ ์ฌ๋ ค๋๊ณ ์์
- ๊ณต๊ฐ์ด ์ ํ์
- ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ํ(Heap): ์ฐฝ๊ณ
- ํฐ ๋ฌผ๊ฑด๋ค์ ๋ณด๊ด
- ์๋์ ์ผ๋ก ํฐ ๊ณต๊ฐ
- ์ฐพ๋๋ฐ ์๊ฐ์ด ์ข ๋ ๊ฑธ๋ฆผ
2. ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ ์ฌ์ธต ๋ถ์
ํน์ง
- ์ ํด์ง ์์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ๊ตฌ์กฐ
- ํ์ ์ ์ถ(LIFO: Last In First Out) ๋ฐฉ์
- ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ ์ ์ฅ์
์ ์ฅ๋๋ ๋ฐ์ดํฐ
public void calculateSum() {
int a = 10; // ์คํ์ ์ ์ฅ
int b = 20; // ์คํ์ ์ ์ฅ
int sum = a + b; // ์คํ์ ์ ์ฅ
}
3. ํ(Heap) ๋ฉ๋ชจ๋ฆฌ ์ฌ์ธต ๋ถ์
ํน์ง
- ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ ์์ญ
- ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์ ์ฅ๋๋ ๊ณต๊ฐ
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ด๋ฆฌ
์ ์ฅ๋๋ ๋ฐ์ดํฐ
Person person = new Person("John", 25); // ๊ฐ์ฒด๋ ํ์ ์ ์ฅ
ArrayList<String> list = new ArrayList<>(); // ์ปฌ๋ ์
๋ ํ์ ์ ์ฅ
4. ์ค์ ํ์ฉ ์ฌ๋ก
์คํ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ
- ๋ฉ์๋ ํธ์ถ ์์ ๋งค๊ฐ๋ณ์
- ์ง์ญ ๋ณ์
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ๋ณ์
ํ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ
- ๊ฐ์ฒด ์์ฑ
- ๋ฐฐ์ด
- ๋ฌธ์์ด
- ์ปฌ๋ ์ (ArrayList, HashMap ๋ฑ)
๐์์ ์ดํด๋ณด๊ธฐ
public class MemoryExample {
public void memoryAllocationTest() {
// ์ผ์ด์ค 1: ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
์ ์ง์ญ ๋ณ์
int age = 25; // ์ด๋์ ์ ์ฅ๋ ๊น์?
double height = 175.5; // ์ด๋์ ์ ์ฅ๋ ๊น์?
// ์ผ์ด์ค 2: ์ฐธ์กฐ ํ์
์ ์ง์ญ ๋ณ์
String name = "John"; // ๋ณ์์ ์ค์ ๋ฌธ์์ด์ ์ด๋์ ์ ์ฅ๋ ๊น์?
// ์ผ์ด์ค 3: ๋ฐฐ์ด ์ ์ธ
int[] scores = new int[5]; // ๋ฐฐ์ด ๋ณ์์ ์ค์ ๋ฐฐ์ด์ ์ด๋์ ์ ์ฅ๋ ๊น์?
// ์ผ์ด์ค 4: ๊ฐ์ฒด ์์ฑ
Person person = new Person("Alice", 30); // ๊ฐ์ฒด ์ฐธ์กฐ์ ์ค์ ๊ฐ์ฒด๋ ์ด๋์ ์ ์ฅ๋ ๊น์?
// ์ผ์ด์ค 5: ์ปฌ๋ ์
ํ๋ ์์ํฌ ์ฌ์ฉ
ArrayList<String> list = new ArrayList<>(); // ArrayList ๋ณ์์ ์ค์ ๊ฐ์ฒด๋ ์ด๋์ ์ ์ฅ๋ ๊น์?
list.add("Hello"); // ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ ์ด๋์ ์ ์ฅ๋ ๊น์?
}
}
์ผ์ด์ค 1: ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
age
: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ์ฅ (25๋ผ๋ ๊ฐ ์์ฒด๊ฐ ์คํ์ ์ ์ฅ)height
: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ์ฅ (175.5๋ผ๋ ๊ฐ ์์ฒด๊ฐ ์คํ์ ์ ์ฅ)
์ผ์ด์ค 2: String ๋ณ์
name
๋ณ์: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ฐธ์กฐ๊ฐ ์ ์ฅ)"John"
๋ฌธ์์ด ๊ฐ์ฒด: ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ค์ ๋ฌธ์์ด ๋ฐ์ดํฐ)
์ผ์ด์ค 3: ๋ฐฐ์ด
scores
๋ณ์: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ฐธ์กฐ๊ฐ ์ ์ฅ)- ์ค์ ๋ฐฐ์ด
[0,0,0,0,0]
: ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ค์ ๋ฐฐ์ด ๋ฐ์ดํฐ)
์ผ์ด์ค 4: ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด
person
๋ณ์: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ฐธ์กฐ๊ฐ ์ ์ฅ)- Person ๊ฐ์ฒด ์์ฒด: ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (name, age ๋ฑ์ ์ค์ ๋ฐ์ดํฐ)
์ผ์ด์ค 5: ์ปฌ๋ ์
list
๋ณ์: ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ (์ฐธ์กฐ๊ฐ ์ ์ฅ)- ArrayList ๊ฐ์ฒด: ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
- "Hello" ๋ฌธ์์ด: ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ
๐ ํต์ฌ ํฌ์ธํธ
1. ์คํ์ ์ ์ฅ๋๋ ๊ฒ
- ๊ธฐ๋ณธ ํ์ ์ง์ญ ๋ณ์์ ์ค์ ๊ฐ
- ์ฐธ์กฐ ํ์ ์ง์ญ ๋ณ์์ ์ฐธ์กฐ๊ฐ
2. ํ์ ์ ์ฅ๋๋ ๊ฒ
- ๋ชจ๋ ๊ฐ์ฒด์ ์ค์ ๋ฐ์ดํฐ
- ๋ฐฐ์ด์ ์ค์ ๋ฐ์ดํฐ
- String์ ์ค์ ๋ฌธ์์ด ๋ฐ์ดํฐ
- ์ปฌ๋ ์ ์ ์ค์ ๋ฐ์ดํฐ
int[] numbers = new int[5];
๐ฏ ๊ฒฐ๋ก
์คํ๊ณผ ํ์ ๊ฐ๊ฐ์ ํน์ฑ๊ณผ ์ฉ๋์ ๋ง๊ฒ ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์์ฝ ์ ๋ฆฌ
- ์คํ
- ๋น ๋ฅธ ์ก์ธ์ค
- ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- ํฌ๊ธฐ ์ ํ์
- ์์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ํฉ
- ํ
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ก ๊ด๋ฆฌ
- ํฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- ๊ฐ์ฒด ์ ์ฅ์ ์ ํฉ
๋ง๋ฌด๋ฆฌ
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ฒซ๊ฑธ์์ ๋๋ค. ์คํ๊ณผ ํ์ ํน์ฑ์ ์ ์ดํดํ๊ณ ํ์ฉํ๋ค๋ฉด, ๋ ๋์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ ๊ฒ์ ๋๋ค.
๐ ์ถ๊ฐ ํ์ต ์๋ฃ
- JVM ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ