robert-min / project-go

Go 언어 리뷰와 기존에 파이썬으로 진행했던 프로젝트를 Go 언어로 개선한 repo
0 stars 0 forks source link

문자열 Upper 메모리 비교 #6

Open robert-min opened 11 months ago

robert-min commented 11 months ago

문자열을 대문자로 변경 시 두개의 메소드 비교

package main

import (
    "fmt"
    "strings"
)

/*
내부에서 합 연산을 할 때마다 새로운 메모리를 할당하기 때문에 메모리 공간 낭비와 성능 문제 야기
*/
func ToUpper1(str string) string {
    var rst string
    for _, c := range str {
        if c >= 'a' && c <= 'z' {
            rst += string('A' + (c - 'a'))
        } else {
            rst += string(c)
        }
    }
    return rst
}

/*
strings.Builder 객체를 이용해 문자를 더함
WriteRune() 매서드를 통해 문자를 더할 때 새로운 메모리를 생성하지 않고 기존 메모리 공간에 빈자리가 있으면 더함
메모리 공간 낭비를 없앨 수 있음
*/
func ToUpper2(str string) string {
    var builder strings.Builder

    for _, c := range str {
        if c >= 'a' && c <= 'z' {
            builder.WriteRune('A' + (c - 'a'))
        } else {
            builder.WriteRune(c)
        }
    }
    return builder.String()
}

func main() {
    var str string = "Hello World"

    fmt.Println(ToUpper1(str))
    fmt.Println(ToUpper2(str))

}