๊ตญ๋น์ง์ D+11
- ์ฐธ์กฐํ์ -
์ฐธ์กฐํ์
• ๋ฉ๋ชจ๋ฆฌ๋งต Heap
์ฐ๋ฆฌ๋ ์ง๋ ์๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋งต์ธ Global Area, Heap Area, Stack Area 3๊ฐ์ง์ ๋ํด์ ๋ฐฐ์๋ณด์๋ค.
์ด๋, Heap์ new๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋ฉฐ ๋ฐํ์ ํ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ์ง ์๋ค์ด์ฌ์ง ๋ชฐ๋ผ ์ด๋ฆ์ด ์์ด ๋ํผ๋ฐ์ค ๊ฐ๋ง ๊ฐ์ง๊ณ ์์ด ์ฐธ์กฐ๋ณ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค๊ณ ํ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ํ๊ฐ์ง ์๋ฌธ์ ์ด ๋ค์ด์ผ ํ๋ค.
์ ๋ฒ์์ ์๊ฐ์ ์ฐ๋ฆฌ๋ ๋ํผ๋ฐ์ค ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ๋ธ๋ญ์ด ํฌ๋ ์๋ ์ฃผ์์ ํฌ๊ธฐ๋ ๊ฐ๋ค๊ณ ํ๋๋ฐ ์ ์์ ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅธ ์ด์ ๋ ๋ญ๊น?
int[] a1 = new int[5]; // 5int = 20byte
byte[] a2 = new byte[20]; // 20byte
์ฌ๊ธฐ ๋ฐฐ์ด์ ์ ์ธํ๋ ์ฝ๋๊ฐ ์๋ค.
์ด๋ a1์ 5๊ฐ์ int๋ก ๊ตฌ์ฑ๋์ด์๋ ๊ฒ์ผ๋ก 20byte์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๊ณ , a2๋ 20๊ฐ์ byte๋ก ๊ตฌ์ฑ๋์ด ์๋ 20byteํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ณผ์ฐ ์ฐ๋ฆฌ๋ ์ด ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด์ด ๊ฐ์ ์ข ๋ฅ๋ผ๊ณ ํ ์ ์์๊น?
๋น์ฐํ ์๋๋ค.
์ฝ๋์์ ์ฐ๋ฆฌ๋ intํ์ผ๋ก ๋ช๊ฐ๋ก ๊ตฌ์ฑ๋์ด ์๋์ง, byteํ์ผ๋ก ๋ช๊ฐ ์ด๋ฃจ์ด์ ธ ์๋์ง ์ ์ธ์ด ๋์ด์์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ๊ฐ์ ์์์ ๋ณด์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ค๊ณ ํด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ์ ๊ฐ์ ๋ฐ์ดํฐํ์ ์ผ๋ก ์ ๊ทผํ๋๊ฒ์ด ์๋๋ผ ๋ฐฐ์ด์์ ๊ฐ์ด int๋ผ๋ฉด intํ์ผ๋ก, byte์ผ๊ฒฝ์ฐ์ byte๋ผ๊ณ ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.
• null
- null์ ๋ํผ๋ฐ์ค๊ฐ์ ์ฐธ์กฐํ์ง ์๊ฒ ๋ค๋ ๋ป์ด๋ค.
- ๋ชจ๋ ๋ํผ๋ฐ์คํ์ ์ null์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
- ํ๋ฆฌ๋ฏธํฐ๋ธํ์ ์ ์ฌ์ฉํ ์ ์๋ค.
• String ํ์
- ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐํ์ ์ผ๋ก ์ฐธ์กฐํ์ ์ด๋ค.
- ๋ฌธ์์ด์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด๋์ค ๋ฐ์ดํฐํ์
public static void main(String[] args)
{
//String : ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐํ์
String a1 = "์๋
ํ์ธ์";
String a2 = new String("Hello");
}
๊ธฐ์กด์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ Stringํ์ ์ ์ ์ธํ๋ ๋ฐฉ์์ a1 ๋ฐฉ์์ด๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ a2๊ฐ ์ฌ๋ฐ๋ฅธ ํํ์ด๋ฉฐ, a1์ a2๋ก๋ถํฐ ๋ด๋ ค์จ ์๊ฐ์ฝ๋ ์ด๋ฏ๋ก, a1์ ๋ฐฉ์์ผ๋ก ์ ์ธํ๋๋ผ๋ a2์ ๋ฐฉ์์ ๋ํด์๋ ์๊ณ ์๋๊ฒ ์ค์ํ๋ค.
๋ํ a2๋ฅผ ๋ณด๋ฉด ์์ new๊ฐ ๋ถ์ฌ์ ธ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ ์ด๋ String์ ์ฐธ์กฐํ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋งต์์ Heap์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ฉด ์์น์ ๋ณด๋ฅผ ์ฐธ์กฐ๋ณ์๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
public static void main(String[] args)
{
//String : ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐ์ดํฐํ์
String a1 = "Hello";
String a2 = new String("Hello");
String a3 = "Hello";
if(a1 == a2) // ๋ค๋ฅด๋ค
System.out.println("๊ฐ๋ค");
else
System.out.println("๋ค๋ฅด๋ค");
if(a1 == a3) // ๊ฐ๋ค
System.out.println("๊ฐ๋ค");
else
System.out.println("๋ค๋ฅด๋ค");
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด์ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ๋ ผ๋ฆฌ๋ก ๋ฐ์ง์๋ฉด a1, a2, a3๋ ๊ฐ์ ๋ค๋ฅธ ์์น์ ๋ณด๋ฅผ ์ฐธ์กฐ๋ณ์์์ ๋ฃ์ด์ ์กฐ๊ฑด๋ฌธ์๋ ๋ชจ๋ ๋ค๋ฅด๋ค๋ ํํ์ ๋ํ๋ด๋๊ฒ ์ ์์ธ๋ฐ ํฌํํ๊ฒ๋ a1๊ณผ a2๋ ๋ค๋ฅด๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด์ง๋ง a1๊ณผ a3๋ ๊ฐ๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด๊ณ ์๋๊ฒ์ ํ์ธํ ์ ์๋ค.
์ ์ด๋ฌํ ํ์์ด ๋ํ๋๋ ๊ฒ์ผ๊น?
์ด๋ ์๋ฐ์์ฒด์์ ์ค์ ํ๊ธฐ ๋๋ฌธ์ธ๋ฐ ๋ง์ฝ a2๊ฐ์ด ์ ๋๋ก ์ ์ธํด์ฃผ์์ ๊ฒฝ์ฐ์๋ ์ ๋๋ก heap์๋ค ๊ฐ์ด ๋ค์ด๊ฐ๋ฉด์ ๊ณ ์ ์ ์์น์ ๋ณด๋ฅผ ๋ด๋ณด๋ด a1์ด๋ผ๋ ์ฐธ์กฐ๋ณ์ ์์ ์ฃผ์๋ฅผ ๋ฃ์ด์ฃผ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ a2์ a3์ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๊ฐ์ฝ๋๋ก ์์ฑ๋ ๋ฐฉ์์ผ๋ก ๋ง์ฝ a1์ผ๋ก ๋จผ์ ์ฐธ์กฐ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์์น์ ๋ณด๋ฅผ ๋ด๊ณ ์์๋, a3๋ "Hello"๋ฅผ ๋ฃ์๋ ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ฐ์ด ๊ฐ์๊ฒ์ด ์ด๋ฏธ heap์์ ์กด์ฌํ ๋ ์๋ก์ด ์์น์ ๋ณด๋ฅผ ๋ง๋ค์ด์ heap์์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ์๋ "Hello"์ ๋ํ ์์น์ ๋ณด๋ฅผ ๊ทธ๋ฅ ์จ๋ฒ๋ฆฌ๊ฒ ๋์ด์ a1๊ณผ a3๋ ๊ฐ์ ์ฃผ์๋ฅผ ๊ณต์ ํ๋ฏ๋ก ์ผ์นํ๋ค๊ณ ํํ๋๋ ๊ฒ์ด๋ค.
=> ์๋ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๊ธฐ ์ํด์ ์๋์ผ๋ก ์ต์ ํ ํด๋ฒ๋ฆผ.
a1.equals(a2); // true
a2.equals(a3); // true
a3.equals(a1); // true
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ๋ค์ ๋ณต์กํ๊ณ ์ ๋งคํ ๊ณผ์ ์ ํผํ๊ณ ์ ์๋ก ๋ด์ฉ์ ๊ฐ์ ๊ฐ์ด ์์๋ ๋ณ์๋ฅผ ๋น๊ต์ฐ์ฐ์๋ก ์ฌ์ฉํด์ ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ equls๋ผ๋ ๊ฒ์ ์ฌ์ฉํด์ค๋ค.
• String ํ์ ์ ๋ฐฐ์ด
String[] box = new String[] {"aa", "bb", "cc"};
์ฐ๋ฆฌ๋ ์์ ๋ด์ฉ์ ํ ๋๋ก String์ด ์ฐธ์กฐํ์ด๋ผ๋ ๊ฒ์ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด ์์ ์ฝ๋๋ ๊ณผ์ฐ Heap์ ["aa", "bb, "cc"]์ ๋ฃ๊ณ ์์์ ๋ณด๋ฅผ ์ฐธ์กฐ๋ณ์ ์์ ๋ฃ์ด์ ๊ฐ์ ๊ด๋ฆฌํ๋ ๊ฒ์ผ๊น?
๋ง์ฝ String ๋ฐฐ์ด์์ 3๊ฐ์ ์คํธ๋ง ํ์ ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค๊ณ ํ์.
๊ทธ๋ ๊ฒ ๋๋ฉด Heapํ์์ผ๋ก ๋ฐฐ์ด์์ ๋ฐ์ดํฐ๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด ์๋๋ผ String ์์ฒด๊ฐ ์ฐธ์กฐ๊ทธ์์ฒด์ด๊ธฐ ๋๋ฌธ์ String ๋ฐฐ์ด์์๋ ๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด ์๋๋ผ Heap์ด๋๊ฐ์ ์์ ๋ฐ์ดํฐ์ ๋ ํผ๋ฐ์ค ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณ์ strs๋ String์ ๋ฐฐ์ด์ ์ฐธ์กฐํ๋ ์ฐธ์กฐ๋ณ์์ด๋ฉฐ, ์ด๋ ๋ฐฐ์ด์์๋ ์ฐธ์กฐ๊ฐ๋ค์ด ๋ค์ด๊ฐ์ ๊ทธ ์ฃผ์๋ฅผ ํ๊ณ ๋ฐ์ดํฐ๊ฐ์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
// Before
String[] strs1 = new String[] {"aa", "bb", "cc"};
// After
String[] str2 = new String[] {
String("aa"),
String("bb"),
String("cc")
};
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด์ ์ฝ๋๋ฅผ ํตํด์ ์์ ๊ทธ๋ฆผ์ ์ดํดํ ์ ์๋ค๋ฉด ๋ฐ๊พผ After์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฉ๋ชจ๋ฆฌ๋งต์ ์ดํดํ๋ฉด ํจ์ฌ ์์ํ๋ค.
์ฐธ๊ณ ๋ก ์ด๋ก์จ ์ ์ ์๋๊ฑด ์ฐ๋ฆฌ๊ฐ ํ์์ ์ฐ๊ณ ์๋ ์ฝ๋๋ ์๊ฐ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์ธ ์ฝ๋์ ๋ชจ์ต์ ์ดํดํ๊ณ ์์ด์ผ ํ ๊ฒ์ด๋ค.
• ๋ค์ฐจ์๋ฐฐ์ด
๋ฐฐ์ด์ด๋ Data-type์ T๋ผ๊ณ ํ์๋, T๊ฐ n๊ฐ ์ฐ์ํ์ฌ ํ ๋น๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ๋ค.
์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ฒ๋ผ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ฐฐ์ด์ด 1์ฐจ์์ด ์๋๋ผ 2์ฐจ์ ์ด์์ด ๋ ๊ฒฝ์ฐ์ T์ n์ ์ด๋ป๊ฒ ํํํ ์ ์์๊น?
๋ต๋ถํฐ ์๋ ค์ฃผ์๋ฉด int[2][3]์์ int[3]์ด 2๊ฐ ์๋ค๊ณ ํํํ ์ ์๋ค.
์ด๋ ์ค์ํ ๊ฒ์ ์ฐ๋ฆฌ๋ 1์ฐจ์ ์ด์์ธ ๋ฐฐ์ด์ ์ ํ์๋ ํ๋ ฌ์ ์๊ฐํ๊ฑฐ๋ 3์ฐจ์์ ์ธ ๋ชจ์ต์ ์๊ฐํ๋ ๊ฒ ๋ณด๋ค ๋จ์ํ๊ฒ ์๊ฐํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด์ ์ค๋ช ํด๋ณด์๋ฉด int[4][3][2][3]์ ๊ทธ๋ฆผ์ผ๋ก ํํํ์์ ๋ 4์ฐจ์์ ๊ทธ๋ ค์ผ ํ๋ค๋ ๋ถ๋ด๊ฐ์ ๊ฐ์ง์ง ์๊ณ ์ด๋ฐ์์ผ๋ก ํ๋ํ๋์ฉ ๊ณ์ธต์ ์ผ๋ก ๊ทธ๋ ค๋๊ฐ๋ฉด ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ดํดํ๋๋ฐ ํจ์ฌ ์์ํ๋ค.
'์๋ > ๊ตญ๋น์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+13] ์ฝ๋ฉ๋ฐ์ด (0) | 2022.10.10 |
---|---|
[D+12] class ํด๋์ค (1) | 2022.10.05 |
[D+10] ์ฝ๋ฉ๋ฐ์ด (0) | 2022.10.01 |
[D+09] ์ปดํจํฐ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๊ฐ? (0) | 2022.09.30 |
[D+08] ํจ์, ๋๋ฒ๊ฑฐ (0) | 2022.09.28 |
๋๊ธ