0Pricing
Go Academy · 강의

strings.Builder

문자열 효율적으로 만들기

strings.Builder은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

+ 연결의 비용

문자열은 변경할 수 없으므로 s = s + part를 실행할 때마다 완전히 새로운 문자열이 만들어지고 모든 바이트가 다시 복사됩니다.

반복문 안에서는 이 작업이 느려지고 메모리를 낭비하게 됩니다.

package main

import "fmt"

func main() {
    s := ""
    for i := 0; i < 3; i++ {
        s = s + "go "
    }
    fmt.Println(s)
}

strings.Builder 사용하기

strings.Builder는 내부 버퍼를 키워 반복적인 복사를 피합니다. 빌더에 내용을 작성한 다음 마지막에 한 번만 결과를 읽습니다.

var b strings.Builder로 선언하십시오.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("Hello")
    fmt.Println(b.String())
}

반복문에서 WriteString 사용하기

실질적인 효과는 반복문에서 나타납니다. WriteString을 반복해서 호출한 다음 String()으로 한 번만 읽으십시오.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    for i := 0; i < 3; i++ {
        b.WriteString("go ")
    }
    fmt.Println(b.String())
}

바이트와 rune 작성하기

Builder에는 완전한 문자열 외에도 다음을 추가할 수 있습니다:

  • WriteByte는 바이트 하나를 추가합니다.
  • WriteRune은 유니코드 코드 포인트 하나를 추가합니다.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("Go")
    b.WriteByte('!')
    b.WriteRune('語')
    fmt.Println(b.String())
}

Builder는 io.Writer를 구현합니다

Builder는 io.Writer 인터페이스를 충족하므로 fmt.Fprintf와 함께 사용해 버퍼에 직접 형식화할 수 있습니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "x=%d y=%d", 3, 4)
    fmt.Println(b.String())
}

길이 확인하기

b.Len()은 최종 문자열을 만들지 않고 지금까지 작성된 바이트 수를 알려줍니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("hello")
    fmt.Println(b.Len())
}

Grow로 미리 할당하기

결과가 대략 얼마나 클지 알고 있다면 먼저 b.Grow(n)을 호출하십시오. 이렇게 하면 용량이 예약되어 버퍼 크기를 반복적으로 조정하는 작업을 피할 수 있습니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.Grow(64)
    for i := 0; i < 5; i++ {
        b.WriteString("item ")
    }
    fmt.Println(b.String())
}

Builder 초기화하기

b.Reset()은 버퍼를 비워 동일한 Builder를 다음 문자열에 재사용할 수 있게 합니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("first")
    b.Reset()
    b.WriteString("second")
    fmt.Println(b.String())
}

Builder를 복사하지 마십시오

strings.Builder는 처음 사용한 후 복사해서는 안 됩니다. 대신 포인터(*strings.Builder)를 사용해 전달하십시오.

package main

import (
    "fmt"
    "strings"
)

func add(b *strings.Builder, word string) {
    b.WriteString(word)
}

func main() {
    var b strings.Builder
    add(&b, "shared ")
    add(&b, "builder")
    fmt.Println(b.String())
}

CSV 줄 만들기

실용적인 예로, Builder를 사용해 쉼표로 구분된 줄을 효율적으로 구성해 보겠습니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    fields := []string{"id", "name", "age"}
    var b strings.Builder
    for i, f := range fields {
        if i > 0 {
            b.WriteByte(',')
        }
        b.WriteString(f)
    }
    fmt.Println(b.String())
}

Builder를 사용할 때

많은 조각을 연결할 때, 특히 반복문 안에서 연결할 때는 strings.Builder를 사용하십시오.

이미 알고 있는 슬라이스를 한 번만 결합하는 경우에는 strings.Join이 더 간단하고 속도도 똑같이 빠릅니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    for i := 1; i <= 3; i++ {
        fmt.Fprintf(&b, "[%d]", i)
    }
    fmt.Println(b.String())
}

빠른 확인

반복문에서 +를 반복해서 사용하는 것보다 Builder를 선호하는 이유는 무엇인가요?

복습: strings.Builder

문자열을 효율적으로 만드는 방법을 배웠습니다:

  • var b strings.Builder로 선언합니다.
  • WriteString, WriteByte, WriteRune 또는 fmt.Fprintf로 내용을 추가합니다.
  • 필요하다면 미리 Grow를 호출하고, String()으로 한 번만 읽으며, 절대 복사하지 않습니다.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.Grow(16)
    b.WriteString("Go ")
    b.WriteString("builder!")
    fmt.Println(b.String())
}

자주 묻는 질문

“strings.Builder” 강의는 무료인가요?

네 — “strings.Builder” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“strings.Builder”에서 뭘 배우나요?

문자열 효율적으로 만들기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“strings.Builder” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 룬과 바이트
  2. strings 패키지 함수
  3. strings.Builder
  4. 유니코드와 utf8
← Go Academy(으)로 돌아가기