JavaRush /Java Blog /Random-KO /๋ฌธ์ž์—ด += ๋ฌธ์ž์—ด ๋˜๋Š” StringBuilder.append(String)?
SemperAnte
๋ ˆ๋ฒจ 4
ะ”ะพะฝะตั†ะบ

๋ฌธ์ž์—ด += ๋ฌธ์ž์—ด ๋˜๋Š” StringBuilder.append(String)?

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ํด๋ž˜์Šค์˜ ์ถ”๊ฐ€ ๋ฉ”์†Œ๋“œ์™€ ์˜ StringBuilder์—ฐ์‚ฐ์ž ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๊ณ ๋ คํ•˜๊ณ  ๋ถ„์„ํ•˜๊ณ  ์„ค๋ช…ํ•˜๊ณ  ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ ์งˆ๋ฌธ์€ ์ฝ”๋“œ ์ตœ์ ํ™”๋งŒํผ ์ ์šฉ ์˜์—ญ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. +=String
๋ฌธ์ž์—ด += ๋ฌธ์ž์—ด ๋˜๋Š” StringBuilder.append(String)?  - 1
์˜ˆ, ์˜์‹ฌํ•  ์—ฌ์ง€์—†์ด ์ด ์งˆ๋ฌธ์— ๊นŠ์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ์‚ฌ๋žŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค: "์™œ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ์ƒˆ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ += ์—ฐ์‚ฐ์ž๋ฅผ ๋Œ€์ฒดํ•œ ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋„ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ toString()? ์šฐ๋ฆฌ๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ตœ์ ์„ฑ์ž…๋‹ˆ๊นŒ? ๋ฌด์Šจ ๋ง์„ ํ•˜๋Š” ๊ฑฐ์•ผ? ์„ ํƒ์€ ๋ป”ํ•œ๋ฐ ๋ฌด์Šจ ์†Œ๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฑฐ์•ผ?โ€ ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋Š” ์™„์ „ํžˆ ํ‹€๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” String์›์‹œ์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. String- Java์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด class์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Java์—๋Š” ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ(์˜ˆ: C++์—์„œ์™€ ๊ฐ™์ด)๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์—†์œผ๋ฉฐ ์—ฐ์‚ฐ์ž๋Š” ๊ธฐ๋ณธ ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜๋ฉฐ ๋ชจ๋“  ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์–ด๋–ค ์—ฐ์‚ฐ์ž๋„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์—ฐ์‚ฐ์ž " +" ๋ฐ " += "๊ฐ€ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ์ข…์˜ "๋ฒ„ํŒ€๋ชฉ"์ด๊ณ  ๋ฒ„ํŒ€๋ชฉ์ด ํ•ญ์ƒ ์†์‹ค์„ ์ดˆ๋ž˜ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ณ ์–‘์ด ๊ผฌ๋ฆฌ ๋‹น๊ธฐ๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๊ณ  ์ธก์ •์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค. ๋‹ค์Œ์€ ๋ฃจํ”„ ๋ณ€์ˆ˜๊ฐ€ 100,000๋ฒˆ ์žˆ๋Š” ๋ผ์ธ์„ "์ ‘์ฐฉ"ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        String s = "Hello";
        for(int i = 0; i < 100000; ++i)
        {
            s+=i;
        }
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
๋‚ด ์ปดํ“จํ„ฐ์˜ ์ฝ˜์†”์—๋Š” 6815ms๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์ด ์„ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑฐ์˜ 7์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. toString()์ด์ œ ์ด๋ฅผ StringBuilder๋กœ ๋ฐ”๊พธ๊ณ  ์ธก์ •์— ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .
public class MainClass
{
    private static long time;

    public static void main(String[] args)
    {

        saveTime();
        StringBuilder sb = new StringBuilder("Hello");
        for(int i = 0; i < 100000; ++i)
        {
            sb.append(i);
        }
        String s = sb.toString();
        printDiff();

    }
    private static void saveTime()
    {
        time = System.currentTimeMillis();
    }

    private static void printDiff()
    {
        System.out.println((System.currentTimeMillis() - time) + "ms");
    }
}
๋‚ด PC์—์„œ 10ms๋ผ๊ณ  ํ–ˆ์–ด์š”. ์ฆ‰, 0.01์ดˆ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณด๋ฉด ์ฐจ์ด๊ฐ€ ๊ฝค ๋‚˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ๋Œ€๋žต์ ์œผ๋กœ ๋งํ•˜๋ฉด 700๋ฐฐ append๋” ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. +์ด๋Š” " " ๋ฐ " +=" ์ž์ฒด๊ฐ€ ๋™์ผํ•œ ์ถ”๊ฐ€๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์‹œ์— ๊ทธ๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์–ธ์–ด์˜ ๋ชฉ๋ฐœ์„ ํ†ตํ•ด ๋จผ ๊ธธ์„ ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค . ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋งˆ์ง€๋ง‰ ๋‹จ๋ฝ์€ ์ถ”์ธก์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ €๋Š” JVM ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ๊ณ  ์–ด๋–ป๊ฒŒ ์žˆ๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค). ์ด๋Š” ์ถ”๊ฐ€ ๊ฐœ์ฒด๊ฐ€ ํ•ญ์ƒ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…ํ™•ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ์ฝ”๋“œ๋Š” ๋ช‡ ์ค„ ๋” ๊ธธ์–ด์ง€์ง€๋งŒ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์—„์ฒญ๋‚œ ์‹œ๊ฐ„ ์ ˆ์•ฝ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์‚ฌ ์‹œ๋Œ€ ํ”„๋กœ์„ธ์„œ๊ฐ€ ํƒ‘์žฌ๋œ ์‚ฌ๋ฌด์šฉ PC์—์„œ๋Š” ์ธก์ •ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ์ง€๋งŒ ์ด์ œ ์Šค์นดํ”„๋ฅผ ๊ฑฐ์˜ ๋‹น๊ธธ ์ˆ˜ ์—†๋Š” ๋ฐ”๋กœ ์ด ์‚ฌ๋ฌด์šฉ ์ปดํ“จํ„ฐ์—์„œ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ์ง€ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION