๋ธ๋ก๊ทธ ์ฎ๊ฒผ์ต๋๋ค! ๐ก integer.blog
CodeWars์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ํ๋ค๋ณด๋ฉด ๋ฌธ์์ด ์ฐ๊ฒฐํ ์ผ์ด ๋ง์๋๋ฐ,
ํผํฌ๋จผ์ค ์ด์๊ฐ ๋ง๋ค ๋ณด๋ ์ ๋ฆฌ๊ฐ ํ์ํ๋ค.
์ด ๊ธ์์๋ StringBuilder
, StringBuffer
, + ์ฐ์ฐ์
, Concat๋ฉ์๋
๋ฅผ ๋น๊ตํ๋ ๊ฒ์ ์ค์ ์ ๋์๋ค.
๋ฌธ์์ด ์ฐ๊ฒฐ๊ณผ ๊ตฌ๋ถ์ ๋ํ ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ์์นจ๊ณต๋ถ #8์ ์ฐธ๊ณ ํ๋ฉด ์ข๋ค.
1. Concat ๋ฉ์๋
String ํด๋์ค์๋ ๋ฌธ์์ด์ ์ด์ด์ฃผ๋ concat ๋ฉ์๋๊ฐ ์๋ค.
String sample = "X".concat("Y").concat("Z"); // XYZ
ํ์ง๋ง Java์์ String ๊ฐ์ฒด๋ Immutable(๋ถ๋ณ)์ด๊ธฐ ๋๋ฌธ์, ์๋ก์ด ๋ฌธ์์ด์ ๋ํ ๋๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. ๊ทธ๋์ ํผํฌ๋จผ์ค๊ฐ ์ข์ง ์๋ค.
์๋ฅผ ๋ค์ด ์์ญ๋ฒ String์ด ๋ํด์ง๋ ๊ฒฝ์ฐ, ๊ฐ String์ ์ฃผ์๊ฐ์ด stack์ ์์ด๊ณ ,
๊ฐ๋น์ง์ฝ๋ ํฐ๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง ํด๋์ค๋ค์ heap์ ์ง์์ ์ผ๋ก ์์ด๊ฒ ๋๋ค.
์ฆ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ธก๋ฉด์์ ์น๋ช
์ ์ด๋ค.
2. StringBuilder
String sample = new StringBuilder().append("X").append("Y").append("Z").toString();
StringBuilder๋ ๋ด๋ถ์ ์ผ๋ก ๋ฌธ์์ด์ ๊ฐ์ง๊ณ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
String ๊ฐ์ฒด๊ฐ ๋งค ์์ ์์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ,
StringBuilder๋ ๋ฌธ์์ด์ ๊ณ์ํด์ ์๋ค๋ก ๋ง๋ถ์ด๊ฑฐ๋ ๋ฌธ์์ด์ ์ฝ์
, ์ญ์ ํ๋ ๋ฑ ๋ค์ํ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
3. StringBuilder vs. StringBuffer
- ๋ ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ ๊ฐ๋ค. ๋์ ์ฐจ์ด๋ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ ๋ณด์ฅ์ด ๋๋๋ ์๋๋๋์ ์ฐจ์ด์ด๋ค.
- StringBuffer๋ thread-safe ์ด๋ฏ๋ก MultiThreaded ํ๊ฒฝ์์๋ StringBuilder๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- StringBuffer๋ ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ๋ค๋ฅธ ๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ํ๋ฏ๋ก
Web์ด๋ ์์ผํ๊ฒฝ๊ณผ ๊ฐ์ด ๋น๋๊ธฐ๋ก ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๋์๋ StringBuffer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ๋ค .
3. + ์ฐ์ฐ์
String sample = "X" + "Y" + "Z"; // XYZ
์ฐ์ฐ์๋ก๋ ๋ฌธ์์ด์ ๋ถ์ผ ์ ์๋ค.
+ ์ฐ์ฐ์
๋ Java 1.5 ์ด์ ์๋ concat ๋ฉ์๋์ ๋์ผํ๊ฒ ์๋ก์ด String ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง๋ง, Java 1.5 ๋ถํฐ๋ ์ปดํ์ผ ๋จ๊ณ์์ StringBuilder๋ก ์ปดํ์ผ ๋๋๋ก ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ StringBuilder์ ๋์ผํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ๊ฐ๋
์ฑ์ด ์ข์ + ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
ํ์ง๋ง + ์ฐ์ฐ์๋ ๋ง๋ค ๋๋ง๋ค StringBuilder ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์,
๋ฐ๋ณต๋ฌธ์์ ๋ฌธ์์ด์ ์กฐํฉํ๋ ๊ฒ์ฒ๋ผ StringBuilder ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ์ฌ๋ฌ ์์
์ ํ๋ ๊ฒฝ์ฐ์๋ StringBuilder๋ฅผ ์ฐ๋ ๊ฒ์ด ์ข๋ค.
List<String> list = Array.asList("foo","bar","baz","qux");
StringBuilder sb = new StringBuilder();
for(String s : list){
sb.append(s);
}
System.out.println(sb);
4. ์ฑ๋ฅ ๋น๊ต
์ถ์ฒ : http://www.pellegrino.link/2015/08/22/string-concatenation-with-java-8.html
Reference
- http://javahungry.blogspot.com/2013/06/difference-between-string-stringbuilder.html
- http://www.pellegrino.link/2015/08/22/string-concatenation-with-java-8.html
- https://novemberde.github.io/2017/04/15/String_0.html
- https://www.slipp.net/questions/271
- http://futurecreator.github.io/2018/06/02/java-string-concatenation/