• ABOUT
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.11.08Java

๐Ÿ”ค Java์˜ String์ด ํŠน๋ณ„ํ•œ ์ด์œ  - String์˜ ํ•ต์‹ฌ ํŠน์ง• 3๊ฐ€์ง€

์ž๋ฐ”์—์„œ String์€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด ํƒ€์ž…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ์‚ฌ์‹ค String์€ Java ์–ธ์–ด ์ „์ฒด์—์„œ ํŠน๋ณ„ํ•˜๊ฒŒ ์ทจ๊ธ‰๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. 

primitive ํƒ€์ž…์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ฐ˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋„ ์•Š๋Š”๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ„๋„์˜ ๊ด€๋ฆฌ ์ „๋žต์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Java์˜ String์ด ์™œ ํŠน๋ณ„ํ•œ์ง€ ํ•ต์‹ฌ ํŠน์ง•์„ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด์ž. 
 

1) ๋ถˆ๋ณ€์„ฑ(Immutable) 

์ฒซ ๋ฒˆ์งธ ํŠน์ง•์€ String์€ ๋ถˆ๋ณ€์ด๋ผ๋Š” ์ ์ด๋‹ค. ์ฆ‰, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋Š” ์ ˆ๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. โ€œBlueโ€๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฌ๊ธฐ์— โ€œCoolโ€์„ ๋ถ™์—ฌ โ€œBlueCoolโ€๋กœ ๋งŒ๋“ค ๋•Œ ์‹ค์ œ ๋™์ž‘์€ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
 

java
String me = "Blue";
me += "Cool";

// ๊ฒฐ๊ณผ์ ์œผ๋กœ "BlueCool"์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.


๋ถˆ๋ณ€์„ฑ์€ ๋‹จ์ˆœํžˆ ์–ธ์–ด์  ํŠน์„ฑ์ด ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ Java ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. 

  • ์Šค๋ ˆ๋“œ ์•ˆ์ „(Thread-safe) 
    ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ฝ๊ณ  ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š” ์—†๋‹ค.
  • ์บ์‹ฑ ๋ฐ ๊ณต์œ  
    ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ๊ณต์œ ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— String Pool๊ณผ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณด์•ˆ 
    URL, ํŒŒ์ผ ๊ฒฝ๋กœ, SQL ์ฟผ๋ฆฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฌธ์ž์—ด์ด ์ค‘๊ฐ„์— ๋ณ€๊ฒฝ๋˜๋ฉด ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€์„ฑ์€ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํฐ ์—ญํ• ์„ ํ•œ๋‹ค. 

2) String Intern Pool (๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€) 

๋‘ ๋ฒˆ์งธ ํŠน์ง•์€ JVM์ด ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ํ’€์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ด๋ฅผ String Intern Pool ๋˜๋Š” ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€(String Constant Pool) ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

์ž๋ฐ” ์ฝ”๋“œ์—์„œ โ€œBlueCoolโ€ ๊ฐ™์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ์žฅํ•˜๋”๋ผ๋„ JVM์€ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ํ•œ ๋ฒˆ ๋งŒ๋“  ๋ฌธ์ž์—ด์„ ํ’€์— ์ €์žฅํ•ด๋‘๊ณ  ์žฌ์‚ฌ์šฉํ•œ๋‹ค. 
 

java
String blue = "BlueCool";
String cool = "BlueCool"; // ๋ฌธ์ž์—ด ํ’€์—์„œ ๊ฐ™์€ ๊ฐ์ฒด ์‚ฌ์šฉ

System.out.println(blue == cool); // true


์œ„ ์ฝ”๋“œ์—์„œ โ€œBlueCoolโ€ ์ด๋ผ๋Š” ๋ฆฌํ„ฐ๋Ÿด์€ ์‹ค์ œ๋กœ ํ’€์— ๋‹จ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜๋ฉฐ blue์™€ cool ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— == ๋น„๊ต๋„ true๊ฐ€ ๋œ๋‹ค. 

์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•๋ถ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ๋‹ค. 

  • ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ 
    ๋™์ผํ•œ ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ํ•˜๋‚˜๋งŒ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ˆ์•ฝ๋œ๋‹ค.
  • ๋น ๋ฅธ ๋น„๊ต 
    ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ == ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ๋ถˆ๋ณ€์„ฑ๊ณผ์˜ ์กฐํ•ฉ 
    ๋ฌธ์ž์—ด์ด ๋ถˆ๋ณ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. 

์ด Intern Pool ๊ธฐ๋Šฅ์€ ์ž๋ฐ”์˜ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 

3) ์—ฐ์‚ฐ ๋น„์šฉ์˜ ํŠน์ˆ˜์„ฑ 

์•ž์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋”ํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. 

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด + ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 
 

java
String result = "";
for (int i = 0; i < 10000; i++) {
  result += i; // ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ์ƒˆ๋กœ์šด String ๊ฐ์ฒด ์ƒ์„ฑ
}


์ด๋Ÿฐ ํŒจํ„ด์€ ๋ฃจํ”„๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ์—„์ฒญ๋‚œ ์ˆ˜์˜ ์ž„์‹œ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๊ณ  ์ด๋Š” GC ๋ถ€ํ•˜ ์ฆ๊ฐ€์™€ ํ•จ๊ป˜ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์ง„๋‹ค. 

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

- StringBuilder

๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€๋ณ€ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ธ๋‹ค. ๋™๊ธฐํ™”๊ฐ€ ํ•„์š” ์—†๋Š” ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค. 

- StringBuffer

StringBuilder์™€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ ๋™๊ธฐํ™”(synchronized) ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์–ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด ์กฐ์ž‘์ด ๋นˆ๋ฒˆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 
 



โœ” ์ถ”๊ฐ€ ํฌ์ธํŠธ 

ํ•ต์‹ฌ ํŠน์ง• 3๊ฐ€์ง€์™€ ํ•จ๊ป˜ String์„ ์‚ฌ์šฉํ•  ๋•Œ ์•Œ์•„๋‘๋ฉด ์ข‹์€ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํฌ์ธํŠธ๊ฐ€ ์žˆ๋‹ค. 

* equals()์™€ == ๋น„๊ต 

๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ Intern Pool์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— == ๋น„๊ต๋กœ ๊ฐ™์€ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ๋น„๊ต๋Š” equals()๊ฐ€ ์ •์„์ด๋‹ค. 

์™œ๋ƒํ•˜๋ฉด new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
 

java
String blue = "BlueCool";
String cool = "BlueCool";
String blueCool = new String("BlueCool");

System.out.println(blue == cool);          // true (String Intern Pool)
System.out.println(blue == blueCool);      // false (new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑ๋œ ์ƒˆ ๊ฐ์ฒด)
System.out.println(blue.equals(blueCool)); // true (๋‚ด์šฉ ๋น„๊ต)


๋ฌธ์ž์—ด์˜ ์‹ค์ œ ๋‚ด์šฉ์„ ๋น„๊ตํ•  ๋•Œ๋Š” ํ•ญ์ƒ equals()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฐธ์กฐ ๋™์ผ์„ฑ(๊ฐ™์€ ๊ฐ์ฒด ์—ฌ๋ถ€)์ด ํ™•์‹คํžˆ ํ•„์š”ํ•  ๋•Œ๋งŒ == ์„ ์‚ฌ์šฉํ•œ๋‹ค. 
 

* Java 9๋ถ€ํ„ฐ ๋„์ž…๋œ Compact Strings 

Java 9๋ถ€ํ„ฐ String์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ๋‹ค. 

  • Java 8 ์ด์ „ 
    ๋‚ด๋ถ€ ๊ตฌ์กฐ: char[] 
    ๋ฌธ์ž 1๊ฐœ๋‹น 2๋ฐ”์ดํŠธ(UTF-16) 
    ASCII ๋ฌธ์ž์—ด๋„ 2๋ฐ”์ดํŠธ ์‚ฌ์šฉ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋น„ํšจ์œจ ๋ฐœ์ƒ
  • Java 9 ์ดํ›„ (Compact Strings) 
    ๋‚ด๋ถ€ ๊ตฌ์กฐ: byte[] + coder ํ”Œ๋ž˜๊ทธ
    ASCII ๋ฌธ์ž์—ด์€ 1๋ฐ”์ดํŠธ, ๊ทธ ์™ธ๋Š” UTF-16 ๋ฐฉ์‹ 
    ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ + CPU ์บ์‹œ ํšจ์œจ ์ฆ๊ฐ€๋กœ ์ธํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ 

Compact Strings๋Š” JVM ์ˆ˜์ค€์—์„œ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ ์ตœ์‹  Java์—์„œ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค. 

์ด์ „ ๊ธ€
๐Ÿ”— ์ž๋ฐ”์˜ ๊ฐ์ฒด ๋น„๊ต - equals()์™€ hashCode()๋ฅผ ํ•จ๊ป˜ ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
๋‹ค์Œ ๊ธ€
๐Ÿ’‰ Spring์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์˜์กด์„ฑ ์ฃผ์ž…(DI)
์žฅ์‹์šฉ ๋กœ๊ณ