문자열 만들기 - strings.Builder

2025. 2. 25. 16:41· Golang

 

+= 방식

 
 
hexNumber := ""
for i := 0; i < length; i++ {
    hexNumber += string(hexChars[index])
}

 

  • 매 반복마다 새로운 문자열을 생성합니다
  • 문자열은 불변(immutable)이므로, 연결할 때마다 새로운 메모리 할당이 발생합니다
  • 시간 복잡도: O(n²) - n은 문자열 길이

 

 

 

 

 

strings.Builder 방식

var sb strings.Builder
sb.Grow(length)           // 미리 필요한 용량만큼 메모리 할당
for i := 0; i < length; i++ {
    sb.WriteByte(hexChars[index])
}
  • 내부적으로 바이트 슬라이스를 사용하여 메모리를 효율적으로 관리합니다
  • 필요한 용량을 미리 할당하여 재할당을 방지합니다(Glow())
  • 시간 복잡도: O(n)

 

 

 

 

 

 
 

벤치마크

func BenchmarkStringConcat(b *testing.B) {
    for i := 0; i < b.N; i++ {
        s := ""
        for j := 0; j < 1000; j++ {
            s += "a"
        }
    }
}

func BenchmarkStringBuilder(b *testing.B) {
    for i := 0; i < b.N; i++ {
        var sb strings.Builder
        sb.Grow(1000)
        for j := 0; j < 1000; j++ {
            sb.WriteByte('a')
        }
    }
}
 

실행 결과

BenchmarkStringConcat-8      5124 ns/op     17408 B/op     999 allocs/op
BenchmarkStringBuilder-8      891 ns/op      1024 B/op       1 allocs/op

 

 

결론

반복적인 문자열 연산이 많은 경우에는 strings.Builder를 사용하는 것이 매우 유리

저작자표시 (새창열림)
초혼
초혼
siaksiakx@gmail.com github.com/chohon
초혼
초혼 개발일지
초혼
전체
오늘
어제
  • 분류 전체보기 (57)
    • SW정글 (10)
      • 알고리즘 (4)
      • 자료구조 (1)
      • OS (4)
      • 프로젝트 (1)
    • 기본 (26)
    • 용어 정리 (2)
    • 알고리즘 문제 (1)
      • HackRank (1)
    • 게임 서버 (8)
    • 스크랩 (3)
    • Pension (6)
    • Golang (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
초혼
문자열 만들기 - strings.Builder
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.