๐ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ํน์ง OOP Memory
- ๊ฐ์ ์งํฅ ์ธ์ด OOP ์ฐธ๊ณ :
์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ๋ฉ๋ชจ๋ฆฌ
๐- ํ๋ก๊ทธ๋จ ๊ตฌ๋ ๋ด๋ด ์ฌ์ฉํ ์ ์์ด์ ํ๋์ ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๋์์ด ๊ณต์ ํ ๋ชฉ์ ์ผ ๋ ์ฌ์ฉํ๋ค.
- static์ด ์ฌ๊ธฐ์ ํด๋น๋๋ค.
์ ์ ๋ฉ๋ชจ๋ฆฌ : ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ์๋ ๊ณ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- HEAP ๋ฉ๋ชจ๋ฆฌ ์ชฝ์ ๋ณ์ ๋ฐฉ์ ๋ง๋ค๋๋ผ๋ ๊ทธ ๊ณต๊ฐ์ ๋ณ์๋ช ์ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ณต๊ฐ์ด๋ค.
- ์ฆ, ์ด๋ฆ์ผ๋ก ์ ๊ธํ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ๋ณ์๋ฐฉ์ด ์๋ ์ฃผ์๋ก๋ง ์ ๊ทผํ ์ ์๋ค.
- ๋ฐ๋ก ์ญ์ ์ ๋ํ ์ฝ๋๊ฐ ์์ผ๋ฉฐ garbage collection์์ ๊ด๋ฆฌํ๋ค.
- HEAP, STACK ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ํด๋นํ๋ค.
๋์ ๋ฉ๋ชจ๋ฆฌ : ์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ณํ๋ฅผ ์ค ์ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ ์คํ์ ์คํ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
static vs. HEAP vs. STACK
๐
1. static : main()์ด start ๋ ๋ static ์์ฝ์ด๋ก ์ค์ ๋ ํด๋์ค ๋ณ์, ํด๋์ค ๋ฉ์๋๊ฐ ์๋ ํ ๋น๋๋ ๊ณต๊ฐ. ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ์๋์๋ฉธ๋๋ฉฐ, ๋ฑ ํ๋ฒ์ ํ ๊ฐ๋ง ํ ๋น๋๋ฏ๋ก ํ๋ก๊ทธ๋จ ๊ตฌ๋๋๋ ๋์ ๊ณต์ ํ ๋์์ ์ ์ฉ๋์ด ์ด์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ
2. HEAP : new ์ฐ์ฐ์์ ์ํด ๋์ ํ ๋นํ๊ณ ์์ฑ๋ ์ฃผ์(์์น์ ๋ณด)๋ก ์ ๊ทผํ ์ ์๋ ๊ณต๊ฐ ์๋ฐ์์๋ ๊ฐ์ฒด(์ธ์คํด์ค), ๋ฐฐ์ด ๊ณต๊ฐ์ ๋ชจ๋ ์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋นํ๋๋ก ์ ํด์ ธ์์.
3. STACK : non_static ๋ฉ์๋ ์คํ์ ๋ฉ์๋ ํธ์ถ ์คํ(method call stack)์ ๋ฉ์๋ ์์ญ์ด ํ ๋น๋๋ฉฐ, ํด๋น ๋ฉ์๋์ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์(parameter)๊ฐ ์์ญ ์์ ํ ๋น๋จ. ๋ฉ์๋ ๋ฆฌํด(์ข ๋ฃ)์ ์๋ ์๋ฉธ๋จ.
๊ฐ์ฒด ํ ๋น ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๐
- ํด๋์ค์ ์ ์ธ๋ ํ๋๋ค์ด ์ ์ธ ์์๋๋ก ํ ์์ญ์ ๋ฐฐ์ด์ฒ๋ผ ์ฐ์ ํ ๋น๋๋ฉฐ, ์์ฑ๋ ์์ ์์น(์ฃผ์)๊ฐ ์คํ์ ๋ ํผ๋ฐ์ค์ ์ ์ฅ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ๋ฅธ ๋ณ์์ ์ข ๋ฅ
๐- ์ง์ญ๋ณ์ Local Variable (๋ก์ปฌ๋ณ์) ๋ฉ์๋ ์คํ์ ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋๋ฉฐ, ๋ฉ์๋ ์์ญ ๋ด์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ, ๋ฉ์๋ ์ข ๋ฃ์ ์๋ ์๋ฉธ๋๋ ๋ณ์
- ํด๋์ค๋ณ์ class field (static๋ณ์) ํ๋ก๊ทธ๋จ ์คํ์ ์ ์ (์คํํฑ) ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ ๋น๋๋ฉฐ, ์ค๋น๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๊ณ , ํ๋ก๊ทธ๋จ ์คํ์ ์๋ฉธ๋๋ ํ๋ static ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋์ ๊ณ์ ๊ทธ ์์ญ์ ์ฐจ์งํ๋ฏ๋ก ๋๋ฌด ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ์ ์ข์ง ์๋ค.
- ์ธ์คํด์ค ๋ณ์ instance field (๋ฉค๋ฒ๋ณ์) new์ ์ํด ํ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ฉฐ, ๊ฐ์ฒด ์์ ํ ๋น๋๋ ๋ฉค๋ฒ๋ณ์๋ฅผ ๋งํจ. ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํด ๊ฐ์ฒด ์๋ฉธ์ ํจ๊ป ์ญ์ ๋๋ ํ๋ ํด๋์ค ๋ด๋ถ์์ฌ๋ฌ ๋ฉ์๋์์ ์ฌ์ฉํ๋ ๋ณ์๋ ๋ฉค๋ฒ๋ณ์๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข๋ค. ํ์ง๋ง, ๋ฉค๋ฒ๋ณ์๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ธ์คํด์ค ์์ฑ์ ์ธ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ค.
๐ฉ ๊ธฐ๋ณธํ ๋งค๊ฐ๋ณ์์ ์ฐธ์กฐํ ๋งค๊ฐ๋ณ์
- ๊ธฐ๋ณธํ ๋งค๊ฐ๋ณ์ : ๊ฐ์ ์ฝ๊ธฐ๋ง ํ ์ ์๋ค.
public class ParameterTest {
public static void main(String[] args) {
Data d = new Data(); d.x = 10;
System.out.println("main:x=" + d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main:x=" + d.x);
}
//๊ธฐ๋ณธํ ๋งค๊ฐ๋ณ์ ๊ฐ์ ์ฝ๊ธฐ๋ง ํ ์ ์๋ค.
public static void change(int x) {
x = 1000;
System.out.println("change(): x="+x);
}
}
- ์ฐธ์กฐํ ๋งค๊ฐ๋ณ์ : ๊ฐ์ ์ฝ๊ณ ์ธ ์ ์๋ค.
public class ParameterTest2 {
public static void main(String[] args) {
Data d = new Data();
d.x=10;
System.out.println("main():x"+d.x);
change(d);
System.out.println("After change(d.x)");
System.out.println("main():x="+d.x);
} //์ฐธ์กฐํ ๋งค๊ฐ๋ณ์ ๋ณ์์ ๊ฐ์ ์ฝ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.
public static void change(Data d) {
d.x=1000;
System.out.println("change():x="+d.x);
}
}
static ์์ฝ์ด
๐- ํ๋์ ๋ฉ์๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ฐ์ ํ์ ์ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๊ณต์ ํ ๋ชฉ์ ์ธ ๋์์ ์ ์ฉํ๋ฉฐ, ํ๋ก๊ทธ๋จ start์์ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ ํ ๋น๋๋ค.
- static ํ๋ ์ด๊ธฐํ, ํ๋ก๊ทธ๋จ ์์์ ์ด๊ธฐํํ๋ค
- ์ธ์คํด์ค ๋ธ๋ก : ์ธ์คํด์ค๋ณ์ ์ด๊ธฐํ, ๊ฐ์ฒด ์์ฑ์๋ง๋ค ์ด๊ธฐํ
{ } : ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํ ์ํค๋ ๋ธ๋ก.
์ ๊ทผ ์ ํ์ class ํด๋์ค๋ช
{
์ ๊ทผ์ ํ์ static ์๋ฃํ ํ๋๋ช
; //static
์ ๊ทผ์ ํ์ ์๋ฃํ ํ๋๋ช
; //์ธ์คํด์ค
static {ํ๋ : ์ด๊ธฐ๊ฐ}; //static
{ํ๋ : ์ด๊ธฐ๊ฐ} //์ธ์คํด์ค
}
- boolean : false
- char : '\u0000'
- byte, short, int, long : 0
- float, double : 0.0
- reference : null
static๊ณผ HEAP์ ๊ธฐ๋ณธ๊ฐ JVM์ ์ํด static๋ฉ๋ชจ๋ฆฌ์ heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋๋ ํ๋์ ์ด๊ธฐ๊ฐ ์ ์ธ์ด ์์ ์์๋ ์ค๋น๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ ์ด๊ธฐํ๋จ.
๊ธฐ๋ณธ ์๋ฃํ ๋ฐฐ์ด[ ], 2์ฐจ์ ๋ฐฐ์ด ๋ฉ๋ชจ๋ฆฌ๊ตฌ์กฐ
๐
- ๋ฐฐ์ด[][] ์ ์ฐจ์ ๊ฐฏ์๋ ์ฃผ์๋ฅผ ๋ช๋ฒ ์ฐธ์กฐํ๋๋!! ๋ค.
- 2์ฐจ์ ๋ฐฐ์ด์ ์์๋๋ ์ฃผ์๊ฐ์ 0x678(0x698) ๋ ํผ๋ฐ์ค์ ๊ธฐ๋กํ๋, ๊ฐ 1์ฐจ์ ๋ฐฐ์ด์ ์ฃผ์๋ค์ ๋ค์ ๋ฐฐ์ด(0x123)๋ก ๋ฌถ์ด์ฃผ๋ ํํ๋ค. => 2์ฐจ์ ๋ฐฐ์ด์ ๋ ํผ๋ฐ์ค(์ฃผ์) ๋ณ์์ ๋ํ ๋ฐฐ์ด์ด๋ค.
- ์ฐธ์กฐ ๋ณ์ : ์ฃผ์(์์น ์ ๋ณด)๋ฅผ ๊ฐ์ง๊ณ ํ ์์ญ์ ๋์ ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ค.
๋ณ์ arr์ ๋ ํผ๋ฐ์ค ๋ฐฐ์ด์ ์์ ์์น๊ฐ์ ๊ฐ์ง ์์น ์ฐธ์กฐ ๋ณ์๋ค.
'์ด๋ก > Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฐธ์กฐ์๋ฃํ reference data type (0) | 2021.07.19 |
---|---|
์์ฑ์ Constructor (0) | 2021.07.19 |
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ Object-Oriented Programming(OOP)์ด๋ (0) | 2021.07.15 |
[JAVA] ๊ฐ์ฒด์งํฅ 5๋์์น / POJO JAVA (0) | 2021.06.03 |
[JAVA] ๊ฐ์ฒด์งํฅ์์์ ๋ฌผ๋ฆฌ ๊ฐ์ฒด์ ๊ฐ๋ ๊ฐ์ฒด / ์์ง๋์ ๊ฒฐํฉ๋ (0) | 2021.06.03 |