2022. 3. 24. 08:00ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Java
๐ String Instance
JAVA์์ String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๊ฐ ์กด์ฌํ๋ ๊ฒ์ด์์.
์ฒซ๋ฒ์งธ๋ String literal, ์ฆ ํฐ ๋ฐ์ดํ(" ")๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๊ณ , ๋๋ฒ์งธ๋ new ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด ๋ ์น๊ตฌ๋ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น์?
์์ ์ฝ๋
String literal๋ก ์์ฑํ ๊ฐ์ฒด๋ ๋ด์ฉ์ด ๊ฐ๋ค๋ฉด ๊ฐ์ ๊ฐ์ฒด. ์ฆ, ๋์ผ Memory Address๋ฅผ ๊ฐ๋ฅดํค๊ณ ์๋ ๊ฒ์ด์์.
ํ์ง๋ง, New ์ฐ์ฐ์๋ก ์์ฑํ String ๊ฐ์ฒด๋ ๋ด์ฉ. ์ฆ, ๊ฐ์ ๊ฐ์๋ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด์ด๋ฉฐ, Memory Address๊ฐ ๋ค๋ฅธ ๊ฒ์ด์์.
๐ฝ JAVA String Pool
์ฃผ๋ํ๋์ ๊ตญ๋น ์ง์ ํ์์์ ๊ณต๋ถํ ๋, `new ์ฐ์ฐ์`๋ก String ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ๋ง๋ผ๊ณ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ ๊ฒ์ด์์.
String literal๋ก ์์ฑํ๋ฉด ํด๋น String ๊ฐ์ `Heap Memory` ์์ญ ์์ `String Constant Pool`์ ์ ์ฅ๋์ด ์ฌ์ฌ์ฉ๋์ง๋ง, `new ์ฐ์ฐ์`๋ก ์์ฑํ๋ฉด ๊ฐ์ ๋ด์ฉ์ด๋ผ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ๊ฐ `Heap Memory` ์์ญ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ด์์.
์์ ๊ทธ๋ฆผ์๋ ๋์ ์์ง ์์ง๋ง, ์์ฑ๋ String ๊ฐ์ฒด(์ธ์คํด์ค)๋ `Stack Memory` ์์ญ์ ์ ์ฅ ๋๋ ๊ฒ์ด์์.
`Heap Memory`์์ญ์๋ "cat", "Dog"๊ณผ ๊ฐ์ 'Value'๋ค์ด ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ, ๊ทธ๋ฆผ์ ์ค๋ฅธ์ชฝ์ ๋ณด๋ฉด ์ค์ํ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ ์ฐ๋ฆฌ๋ ์ฃผ๋ชฉํด์ผ ํ๋ ๊ฒ์ด์์.
โ String literal๋ก ์์ฑ๋ ๊ฐ์ฒด๋ `String Pool`์ ๋ค์ด๊ฐ๋ค.
โ String literal๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๊ฐ(์: "Cat")์ด ์ด๋ฏธ `String pool`์ ์กด์ฌํ๋ฉด ํด๋น ๊ฐ์ฒด๋ `String Pool`์ Reference(Memory ์ฃผ์๊ฐ)๋ฅผ ์ฐธ์กฐํ๋ค. ๊ทธ๋ฆผ์์ s1๊ณผ s2๊ฐ ๊ฐ์ ๊ณณ์ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ๋ ์ด ๋๋ฌธ์ด๋ค.
โ `new ์ฐ์ฐ์`๋ก ์์ฑํ String ์ธ์คํด์ค๋ ๊ฐ์ ๊ฐ์ด `String Pool`์ ์ด๋ฏธ ์๋๋ผ๋, `Heap Memory`์์ญ ๋ด ๋ณ๋์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
๐ฝ String interning
`String Class`์๋ `intern()`์ด๋ผ๋ Method๊ฐ ์๋ ๊ฒ์ด์์.
`intern()`์ ํด๋น String๊ณผ ๋๋ฑํ(equal; ๊ฐ์ด ๊ฐ๋ค) String ์ธ์คํด์ค๊ฐ ์ด๋ฏธ String Pool์ ์กด์ฌํ๋ฉด ๊ทธ ์ธ์คํด์ค๋ฅผ ๊ทธ๋๋ก ๋ฐํํด ๋ฒ๋ฆฌ๋ ๊ฒ์ด์์. ๋ง์ฝ ๊ทธ๋ ์ง ์๋ค๋ฉด ํธ์ถ๋ String Pool์ ์ถ๊ฐํ๊ณ , ์ธ์คํด์ค์ Reference๋ฅผ ๋ฐํํ๋ ๊ฒ์ด์์.
์์ ์ฝ๋
`new ์ฐ์ฐ์`๋ฅผ ์ด์ฉํด ์์ฑํ String ์ธ์คํด์ค๋ String Pool ๋ฐ์ ์์ง๋ง, `intern()` Method๊ฐ ํธ์ถ๋๊ณ , String Pool๋ก ์ด๋ํด String Pool์ ์๋ ์์๋ ์ธ์คํด์ค์ ๋์ผํ Reference ๊ฐ์ ๊ฐ์ง๋ค๋ ๊ฒ์ ์ ์ ์๋ ๊ฒ์ด์์.
๋ฐ.๋ผ.์
String ์ธ์คํด์ค๋ฅผ `new ์ฐ์ฐ์`๋ก ์์ฑํ๋ฉด ๊ฐ์ ๊ฐ์ด๋ผ๋ `Heap Memory` ์์ญ์ ๋งค๋ฒ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ฒ ๋๋๋ฐ, ์ด๊ฑด ์์(Memory) ๋ญ๋น์ด๊ณ , ๋น ํจ์จ์ ์ธ ๊ฒ์ด์์. ๋ํ, String์ด ๊ฐ๋ ๋ถ๋ณ์ฑ ๋ํ, ์๋ฏธ๊ฐ ์์ด์ ธ ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ String literal๋ฅผ ์ด์ฉํ์ฌ String ์์ฑ์ ํ๋ ๊ฒ์ด ์ข์ ๋ฐฉ๋ฒ์ด๋๋๋ค.
๐ Constant Pool
JAVA Class File์ ๊ตฌ์ฑ ํญ๋ชฉ ์ค ํ๋์ธ `Constant Pool`์ literal ์์ ๊ฐ์ ์ ์ฅํ๋ ๊ณณ์ธ ๊ฒ์ด์์.
์ด ์น๊ตฌ๋ String ๋ฟ ์๋๋ผ, ๋ชจ๋ ์ข
๋ฅ์ ์ ์, ๋ฌธ์์ด, ์๋ณ์ ์ด๋ฆ, Class ๋ฐ Method์ ๋ํ Reference์ ๊ฐ์ Value๊ฐ ํฌํจ ๋๋ ๊ฒ์ด์์.
`Constant Pool`์ ํน์ ์์์ ๋ํ ๋ชจ๋ Index ๋๋ Refence๋ฅผ 16Bit (Type u2)๋ฒํธ๋ก ์ ๊ณตํ๋ฉฐ, ์ฌ๊ธฐ์ Index Value 1์ ํ์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ํ๋ด๋ ๊ฒ์ด์์.
`Constant Pool` ํน์ ์์ํ์ด๋ ์ฐ๋ฆฌ๊ฐ Integer, String๊ณผ ๊ฐ์ Reference Type์ Data Value ๋๋, Method ํธ์ถ, Class ํธ์ถ ๋ฑ์ ์ ์ฅํ๋ JVM์ Memory ๊ณต๊ฐ ์ค ํ๋์ธ ๊ฒ์ด์์.
Vender๋ง๋ค ์์ ํ์ ์์น๊ฐ `Heap Memory`์์ญ์ ์๊ฑฐ๋, Method ์์ญ์ ์์ ์ ์๋ ๊ฒ์ด์์.
'๊ฐ๋ ์ ๋ฆฌ ์์ ์ค > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Open Source Project] JitPack์ ๋ด๊ฐ ๋ง๋ Library & Framework ์ฌ๋ฆฌ๊ธฐ (0) | 2022.12.10 |
---|---|
[JAVA] Object Class (2) | 2022.03.25 |
[JAVA] getDeclaredFields ํ์ฉํ์ฌ VO ๊ฐ์ฒด์ ํ๋ฒ์ ์ด์ฉํ๊ธฐ (0) | 2022.03.11 |
[Java] ๋คํ์ฑ(polymorphism) (0) | 2021.09.18 |
[JAVA] Class Method(static Method)์ ์ธ์คํด์ค Method (0) | 2021.09.13 |