Java ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ๋ฐฉ๋ฒ• ๋น„๊ต

๋ธ”๋กœ๊ทธ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค! ๐Ÿก’ 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