문자열 타입

문자열 타입 (String types)

Go의 문자열을 처음 마주하면 "그냥 문자들이 늘어선 것 아닌가?" 싶기도 해요. 그런데 정작 스펙에선 이걸 바이트의 나열이라고 정의한다는 점, 그리고 한번 만들면 절대 바꿀 수 없다는 점이 핵심이에요. 이 두 가지가 문자열을 다룰 때 생기는 많은 규칙의 바탕이 되죠. 지금부터 문자열이 정확히 무엇이고, 길이와 인덱스라는 개념이 어떻게 동작하는지 하나씩 짚어 볼게요.

출처: Go Specification

본문

string 타입은 문자열 값의 집합을 나타내요. 여기서 문자열 값은 (비어 있을 수도 있는) 바이트의 시퀀스예요. 이 바이트의 개수를 문자열의 **길이(length)**라고 부르고, 이 길이는 결코 음수가 되지 않아요.

문자열은 **불변(immutable)**이에요. 한번 생성되면 문자열의 내용을 바꾸는 것이 불가능하죠. 미리 선언된(predeclared) string 타입은 string이고, 이것은 named type(명명된 타입)이에요.

문자열 s의 길이는 내장 함수 len으로 알 수 있어요. 만약 그 문자열이 상수(constant)라면, 이 길이는 컴파일 타임 상수가 되죠. 문자열의 바이트들은 정수 인덱스 0부터 len(s)-1까지로 접근할 수 있어요.

한 가지 조심할 점이 있는데요, 그런 요소의 주소를 취하는 것은 불법이에요. s[i]가 문자열의 i번째 바이트라고 할 때, &s[i]는 유효하지 않아요.

더 알아보기

  • 문자열의 바이트를 하나씩 꺼내 읽는 인덱스 문법은 Index expressions에서 더 자세히 다뤄요.
  • len 이 문자열뿐 아니라 배열·슬라이스 등에서 길이를 어떻게 알려주는지는 Length and capacity 문서를 보면 돼요.
  • string이 왜 named type인지, named type이 갖는 의미가 궁금하다면 Types 섹션을 참고해요.
  • 문자열과 짝을 이루는 연속 데이터 타입으로는 배열과 슬라이스가 있어요. 각각 Array types, Slice types에서 확인할 수 있죠.