문자와 숫자

문자와 숫자

Go 코드를 읽다 보면 식별자에 어떤 글자가 들어갈 수 있는지 궁금해질 때가 있어요. 이번에는 Go가 '문자'와 '숫자'를 어떻게 구분하는지 규칙을 살펴볼게요. 식별자와 리터럴을 이해하는 기초가 되는 부분이라, 지금 확실히 짚고 넘어가면 좋아요.

출처: Go Specification

본문

밑줄 문자 _(U+005F)는 소문자로 취급해요. 즉, 문자를 구분할 때 밑줄을 하나의 소문자 문자로 봐요. 이 규칙이 식별자를 만들 때 어떤 의미인지는 나중에 식별자에서 다시 확인하게 돼요.

그리고 Go가 쓰는 숫자 기호들은 다음 EBNF로 정의돼요.

letter        = unicode_letter | "_" .
decimal_digit = "0" … "9" .
binary_digit  = "0" | "1" .
octal_digit   = "0" … "7" .
hex_digit     = "0" … "9" | "A" … "F" | "a" … "f" .

여기서 핵심은 두 가지예요. 첫째, 밑줄이 소문자 문자로 취급된다는 점. 둘째, 숫자가 진법에 따라 서로 다른 자릿수 집합을 가진다는 점이에요. 10진수는 0부터 9까지, 2진수는 0과 1만, 8진수는 0부터 7까지, 16진수는 09에 AF(대소문자 모두)를 더해요. 이 자릿수 정의는 정수 리터럴을 해석할 때 그대로 사용되니까, 지금 표로 정리해 두면 뒤에 가서 헷갈리지 않아요.

더 알아보기