식별자의 유일성
식별자의 유일성
식별자들 사이에서 '겹치면 안 되는' 일들은 Go에서 자주 만나게 돼요. 예를 들어 같은 블록 안에서 변수를 두 번 선언하면 컴파일 오류가 나고, 패키지 안에서 같은 이름을 두 번 쓰면 충돌이 생기죠. 그런데 잠깐, 도대체 "겹친다"는 게 정확히 뭘 의미하는 걸까요? 여기서 Go는 아주 명확한 기준을 하나 정해 놨어요.
출처: Go Specification
본문
어떤 식별자의 집합이 주어졌을 때, **그 집합 안의 다른 모든 식별자와 다르다면 그 식별자를 유일하다(unique)고 해요.
그럼 두 식별자가 서로 다르다는 기준은 뭘까요? 바로 다음 두 가지 경우예요.
이 두 경우에 모두 해당하지 않으면, 즉 두 식별자가 같은 철자를 쓰면서 같은 곳에 노출돼 있다면, 그 둘은 같은 식별자라고 봐요.
핵심을 다시 정리하면 이거예요. 유일성은 단순히 "이름이 다르냐"만 따지는 게 아니라, 같은 패키지에서 같은 이름으로 노출됐는지까지 따져야 판단할 수 있어요. 그래서 서로 다른 패키지에 있는 내보내지지 않은 식별자들은 이름이 같아도 충돌하지 않아요. 이 기준 덕분에 패키지 내부 구현은 자유롭게 하면서도, 바깥에서 보이는 이름만 신경 쓰면 되는 구조가 되는 거죠.
더 알아보기
unique의 정확한 정의는 이 섹션이 유일한 기준이라, 다른 곳에서 "유일해야 한다"는 표현은 전부 이 정의를 가리켜요. 덕분에 어디서나 같은 의미로 이해할 수 있어요.- "내보내지지 않은"(exported되지 않은) 식별자가 서로 다른 패키지에 있으면 이름이 겹쳐도 문제없다는 점이 특히 헷갈리기 쉬워요. 패키지가 다르면 독립된 공간으로 보는 게 핵심이에요.
- 관련 개념으로 Go 문서의 식별자(Identifiers)와 패키지(Packages) 섹션을 함께 보면 더 탄탄하게 잡혀요.