[JAVA] String Instance / Constant Pool์ด๋ž€?

2022. 3. 24. 08:00ใ†๊ฐœ๋… ์ •๋ฆฌ ์ž‘์—…์‹ค/Java

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿš€ String Instance

JAVA์—์„œ String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด์—์š”.
์ฒซ๋ฒˆ์งธ๋Š” String literal, ์ฆ‰ ํฐ ๋”ฐ์˜ดํ‘œ(" ")๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ , ๋‘๋ฒˆ์งธ๋Š” new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿผ ์ด ๋‘ ์นœ๊ตฌ๋Š” ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ์š”?

 

์˜ˆ์ œ ์ฝ”๋“œ

String ์ƒ์„ฑ Test

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 ์˜์—ญ์— ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•