이름

이름 (Names)

코드에서는 타입, 함수, 변수 같은 것들을 가리킬 때 이름을 써요. 그런데 이 "이름으로 가리킴"이 정확히 어떻게 일어나는지, 선언된 이름은 어디까지 유효한지 궁금하지 않나요? 이 글에서 Rust의 이름(names) 개념을 정리해 볼게요.

출처: Rust Reference

본문

엔티티(entity) 는 소스 프로그램 안에서 어떤 방식으로든 참조될 수 있는 언어 구성 요소예요. 보통 경로(path)로 참조하고요. 엔티티에는 타입, 아이템, 제네릭 매개변수, 변수 바인딩, 루프 레이블, 수명, 필드, 속성, lints 등이 있어요.

선언(declaration) 은 엔티티를 가리키는 이름을 도입하는 구문적 구성 요소예요. 도입된 엔티티 이름은 스코프(scope) 안에서 유효해요. 스코프는 그 이름을 참조할 수 있는 소스 텍스트의 영역이죠.

엔티티 중에는 소스 코드에서 명시적으로 선언되는 것도 있고, 언어나 컴파일러 확장의 일부로 암묵적으로 선언되는 것도 있어요.

이름을 참조하는 방법은 몇 가지로 정리할 수 있어요.

  • 경로(path)로 엔티티를 참조할 수 있는데, 다른 모듈이나 타입 안에 있는 엔티티도 가리킬 수 있어요.
  • 수명과 루프 레이블은 앞에 작은따옴표 ' 를 붙이는 전용 문법을 사용해요.
  • 이름은 서로 다른 네임스페이스로 나뉘어요. 다른 네임스페이스의 엔티티는 같은 이름을 공유해도 충돌하지 않아요.
  • 이름 해석(name resolution)은 경로·식별자·레이블을 엔티티 선언에 연결하는 컴파일 타임 과정이에요.
  • 어떤 이름에는 가시성(visibility)에 따라 접근이 제한될 수 있어요.

명시적으로 선언되는 엔티티 (Explicitly declared entities)

소스 코드에서 이름을 명시적으로 도입하는 엔티티들이에요.

아이템 (Items):

표현식 (Expressions):

기타:

또한 매크로 인보케이션과 속성은 그중 하나로 확장되면서 이름을 도입할 수도 있어요. 몇 가지 속성이 관련돼요.

  • macro_use 속성은 다른 크레이트의 매크로 이름을 도입할 수 있고,
  • macro_export 속성은 매크로의 별칭을 크레이트 루트에 도입할 수 있어요.

암묵적으로 선언되는 엔티티 (Implicitly declared entities)

언어 자체가 정의하거나 컴파일러 옵션·확장이 도입하는 엔티티들이에요.

마지막으로, 크레이트 루트 모듈은 이름이 없지만 특정 경로 한정자(path qualifiers)나 별칭으로 참조할 수 있어요.

더 알아보기 (Learn more)