string
string vs String
string a;
String b;
- ๋ ํ์ ๋ชจ๋ System.String ํ์ ์ผ๋ก ๋์ผ
String Pool
- ์ ์ธ ๋ฐฉ์์ ๋ฐ๋ผ ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์น ๊ฒฐ์
string str1 = "asdf"; // str1 -> ์คํ, "asdf" -> ํ์ string pool
string str2 = new string("asdf"); // str2 -> ์คํ, "asdf" -> ํ
- str1์ ๋ฌธ์์ด์ ํ์ string pool ์ ์ ์ฅ๋์ด, ์ดํ ๊ฐ์ ๋ฌธ์์ด์ด ์ฌ์ฉ๋๋ฉด ์ ์ฅ์๋ฅผ ๊ณต์ ํ๋ค
- str2์ ๋ฌธ์์ด์ ๊ณต์ ๋์ง ์๋๋ค
eqauls() vs. ==
string str1 = "asdf"; // str1 -> ์คํ, "asdf" -> ํ์ string pool ๊ณต์
string str2 = new string("asdf"); // str2 -> ์คํ, "asdf" -> ํ ๋ณ๊ฐ ์ฃผ์
string str3 = "asdf"; // str3 -> ์คํ, "asdf" -> ํ์ string pool ๊ณต์
string str4 = new string("asdf").intern(); // str4 -> ์คํ, "asdf" -> intern ํจ์๋ฅผ ํตํด ํ์ string pool ๊ณต์
str1 == str2; // false
str1 == str3; // true
str1 == str4; // true
- == ๋ ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ ๊ฐ์ฒด์ธ์ง ์ฃผ์๊ฐ์ ๋น๊ต
- equals๋ ๋ ๊ฐ์ฒด์ ๊ฐ์ ๋น๊ต
intern pool
- ๋ฌธ์์ด ํ๋๊ฐ ์์ฑ๋๋ฉด ์ด๋ ํ๋์ฝ๋๋ ์์ ๋ฌธ์์ด์ด๋ฉฐ, ์ธํด ๋ฌธ์์ด์ด๋ค
- ๋ฆฌํฐ๋ด ๋ฌธ์์ด Literal string์ด๋ผ ํ๋ค
- ์์ ๋ฆฌํฐ๋ด ๋ฌธ์์ด์ CLR์ด ๋ชจ์๋์ ํ
์ด๋ธ์ด ์ธํด ํ
- ์ธํด ํ์ ์กด์ฌํ๋ ๋ฌธ์์ด ๊ฐ์ฒด๋ ํ์ ์กด์ฌํ์ง ์์ผ๋ฉฐ, GC ๋์์ด ์๋๋ค
์ธํด ํ ์กด์ฌ ์ด์ ?
- ๋ฌธ์์ด์ด ์ ์ธ๋๊ณ 2ํ ์ด์ ์ฌ์ฉ๋๋ค๋ฉด 2๊ฐ์ ๋์ผํ ๋ฌธ์์ด์ ์๋กญ๊ฒ ์์ฑํ ํ์๊ฐ ์๋ค
- ์์ ์ฌ์ค์ ๊ธฐ๋ฐํ์ ๋, ์ธํด ํ์ ์ถ๊ฐ๋ ๋ฌธ์์ด์ ์ธ์ ์ฌ์ฌ์ฉ๋ ์ง ์ ์ ์์ผ๋ฏ๋ก GC์ ๋์์ด ์๋๋ค
- ํ์ ์์นํ ์ ์๋ค
StringBuilder
string์ ๋ถ๋ณ๊ฐ์ฒด
- string ๊ฐ์ฒด์ ์๋ก์ด ๋ฌธ์์ด์ ๋์ ํ ์, ๊ทธ ๋ฌธ์์ด์ pool์ ์๋กญ๊ฒ ์ ์ฅ
- ๊ธฐ์กด ๋ฌธ์์ด์ pool์๋ ๋จ์์์ผ๋ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋๋ค
- ๊ธฐ์กด ๋ฌธ์์ด์ ์ฐธ์กฐํ๋ string ๊ฐ์ฒด๋ GC์ ์ํด ์์ง
- ์ด ๊ฐ์ ์ํฉ์ด ๋ฐ๋ณต๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ํผํฌ๋จผ์ค์ ์ํฅ์ ์ค๋ค
- intern pool์ด ๋๋ฌด ์ปค์ง๋ฉด ์๋๋ค๋ ๋ป์ธ๊ฐโฆ?
string str = "2022" + "July" + "17th";
- ์์ ๊ฐ์ฒด๋ 3๊ฐ์ string ๊ฐ์ฒด๊ฐ ์กฐํฉ๋์ด ์์ฑ๋๋ฉฐ, ์ด์ค 2๊ฐ string ๊ฐ์ฒด๋ ์กฐํฉ ์ดํ GC์ ์ํด ์์ง๋๋ค
- ๋ฆฌํฐ๋ด ๋ฌธ์์ด ์์ฒด๋ intern pool์ ๋จ์์๋ค
StringBuilder๋ ๊ฐ๋ณ๊ฐ์ฒด
- ๋ฌธ์์ด์ด ๋ณ๊ฒฝ๋ ์, ์๋์ผ๋ก ์ฐธ์กฐํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๊ฒฝ
- System.Text.StringBuidler ํด๋์ค์ ๋ด๋ถ ํจ์๋ฅผ ์คํ
- ํ๋์ ๊ฐ์ฒด์์ ๊ฐ๋ค์ ์กฐํฉ ๋ฐ ์ญ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง
- ์ค๋ฒํค๋๋ฅผ ๋์ง์๋ ์ผ์ด์ค์์์ ์ฌ์ฉ์ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์๋ค
- ๋ฌธ์์ด ์์ ์ด ๋น๋ฒํ๊ฑฐ๋ ๋ฐ๋ณต์ ์ผ ๋
- ๋ง์ ์์ ๋ฌธ์์ด ์กฐํฉ์ด ํ์ํ ๊ฒฝ์ฐ
- ๋์ผํ ์ด์ ๋ก string + string ๋ณด๋ค StringBuilder์ Append๊ฐ ์ ํฉํ ๊ฒฝ์ฐ๊ฐ ์๋ค
์ถ์ฒ
- https://gbsb.tistory.com/255
- https://chipmunk-plump-plump.tistory.com/337
- http://taeyo.net/columns/View.aspx?SEQ=253&PSEQ=23&IDX=5
- https://shpk333.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%A1%B0%ED%95%A9%EA%B2%B0%ED%95%A9%EC%8B%9C-String%EA%B3%BC-StringBuilder%EC%9D%98-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9E%A5%EB%8B%A8%EC%A0%90
- https://stackoverflow.com/questions/33872929/string-literal-and-memory-representation
- https://spiralmoon.tistory.com/entry/C-string-string-%EA%B3%BC-StringBuilderAppend-%EC%B0%A8%EC%9D%B4