GO · 성능
문자열 빌더 최적화
strings.Builder와 bytes.Buffer로 효율적인 문자열 연결을 수행합니다. + 연산자 대비 수십 배 빠릅니다.
성능중급string-builderbytes-bufferoptimizationconcat
핵심 설명
strings.Builder와 bytes.Buffer로 효율적인 문자열 연결을 수행합니다. + 연산자 대비 수십 배 빠릅니다.
Go code
package main
import (
"bytes"
"fmt"
"strings"
)
func concatPlus(n int) string {
s := ""
for i := 0; i < n; i++ {
s += "x" // 매번 새 문자열 생성 (O(n²))
}
return s
}
func concatBuilder(n int) string {
var sb strings.Builder
sb.Grow(n) // 사전 할당
for i := 0; i < n; i++ {
sb.WriteByte('x')
}
return sb.String()
}
func concatBuffer(n int) string {
var buf bytes.Buffer
buf.Grow(n)
for i := 0; i < n; i++ {
buf.WriteByte('x')
}
return buf.String()
}
func main() {
n := 10000
fmt.Println("+ 연산자:", len(concatPlus(n)))
fmt.Println("Builder:", len(concatBuilder(n)))
fmt.Println("Buffer:", len(concatBuffer(n)))
// strings.Join도 효율적
parts := make([]string, n)
for i := range parts { parts[i] = "x" }
result := strings.Join(parts, "")
fmt.Println("Join:", len(result))
}학습 팁
strings.Builder는 문자열 생성에, bytes.Buffer는 바이트 처리에 최적입니다. 둘 다 io.Writer를 구현합니다.
주의할 점
strings.Builder를 복사하면 패닉이 발생합니다. 값이 아닌 포인터로 전달하세요.
자주 묻는 질문
문자열 빌더 최적화란 무엇인가요?
strings.Builder 와 bytes.Buffer 로 효율적인 문자열 연결을 수행합니다. + 연산자 대비 수십 배 빠릅니다.
문자열 빌더 최적화 학습 시 주의할 점은 무엇인가요?
strings.Builder 를 복사하면 패닉이 발생합니다. 값이 아닌 포인터로 전달하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.