# String๊ณผ StringBuffer, StringBuilder
written by sohyeon, hyemin ๐ก
# 1. String ํด๋์ค
์๋ฐ์์ ์ ๊ณตํ๋ ๋ฌธ์์ด์ ์ํ ํด๋์ค์ด๋ค. ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ์ด๋ฅผ ๋ค๋ฃจ๋๋ฐ ํ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ์ฅ ํฐ ํน์ง์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ(immutable)
ํ ์์ฑ์ ๊ฐ์ก๋ค๋ ๊ฒ์ด๋ค.
ํ๋ฒ ์์ฑ๋ String์ธ์คํด์ค๊ฐ ๊ฐ๊ณ ์๋ ๋ฌธ์์ด์ ์ฝ์ด ์ฌ ์๋ง ์๊ณ , ๋ณ๊ฒฝํ ์๋ ์๋ค.
# ex) ๋ฌธ์์ด ๊ฒฐํฉ ์์
String a = "a";
String b = "b";
String a = a+b;
์์ ๊ฐ์ด ๋ฌธ์์ด์ ๊ฒฐํฉํ๋ ๊ฒฝ์ฐ, ์ธ์คํด์ค ๋ด์ ๋ฌธ์์ด์ด ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ
์๋ก์ด ๋ฌธ์์ด ("ab")๊ฐ ๋ด๊ธด String์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ฌธ์๋ฅผ ๊ฒฐํฉํ ๋ ์ฐ์ฐ ๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋๋ฏ๋ก ๊ฐ๋ฅํ ์ฐ์ฐํ์๋ฅผ ์ค์ด๋ ๊ฒ์ด ์ข๋ค.
์ด์ฒ๋ผ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์์
์ด ๋ง์ด ํ์ํ ๊ฒฝ์ฐ StringBufferํด๋์ค
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
# 2. StringBuffer
String ํด๋์ค
๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ง์ ๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์์ง๋ง StringBuffer ํด๋์ค
๋ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
๋ด๋ถ์ ์ผ๋ก ๋ฌธ์์ด ํธ์ง์ ์ํ ๋ฒํผ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, StringBuffer ์ธ์คํด์ค
๋ฅผ ์์ฑํ ๋ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ ๋, ์ ์ ํ ๊ธธ์ด์ charํ ๋ฐฐ์ด์ด ์์ฑ๋๊ณ ,
์ด ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํธ์งํ๊ธฐ ์ํ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
# ex)StringBuffer ์์ฑ์
public StringBuffer(int length){
value = new char[length];
shared = false;
}
public StringBuffer(){
this(16);
}
public StringBuffer(String str){
this(str.length()+16);
append(str)
}
StringBuffer ์ธ์คํด์ค์ ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ์ถฉ๋ถํ ์ฌ์ ์๋ ํฌ๊ธฐ๋ก ์ง์ ํ๋ ๊ฒ์ด ์ข๋ค.
๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ง ์๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด 16๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ์์ฑํ๋ค.
String ํด๋์ค์ ์ ์ฌํ ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฌธ์ ์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ์ ๊ฐ์ด ์ ์ฅ๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฉ์๋๋ ๊ฐ๋๋ค.
# 3. StringBuilder
StringBuffer
๋ ๋ฉํฐ์ฐ๋ ๋์ ์์ ํ๋๋ก ๋๊ธฐํ ๋์ด ์๊ณ ๋๊ธฐํ๊ฐ ์ฑ๋ฅ์ ์ ํ ์ํจ๋ค.
๋ฉํฐ์ฐ๋ ๋๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด ์๋ ๊ฒฝ์ฐ, ๋ถํ์ํ ๋๊ธฐํ๋ ์ฑ๋ฅ ์ ํ๋ง ์ ๋ฐํ๊ฒ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด StringBuffer
์์ ์ฐ๋ ๋์ ๋๊ธฐํ๋ง ๋บ StringBuilder
๊ฐ ๊ณ ์๋ ๊ฒ์ด๋ค.
์์ ํ ๋๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก ์์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ฑ์๋ง ๋ฐ๊พธ์ด ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
# ex) ์ฌ์ฉ์์
// StringBuffer
StringBuffer sb = new StringBuffer();
sb.append("abc");
// StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("abc");
# 4. ์ธ๊ฐ์ง์ ๋ํ ๋น๊ต
# 4-1. String๊ณผ StringBuffer
String
์ ๋ถ๋ณ์ฑ <-> StringBuffer
์ ๊ฐ๋ณ์ฑ
์ฃผ์ํ ํฌ์ธํธ๋ ์์ฑ ์ดํ ๋ณํ ์ ์๋ ์๋์ด๋ค.
String
์ new ์ฐ์ฐ์ ํตํด ์์ฑ๋๋ฉด ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ ๋ ๋ณํ์ง ์๋๋ค.
๊ทธ๋์ + ์ฐ์ฐ์ด๋ concat์ ์ด์ฉํด์ ๋ฌธ์์ด์ ๋ณํ๋ฅผ ์ค๋ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋ค๊ฒ ๋๋ค.
์ด๋ ๊ฒ ์๋ก์ด ๋ฌธ์์ด์ด ๋ง๋ค์ด์ง๋ฉด ๊ธฐ์กด์ ๋ฌธ์์ด์ ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํด ์ ๊ฑฐ๋์ผ ํ๋ ๋จ์ (์ธ์ ์ ๊ฑฐ๋ ์ง ๋ชจ๋ฆ)์ด ์๋ค.
๋ฐ๋ผ์ ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์์ง ๋ ๊ณ์ํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ๋ฐ์ ์๋ ๋จ์ ์ด ์๋ค.
๋์ String ํด๋์ค์ ๊ฐ์ฒด๋ ๋ถ๋ณํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ๊ฒ ์ฝ์ด๊ฐ๋ ์กฐํ์ฐ์ฐ์์๋ ํ ํด๋์ค๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์๊ณ
๋ถ๋ณํ๊ธฐ ๋๋ฌธ์ ๋ฉํฐ์ฐ๋ ๋ํ๊ฒฝ์์ ๋๊ธฐํ๋ฅผ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๊ธฐ๋ ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก String ํด๋์ค๋ ๋ฌธ์์ด ์ฐ์ฐ์ด ์ ๊ณ ์กฐํ๊ฐ ๋ง์ ๋ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ ์ ์๊ฒ ์ง๋ง, ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์ ๊ฒฝ์ฐ์๋ StringBuffer์ฌ์ฉ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค.
# 4-2. StringBuffer์ StringBuilder
์ฃผ์ํ ํฌ์ธํธ๋ ๋๊ธฐํ ์ฌ๋ถ
์ด๋ค.
StringBuffer
๋ ๊ฐ ๋ฉ์๋๋ณ๋ก Synchronized Keyword๊ฐ ์กด์ฌํ์ฌ, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง๋ง
StringBuilder
๋ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
๋ฐ๋ผ์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๊ฐ ๋๊ธฐํ ๋ณด์ฅ์ ์ํด StringBuffer
๋ฅผ ์ฌ์ฉํ๊ณ ,
๋จ์ผ์ค๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด StringBuilder
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋จ์ผ ์ค๋ ๋ํ๊ฒฝ์์ StringBuffer๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ ์๋์ง๋ง, ๋๊ธฐํ ๊ด๋ จ ์ฒ๋ฆฌ๋ก ์ธํด StringBuilder์ ๋นํด ์ฑ๋ฅ์ด ์ข์ง ์๋ค.
# Reference & Additional Resources
- Java์ ์ ์ - ๋์ฐ์ถํ
- https://12bme.tistory.com/42
- https://jeong-pro.tistory.com/85