사전 선언된 식별자
사전 선언된 식별자
코드를 보다 보면 int나 string, nil 같은 이름은 어디서도 선언한 적이 없는데 그냥 쓸 수 있죠? 그건 Go가 언어를 시작할 때부터 이 이름들을 미리 선언해 두기 때문이에요. 어떤 이름들이 사전 선언되어 있는지, 정확히 짚고 넘어갈게요.
출처: Go Specification
본문
다음 식별자들은 유니버스 블록(Blocks)에 암묵적으로 선언되어 있어요. Go 1.18과 Go 1.21에서 그 목록이 일부 갱신되었답니다 Go 1.18 Go 1.21:
Types:
any bool byte comparable
complex64 complex128 error float32 float64
int int8 int16 int32 int64 rune string
uint uint8 uint16 uint32 uint64 uintptr
Constants:
true false iota
Zero value:
nil
Functions:
append cap clear close complex copy delete imag len
make max min new panic print println real recover
이 목록을 보면 크게 네 부류로 나뉘는 걸 알 수 있어요. **타입(Types)**에는 int나 string처럼 데이터를 나타내는 기본 타입들이, **상수(Constants)**에는 true/false/iota 같은 상수가 있죠. **제로 값(Zero value)**은 값이 하나뿐이라 바로 nil이에요. 그리고 **함수(Functions)**에는 append나 make, len처럼 범용적으로 쓰는 내장 함수들이 들어 있어요.
여기 신경 쓸 포인트가 하나 있어요. 비록 유니버스 블록에 선언되어 있긴 하지만, 이 이름들도 평범한 식별자처럼 다른 블록에서 재선언하면 가릴 수 있어요(shadowing). 그러니까 지금 이 목록을 달달 외우기보다는, "이름이 충돌하면 내 코드의 선언이 우선한다"는 규칙을 먼저 가져가면 좋아요.
더 알아보기
- 사전 선언된 식별자가 살아 있는 범위에 대해선 선언과 범위(Declarations and scope)를 봐요.
any와comparable이 추가된 배경이 궁금하다면 Go 1.18 릴리스 노트를 확인해요.clear와min,max같은 새 내장 함수는 Go 1.21 릴리스 노트에서 다뤄져요.