์ถ์ฒ
ChatGPT
Immtable vs Mutable ๊ธฐ์ค
1.Immutable ๊ฐ์ฒด
๊ฐ์ฒด๊ฐ ์์ฑ๋ ํ์๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด์ด๋ค. ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค.
2. Mutable ๊ฐ์ฒด
๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด. ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ณ์ํด์ ์์ ํ ์ ์๋ค.
String ํด๋์ค : Immtable ๊ฐ์ฒด
String ๊ฐ์ฒด๋ ํ ๋ฒ ์์ฑ๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค.
ํน์ง
- ์์ ์ฑ: String์ด ๋ถ๋ณ์ด๊ธฐ ๋๋ฌธ์, String ๊ฐ์ฒด๋ฅผ ๊ณต์ ํด๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- ๋ฌธ์์ด ๋ฆฌํฐ๋ด: ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์๋ฐ์์ ์์ ํ(Constant Pool)์์ ๊ด๋ฆฌ๋๋ฉฐ, ๊ฐ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด "hello"์ "hello"๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
- ์ฑ๋ฅ ๋ฌธ์ : ๋ฌธ์์ด์ ์์ฃผ ์์ ํ๋ ์์ (์: ๋ฐ๋ณต์ ์ผ๋ก ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ)์ ๋นํจ์จ์ ์ผ ์ ์๋ค. ๋งค๋ฒ ์๋ก์ด String ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค.
StringBuilder ํด๋์ค : Mutable ๊ฐ์ฒด
StringBuilder ๊ฐ์ฒด๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๋๋ค.
ํน์ง
- ์ฑ๋ฅ ํฅ์: ๋ฌธ์์ด์ ๋ฐ๋ณต์ ์ผ๋ก ์์ ํ ๋, StringBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๊ณผ ์ฑ๋ฅ ๋ฉด์์ ํจ์จ์ ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ ํ์ ์์ด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ ํ ์ ์๋ค.
- ์ฌ์ฉ ์: ๋ฌธ์์ด์ ๋์ ์ผ๋ก ์์ฑํ๊ฑฐ๋, ๋ฐ๋ณต์ ์ผ๋ก ๋ฌธ์์ด์ ์ถ๊ฐ, ์ญ์ , ์์ ํ๋ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ: StringBuilder๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ์ง ์๋ค. ๋จ์ผ ์ค๋ ๋์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์๋ค.
StringBuffer ํด๋์ค : Mutable ๊ฐ์ฒด + Thread-Safe
StringBuffer๋ StringBuilder์ ๊ฐ์ด ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ๋ณ ํด๋์ค์ด๋ค.
ํน์ง
- ์ค๋ ๋ ์์ : StringBuffer๋ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๋ค. ์ฆ, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐํ(synchronization)๊ฐ ์ ์ฉ๋์ด ์๋ค.
- ์ฑ๋ฅ: StringBuffer๋ ๋๊ธฐํ๋ก ์ธํด StringBuilder๋ณด๋ค ์ฑ๋ฅ์ด ๋ค์ ๋จ์ด์ง ์ ์๋ค. ์ค๋ ๋ ์์ ์ฑ์ด ํ์ ์๋ ๊ฒฝ์ฐ StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๋ค.
์์ ์ฝ๋
// Immutable String Example
String str1 = "Hello";
String str2 = str1.concat(" World"); // ์๋ก์ด ๋ฌธ์์ด ์์ฑ
System.out.println(str1); // ์ถ๋ ฅ: Hello
System.out.println(str2); // ์ถ๋ ฅ: Hello World
// Mutable StringBuilder Example
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // ๋์ผ ๊ฐ์ฒด๋ฅผ ์์
System.out.println(sb.toString()); // ์ถ๋ ฅ: Hello World
// Mutable and Thread-Safe StringBuffer Example
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World"); // ๋์ผ ๊ฐ์ฒด๋ฅผ ์์
System.out.println(sbf.toString()); // ์ถ๋ ฅ: Hello World
- String: ๋ถ๋ณ ๊ฐ์ฒด๋ก์ ๋ฌธ์์ด์ด ๋ณํ์ง ์์์ ๋ณด์ฅํ์ง๋ง, ๋ฌธ์์ด์ ์์ฃผ ์์ ํ ๋๋ ๋นํจ์จ์ ์ผ ์ ์๋ค.
- StringBuilder: ๊ฐ๋ณ ๊ฐ์ฒด๋ก์ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ์์ ํ ์ ์์ผ๋ฉฐ, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ํ์ง ์๋ค.
- StringBuffer: ๊ฐ๋ณ ๊ฐ์ฒด๋ก์ ๋ฌธ์์ด์ ์์ ํ ์ ์์ผ๋ฉฐ, ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ์ง๋ง ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
ChatGPT ๊ธ์ ์ถ์ฒ
๋ฐฉ๊ธ ์ค๋ช ํ ๋ด์ฉ์ ์ถ์ฒ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์๋ฐ ๊ณต์ ๋ฌธ์:
- ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์์ :
- "Effective Java" by Joshua Bloch
- "Java: The Complete Reference" by Herbert Schildt
- ์จ๋ผ์ธ ์์:
์ด ์ถ์ฒ๋ค์ String, StringBuilder, ๋ฐ StringBuffer์ ํน์ฑ๊ณผ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์์ธํ ์ค๋ช ํ๊ณ ์์ต๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธํจํด] ํ๋ก์ ํจํด (0) | 2024.08.19 |
---|---|
[Java] ํด๋์ค ์์ ํด๋์ค / Static Nested Class, Member Inner Class, Local Inner class, Anonymous Inner Class (0) | 2024.08.19 |
[Java] ์๋ฐ ์์ธ ์ ๋ต (0) | 2024.08.17 |
[Java] if ๋ฌธ์ด ์๋๋ฐ switch ๋ฌธ์ ๋ง๋ ์ด์ (0) | 2024.08.17 |
[Java] switch๋ฌธ์ jump table (0) | 2024.08.17 |