Coding Planet

String, StringBuffer, StringBuilder์˜ ์ฐจ์ด์ ๊ณผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•, ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ ๋ณธ๋ฌธ

๐Ÿ’ป Java Study/Java ์ด๋ก  ์ •๋ฆฌ

String, StringBuffer, StringBuilder์˜ ์ฐจ์ด์ ๊ณผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•, ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ

jhj.sharon 2023. 8. 24. 22:42
๋ฐ˜์‘ํ˜•

`String`, `StringBuffer`, `StringBuilder`๋Š” ๋ชจ๋‘ Java์—์„œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ๊ฐ ํด๋ž˜์Šค์˜ ํŠน์ง•๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.

 

| String

  • ๋ถˆ๋ณ€์„ฑ (Immutability): String ํด๋ž˜์Šค์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ String ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€์ด๋‹ค. ์ฆ‰, String์— ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ฃผ๋ ค๊ณ  ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆ๋ณ€์„ฑ์€ ํŠน์ • ์ƒํ™ฉ์—์„œ๋Š” ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ฌธ์ž์—ด ์กฐ์ž‘ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚  ๋•Œ๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์‹œ: ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ (+ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

 

| StringBuffer

  • ๊ฐ€๋ณ€์„ฑ (Mutability): StringBuffer๋Š” ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ๋•Œ ๊ธฐ์กด ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋™๊ธฐํ™” (Synchronization): StringBuffer์˜ ๋ฉ”์„œ๋“œ๋“ค์€ ๋™๊ธฐํ™”๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • String์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. -> ์ฝ”ํ…Œ์—์„œ ๋งŽ์ด ์”€
//append():StringBuffer์˜ ๋์— ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");  // "Hello World"

//insert():์ง€์ •๋œ ์œ„์น˜์— ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
StringBuffer sb = new StringBuffer("Hello World");
sb.insert(6, "Java ");  // "Hello Java World"

//delete():์‹œ์ž‘ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋ ์ธ๋ฑ์Šค ์ „๊นŒ์ง€์˜ ๋ฌธ์ž์—ด ๋ถ€๋ถ„์„ ์‚ญ์ œ
StringBuffer sb = new StringBuffer("Hello Java World");
sb.delete(6, 11);  // "Hello World"

//deleteCharAt():์ง€์ •๋œ ์œ„์น˜์˜ ๋ฌธ์ž๋ฅผ ์‚ญ์ œ
StringBuffer sb = new StringBuffer("Hello World");
sb.deleteCharAt(5);  // "HelloWorld"

//replace():๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ
StringBuffer sb = new StringBuffer("Hello World");
sb.reverse();  // "dlroW olleH"

 

| StringBuilder

  • ๊ฐ€๋ณ€์„ฑ (Mutability): StringBuilder ์—ญ์‹œ StringBuffer์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด ์กฐ์ž‘ ์‹œ ๊ธฐ์กด ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•  ๋•Œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋™๊ธฐํ™” ์—†์Œ: StringBuilder๋Š” StringBuffer์™€ ๋‹ฌ๋ฆฌ ๋™๊ธฐํ™”๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” StringBuffer๋ณด๋‹ค ๋” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • StringBuilder๋Š” StringBuffer์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋ฉฐ, ๋™์ผํ•œ API๋ฅผ ๋Œ€๋ถ€๋ถ„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

์ฐจ์ด์  ์š”์•ฝ

  1. ๋ถˆ๋ณ€์„ฑ vs ๊ฐ€๋ณ€์„ฑ: String์€ ๋ถˆ๋ณ€, StringBuffer์™€ StringBuilder๋Š” ๊ฐ€๋ณ€
  2. ๋™๊ธฐํ™”: StringBuffer๋Š” ๋™๊ธฐํ™”๋˜์–ด ์žˆ์–ด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๋‚˜ ์„ฑ๋Šฅ์— ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ˜๋ฉด, StringBuilder๋Š” ๋™๊ธฐํ™”๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋” ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

**์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ๋ฌธ์ž์—ด ๋ณ€๊ฒฝ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ: String
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด ๋ณ€๊ฒฝ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ: StringBuffer
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด ๋ณ€๊ฒฝ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ: StringBuilder
๋ฐ˜์‘ํ˜•
Comments