Skip to content

Latest commit

ย 

History

History
131 lines (90 loc) ยท 4.67 KB

File metadata and controls

131 lines (90 loc) ยท 4.67 KB

StringBuffer vs String vs StringBuilder

์ข‹์€ ์งˆ๋ฌธ์ด์•ผ! StringBuffer๋Š” ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ฐ€๋ณ€ ๋ฌธ์ž์—ด ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜์•ผ. ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, StringBuffer๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด์ธ String๋ณด๋‹ค ์„ฑ๋Šฅ์ ์œผ๋กœ ๋” ์œ ๋ฆฌํ•ด.


1. StringBuffer๋ž€?

  • StringBuffer๋Š” ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด์„ **์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(Mutable Object)**๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํด๋ž˜์Šค์•ผ.
  • ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์™€ ์„ฑ๋Šฅ์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.

์˜ˆ์‹œ: String๊ณผ StringBuffer์˜ ์ฐจ์ด

// String: ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๊ณ„์† ์ƒ์„ฑ
String str = "Hello";
str = str + " World";  // ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฐ์ฒด ์ƒ์„ฑ ("Hello World")
System.out.println(str);  // ์ถœ๋ ฅ: Hello World

// StringBuffer: ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");  // ๊ธฐ์กด ๊ฐ์ฒด์— ๋ฌธ์ž์—ด ์ถ”๊ฐ€
System.out.println(sb.toString());  // ์ถœ๋ ฅ: Hello World
  • String์€ "Hello World"๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์ง€๋งŒ,
    StringBuffer๋Š” ๊ธฐ์กด ๊ฐ์ฒด์— " World"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์–ด.

2. StringBuffer์˜ ์ฃผ์š” ํŠน์ง•

  1. ๊ฐ€๋ณ€์„ฑ(Mutable)
    • StringBuffer๋Š” ๋ฌธ์ž์—ด์„ ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด.
    • ๋ฌธ์ž์—ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ํŠน์ • ์œ„์น˜์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์–ด.
  2. ๋™๊ธฐํ™”(Synchronized)
    • StringBuffer๋Š” **์Šค๋ ˆ๋“œ-์•ˆ์ „(Thread-Safe)**ํ•œ ํด๋ž˜์Šค์•ผ.
    • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— StringBuffer๋ฅผ ์ˆ˜์ •ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ์„ค๊ณ„๋์–ด.
    • ๊ทธ๋Ÿฌ๋‚˜ ๋™๊ธฐํ™” ๋•Œ๋ฌธ์— StringBuilder๋ณด๋‹ค ์กฐ๊ธˆ ๋А๋ฆด ์ˆ˜ ์žˆ์–ด.
  3. ์œ ์—ฐํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
    • StringBuffer๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ **๋ฒ„ํผ(buffer)**๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด ํฌ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ด.
    • ํ•„์š”ํ•  ๋•Œ๋งŒ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.

3. StringBuffer์™€ StringBuilder์˜ ์ฐจ์ด

  • StringBuffer๋Š” **๋™๊ธฐํ™”(Synchronized)**๋ฅผ ์ง€์›ํ•ด์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด.
  • StringBuilder๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„์„œ, ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋” ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•ด.

๊ฐ„๋‹จํ•œ ๋น„๊ต:

ํŠน์„ฑ String StringBuffer StringBuilder
๊ฐ€๋ณ€์„ฑ ๋ถˆ๋ณ€ (Immutable) ๊ฐ€๋ณ€ (Mutable) ๊ฐ€๋ณ€ (Mutable)
๋™๊ธฐํ™” ๋ถˆํ•„์š” ๋™๊ธฐํ™” ์ง€์› (Thread-Safe) ๋™๊ธฐํ™” ์—†์Œ (๋” ๋น ๋ฆ„)
์„ฑ๋Šฅ ๋А๋ฆผ ๋™๊ธฐํ™”๋กœ ์•ฝ๊ฐ„ ๋А๋ฆผ ๋™๊ธฐํ™”๊ฐ€ ์—†์–ด ๋น ๋ฆ„
๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ์ ํ•ฉํ•˜์ง€ ์•Š์Œ ์ ํ•ฉ ์ ํ•ฉํ•˜์ง€ ์•Š์Œ

4. StringBuffer ์ฃผ์š” ๋ฉ”์„œ๋“œ

StringBuffer์—๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด. ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž:

(1) append(String str)

๋ฌธ์ž์—ด์„ ๋์— ์ถ”๊ฐ€.

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb);  // ์ถœ๋ ฅ: Hello World

(2) insert(int offset, String str)

ํŠน์ • ์œ„์น˜์— ๋ฌธ์ž์—ด ์‚ฝ์ž….

StringBuffer sb = new StringBuffer("Hello");
sb.insert(5, " Java");
System.out.println(sb);  // ์ถœ๋ ฅ: Hello Java

(3) replace(int start, int end, String str)

ํŠน์ • ๋ฒ”์œ„์˜ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๊ต์ฒด.

StringBuffer sb = new StringBuffer("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb);  // ์ถœ๋ ฅ: Hello Java

(4) delete(int start, int end)

ํŠน์ • ๋ฒ”์œ„์˜ ๋ฌธ์ž์—ด ์‚ญ์ œ.

StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 11);
System.out.println(sb);  // ์ถœ๋ ฅ: Hello

(5) reverse()

๋ฌธ์ž์—ด์„ ๋’ค์ง‘๊ธฐ.

StringBuffer sb = new StringBuffer("Hello");
sb.reverse();
System.out.println(sb);  // ์ถœ๋ ฅ: olleH

5. ์–ธ์ œ StringBuffer๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • ๋ฌธ์ž์—ด์„ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€/์‚ญ์ œํ•ด์•ผ ํ•  ๋•Œ.
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ž์—ด ์ž‘์—…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ.

์š”์•ฝ

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

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“  ๋ฌผ์–ด๋ด! ๐Ÿ˜Š