PHpullh
학습 라이브러리/Go/문자열 빌더 최적화

GO · 성능

문자열 빌더 최적화

strings.Builderbytes.Buffer로 효율적인 문자열 연결을 수행합니다. + 연산자 대비 수십 배 빠릅니다.

성능중급string-builderbytes-bufferoptimizationconcat

핵심 설명

strings.Builderbytes.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 를 복사하면 패닉이 발생합니다. 값이 아닌 포인터로 전달하세요.