0Pricing
Go Academy · 강의

룬과 바이트

Go 문자열 내부 구조 이해하기

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

Go 문자열이란 무엇인가요

Go에서 string은 변경할 수 없는 바이트 시퀀스입니다. 바이트에는 대개 UTF-8로 인코딩된 텍스트가 저장되지만, Go가 이를 강제하지는 않습니다.

  • 문자열을 제자리에서 변경할 수 없습니다.
  • len은 문자가 아니라 바이트를 셉니다.
package main

import "fmt"

func main() {
    s := "Go"
    fmt.Println(s)
    fmt.Println(len(s))
}

내부적으로 사용되는 바이트

문자열에 s[i]로 인덱싱하면 하나의 바이트(byte 형식이며 uint8의 별칭)를 반환합니다.

일반 ASCII 텍스트에서는 각 문자가 정확히 1바이트입니다.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(s[0])
    fmt.Println(s[1])
    fmt.Println(s[2])
}

byte는 숫자입니다

바이트는 단순한 숫자이므로 s[0]을 출력하면 문자가 아니라 A의 ASCII 코드인 65가 표시됩니다.

문자를 확인하려면 바이트를 다시 문자열로 변환하십시오.

package main

import "fmt"

func main() {
    s := "ABC"
    fmt.Println(string(s[0]))
}

rune이란 무엇인가요

rune은 int32의 별칭이며 하나의 유니코드 코드 포인트를 나타냅니다.

  • UTF-8로 인코딩할 때 하나의 rune은 여러 바이트를 차지할 수 있습니다.
  • 원시 바이트가 아니라 문자에 관심이 있다면 rune을 사용하십시오.
package main

import "fmt"

func main() {
    var r rune = 'A'
    fmt.Println(r)
    fmt.Println(string(r))
}

여러 바이트로 인코딩되는 문자

ASCII가 아닌 문자는 UTF-8에서 1바이트보다 많은 공간을 차지합니다. "héllo"와 같은 문자열은 글자 수보다 바이트 수가 많습니다.

len은 바이트 수를 보고하므로 화면에 보이는 길이보다 크게 나온다는 점에 주의하십시오.

package main

import "fmt"

func main() {
    s := "héllo"
    fmt.Println(len(s))
}

문자열 순회하기

문자열을 대상으로 for range 반복문을 사용하면 UTF-8이 자동으로 디코딩됩니다. 각 반복에서 다음 값이 생성됩니다:

  • rune이 시작되는 바이트 인덱스,
  • 해당 rune 자체.
package main

import "fmt"

func main() {
    for i, r := range "héllo" {
        fmt.Println(i, string(r))
    }
}

문자를 올바르게 세기

바이트가 아니라 문자 수를 세려면 문자열을 []rune으로 변환한 다음 길이를 구하십시오.

그러면 코드 포인트 수를 얻을 수 있습니다.

package main

import "fmt"

func main() {
    s := "héllo"
    runes := []rune(s)
    fmt.Println(len(runes))
}

rune으로 인덱싱하기

[]rune을 사용하면 여러 바이트로 이루어진 텍스트에서도 안정적으로 N번째 문자를 가져오도록 인덱싱할 수 있습니다.

package main

import "fmt"

func main() {
    runes := []rune("héllo")
    fmt.Println(string(runes[1]))
}

문자열과 바이트 간 변환

문자열과 []byte 사이를 자유롭게 변환할 수 있습니다.

  • []byte(s)는 원시 바이트를 제공합니다.
  • string(b)는 텍스트를 다시 구성합니다.
package main

import "fmt"

func main() {
    b := []byte("Go")
    fmt.Println(b)
    fmt.Println(string(b))
}

rune으로 문자열 만들기

rune 슬라이스도 같은 방식으로 문자열로 변환할 수 있습니다. 문자를 하나씩 수정한 후에 유용합니다.

package main

import "fmt"

func main() {
    runes := []rune{'G', 'o', '!'}
    fmt.Println(string(runes))
}

바이트와 rune 요약

간단한 개념 모델은 다음과 같습니다:

  • byte = 하나의 원시 바이트(uint8), len(s)은 이를 셉니다.
  • rune = 하나의 유니코드 코드 포인트(int32), range는 이를 생성합니다.
  • 문자를 세거나 인덱싱할 때는 []rune을 사용하십시오.
package main

import "fmt"

func main() {
    s := "café"
    fmt.Println(len(s))
    fmt.Println(len([]rune(s)))
}

빠른 확인

rune과 바이트에 대한 이해도를 확인해 보십시오.

복습: rune과 바이트

Go 문자열은 대개 UTF-8로 인코딩된 변경할 수 없는 바이트 시퀀스라는 것을 배웠습니다.

  • byte는 원시 바이트이며 len은 바이트를 셉니다.
  • rune은 유니코드 코드 포인트이며 range가 이를 디코딩합니다.
  • 적절한 수준에서 작업하려면 []byte(s)와 []rune(s)으로 변환하십시오.
package main

import "fmt"

func main() {
    s := "Go語"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", len([]rune(s)))
}

자주 묻는 질문

“룬과 바이트” 강의는 무료인가요?

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

“룬과 바이트”에서 뭘 배우나요?

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

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

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

“룬과 바이트” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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