๐String ํด๋์ค
(1) ๋ถ๋ณ(Immutable) ๊ฐ์ฒด
String ๊ฐ์ฒด๋ ํ ๋ฒ ์์ฑ๋๋ฉด ๊ทธ ๊ฐ์ ๋ฐ๊ฟ ์ ์์
๋ฌธ์์ด์ ์์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ๋ ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ ํ, ํฌ์ธํฐ(๋ฌธ์์ด ๋ณ์)๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ๋ฐ๊พธ๋ ๊ฒ
(2) ์ ๋ถ๋ณ์ผ๊น?
๋ณด์: ๋ฐ์ดํฐ๊ฐ ์ฝ๊ฒ ๋ณ๊ฒฝ๋์ง ์์์ ์์ ํจ
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์
๋ฌธ์์ด ๋ฆฌํฐ๋ด ํ(๋ฌธ์์ด ์ฌ์ฌ์ฉ)์ ์ฌ์ฉํ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
(3) String Constant Pool
๊ฐ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ํ๋ฉ๋ชจ๋ฆฌ์ ์คํธ๋ง ํ์์ ํ๋๋ง ์์ฑํ์ฌ ๊ณต์ ํจ
String a = "happy";
String b = "happy";
System.out.println(a == b); // true
(4) String literal vs new ์ฐ์ฐ์
String literal("๋ฌธ์์ด")์ String pool์์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ ์ฌ์ฌ์ฉ
new์ฐ์ฐ์๋ก ์์ฑํ ๋ฌธ์์ด์ ๊ทธ ๋ด์ฉ์ด ๊ฐ๋๋ผ๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด
String a = new String("happy");
String b = new String("happy");
System.out.println(a == b); // false
String c = "happy";
System.out.println(a == c); // false
๐StringBuilder ํด๋์ค
(1) StringBuilder๋?
๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๋(mutable) ๊ฐ์ฒด
๋ฌธ์์ด์ ๋ฐ๋ณต์ ์ผ๋ก ๋ํ๊ฑฐ๋ ์์ ํด์ผ ํ ๋ ์ฌ์ฉ
(2) ๋์ ๋ฐฉ์
๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ณ ๋ฐฐ์ด(char ๋ฐฐ์ด)์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ์ฒ๋ฆฌ
๋ฌธ์์ด์ ์ถ๊ฐํด๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ถ์
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // Hello World
(3) ํน์ง
๋ฐ๋ณต์ ์ธ ๋ฌธ์์ด ์กฐ์ ์ ์ฑ๋ฅ์ด ์ข์
๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์์
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ์ง ์์
๐StringBuffer ํด๋์ค
(1) StringBuffer๋?
StringBuilder์ ๊ฑฐ์ ๋์ผํ ๊ธฐ๋ฅ์ ํ์ง๋ง ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋ ํด๋์ค
(2) ๋์ ๋ฐฉ์
๋ด๋ถ ๋๊ธฐํ(synchronized)๋ฅผ ํตํด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผํด๋ ์์ ํ๊ฒ ์๋
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb.toString()); // Hello World
(3) ํน์ง
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ
๋๊ธฐํ๋ก ์ธํด StringBuilder๋ณด๋ค ๋๋ฆผ
๐์ธ ํด๋์ค์ ์ฐจ์ด์
String
StringBuilder
StringBuffer
๊ฐ๋ณ/๋ถ๋ณ
๋ถ๋ณ (immutable)
๊ฐ๋ณ (mutable)
๊ฐ๋ณ (mutable)
์ค๋ ๋ ์์ ์ฑ
์ค๋ ๋ ์์ ํ์ ์์
์ค๋ ๋ ์์ ํ์ง ์์
์ค๋ ๋ ์์ ํจ (synchronized)
์ฑ๋ฅ (๋จ์ผ ์ค๋ ๋)
๋๋ฆผ (์ ๊ฐ์ฒด ์์ฑ)
๊ฐ์ฅ ๋น ๋ฆ
์ฝ๊ฐ ๋๋ฆผ
์ฃผ ์ฉ๋
๋ณ๊ฒฝ ์๋ ๋ฌธ์์ด ์ฒ๋ฆฌ
๋ฌธ์์ด ๋ฐ๋ณต ์์ , ๋จ์ผ ์ค๋ ๋
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด ์์
๋ณ๊ฒฝ์ด ์๋ ๋ฌธ์์ด → String
์ถ๊ฐ, ์์ , ์ญ์ ๋ฑ ๋ฌธ์์ด ์กฐ์์ด ํ์ํ๋ฉด์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ → StringBuilder
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด์ ์กฐ์ํด์ผ ํ ๊ฒฝ์ฐ → StringBuffer