Skip to content

Commit

Permalink
GITBOOK-231: No subject
Browse files Browse the repository at this point in the history
  • Loading branch information
GoldenPearls authored and gitbook-bot committed Jan 16, 2025
1 parent 56cb6a9 commit ca028e0
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 0 deletions.
1 change: 1 addition & 0 deletions developLog/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
* [์ž๋ฐ” ๋ฌธ๋ฒ• ํ•œ๋ˆˆ์— ์ •๋ฆฌ 2ํŽธ](programming-lanuage/java/grammar/2.md)
* [NullPointException์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.](programming-lanuage/java/grammar/nullpointexception-..md)
* [Call by value vs Call by Reference๊ณผ ๊ธฐ๋ณธํ˜•๊ณผ ์ฐธ์กฐํ˜•](programming-lanuage/java/grammar/call-by-value-vs-call-by-reference.md)
* [StringBuffer vs String vs StringBuilder](programming-lanuage/java/grammar/stringbuffer-vs-string-vs-stringbuilder.md)
* [๊น€์˜ํ•œ๋‹˜ ์ž๋ฐ” ๊ฐ•์˜ ๋ชจ์Œ](programming-lanuage/java/younghan-lecture/README.md)
* [์ž๋ฐ” ์ž…๋ฌธ ๊ฐ•์˜ ์ •๋ฆฌ](programming-lanuage/java/younghan-lecture/undefined.md)
* [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”](programming-lanuage/java/effective-java/README.md)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# StringBuffer vs String vs StringBuilder

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

***

#### 1. **StringBuffer๋ž€?**

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

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

```java
// 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)`**

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

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

**(2) `insert(int offset, String str)`**

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

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

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

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

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

**(4) `delete(int start, int end)`**

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

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

**(5) `reverse()`**

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

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

***

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

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

***

#### ์š”์•ฝ

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

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

0 comments on commit ca028e0

Please sign in to comment.