• ABOUT
  • PORTFOLIO
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2025.11.08Java

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

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

String์€ primitive ํƒ€์ž…์ด ์•„๋‹Œ ์ผ๋ฐ˜ ๊ฐ์ฒด์ด์ง€๋งŒ JVM๊ณผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํ•œ ์ตœ์ ํ™” ์ „๋žต์„ ์ ์šฉํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ๊ด€๋ฆฌ, String Pool, ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ด๋‹ค.

๋˜ํ•œ String ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด final ํด๋ž˜์Šค๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์–ด ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

public final class String

์ด๋Š” ๋ฌธ์ž์—ด์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ๋ณด์•ˆ๊ณผ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„์ด๋‹ค. Java์˜ String์ด ์™œ ํŠน๋ณ„ํ•œ์ง€ ํ•ต์‹ฌ ํŠน์ง•์„ ์ค‘์‹ฌ์œผ๋กœ ์‚ดํŽด๋ณด์ž.


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

์ฒซ ๋ฒˆ์งธ ํŠน์ง•์€ String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ผ๋Š” ์ ์ด๋‹ค. ์ฆ‰ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋Š” ์ ˆ๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด โ€œBlueโ€๋ผ๋Š” ๋ฌธ์ž์—ด์— "Cool"์„ ๋ถ™์ด๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๊ฐ€ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

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

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

์ด๋Ÿฌํ•œ ๋ถˆ๋ณ€์„ฑ์€ ๋‹จ์ˆœํ•œ ์–ธ์–ด ํŠน์„ฑ์ด ์•„๋‹ˆ๋ผ Java์˜ ์„ฑ๋Šฅ๊ณผ ์•ˆ์ •์„ฑ์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. 

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


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

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

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

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

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

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

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

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


- new String()๊ณผ์˜ ์ฐจ์ด

๋ฌธ์ž์—ด์„ new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•˜๋ฉด String Pool๊ณผ ๋ณ„๊ฐœ์˜ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ Heap์— ์ƒ์„ฑ๋œ๋‹ค.

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 (๋‚ด์šฉ ๋น„๊ต)

์—ฌ๊ธฐ์„œ "BlueCool" ๋ฆฌํ„ฐ๋Ÿด์€ Pool์— ์กด์žฌํ•˜์ง€๋งŒ new String("BlueCool")์€ Heap์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.


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

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

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

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


- String.intern()

ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฌธ์ž์—ด์„ ์ง์ ‘ String Pool์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ Pool์˜ ์ฐธ์กฐ๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค.

String a = new String("hello");
String b = a.intern();

System.out.println(a == b); // falseโ€‹

intern()๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ๋ฌธ์ž์—ด๊ณผ ๋™์ผํ•œ ๊ฐ’์ด String Pool์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ ๋’ค ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด Pool์— ์žˆ๋Š” ๋ฌธ์ž์—ด ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋งŒ์•ฝ Pool์— ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์—†๋‹ค๋ฉด Pool์— ์ƒˆ๋กœ ๋“ฑ๋กํ•œ ๋’ค ๊ทธ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ค‘์š”ํ•œ ์ ์€ intern()์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๊ธฐ์กด ๊ฐ์ฒด๊ฐ€ Pool๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ a๋Š” ์—ฌ์ „ํžˆ Heap์— ์ƒ์„ฑ๋œ new String("hello") ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  b๋Š” String Pool์— ์กด์žฌํ•˜๋Š” "hello" ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ == ๋น„๊ต ๊ฒฐ๊ณผ๋Š” false๊ฐ€ ๋œ๋‹ค.


3. ๋ฌธ์ž์—ด ์—ฐ์‚ฐ ๋น„์šฉ

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

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

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

์ด ๊ฒฝ์šฐ ๋ฃจํ”„๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ๋งŽ์€ ์ž„์‹œ ๋ฌธ์ž์—ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  GC ๋ถ€๋‹ด์ด ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค.


4. ๋ฌธ์ž์—ด ์กฐ์ž‘์„ ์œ„ํ•œ ๊ฐ€๋ณ€ ๊ฐ์ฒด

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์—์„œ๋Š” ๊ฐ€๋ณ€ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

- StringBuilder

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


- StringBuffer

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

๋‹ค๋งŒ ๋™๊ธฐํ™” ๋น„์šฉ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ˜„๋Œ€ Java ์ฝ”๋“œ์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„ StringBuilder๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


- ์ปดํŒŒ์ผ๋Ÿฌ์˜ StringBuilder ์ตœ์ ํ™”

๋‹จ์ˆœํ•œ + ์—ฐ์‚ฐ์€ ์‹ค์ œ๋กœ ์ปดํŒŒ์ผ ์‹œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜๋œ๋‹ค.

String a = "Hello";
String b = a + "World";

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•œ๋‹ค.

new StringBuilder()
.append(a)
.append("World")
.toString();โ€‹

์ฆ‰ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž์—ด ๊ฒฐํ•ฉ์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ StringBuilder๋กœ ์ตœ์ ํ™”ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฃจํ”„ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ + ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค StringBuilder ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์‹œ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.


5. 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 ์บ์‹œ ํšจ์œจ ์ฆ๊ฐ€๋กœ ์ธํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ 

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

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