Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

부록 A: 키워드

다음 목록에는 러스트 언어가 현재 또는 미래에 사용할 목적으로 예약해 둔 키워드가 들어 있습니다. 따라서 이 단어들은 식별자로 사용할 수 없습니다(“로우 식별자” 절에서 다루는 로우 식별자는 예외입니다). 식별자 는 함수, 변수, 매개변수, 구조체 필드, 모듈, 크레이트, 상수, 매크로, 정적 값, 애트리뷰트, 타입, 트레이트, 라이프타임의 이름을 말합니다.

현재 사용 중인 키워드

다음은 현재 사용 중인 키워드 목록과 그 기능 설명입니다.

  • as: 기본 타입 캐스팅을 수행하거나, 특정 항목을 담고 있는 정확한 트레이트를 구분하거나, use 문에서 항목 이름을 바꿉니다.
  • async: 현재 스레드를 막지 않고 Future 를 반환합니다.
  • await: Future 의 결과가 준비될 때까지 실행을 중단합니다.
  • break: 루프를 즉시 빠져나옵니다.
  • const: 상수 항목이나 상수 raw 포인터를 정의합니다.
  • continue: 다음 루프 반복으로 넘어갑니다.
  • crate: 모듈 경로 안에서 크레이트 루트를 가리킵니다.
  • dyn: 트레이트 객체에 대해 동적 디스패치를 수행합니다.
  • else: if, if let 제어 흐름 구문의 대체 경로를 나타냅니다.
  • enum: 열거형을 정의합니다.
  • extern: 외부 함수나 변수를 연결합니다.
  • false: 불리언 거짓 리터럴입니다.
  • fn: 함수를 정의하거나 함수 포인터 타입을 정의합니다.
  • for: 반복자에서 항목을 순회하거나, 트레이트를 구현하거나, higher ranked lifetime 을 지정합니다.
  • if: 조건식 결과에 따라 분기합니다.
  • impl: 고유 메서드나 트레이트 기능을 구현합니다.
  • in: for 루프 문법의 일부입니다.
  • let: 변수를 바인딩합니다.
  • loop: 무조건 반복합니다.
  • match: 값을 패턴과 매칭합니다.
  • mod: 모듈을 정의합니다.
  • move: 클로저가 캡처한 모든 값을 소유하도록 만듭니다.
  • mut: 참조, raw 포인터, 패턴 바인딩의 가변성을 나타냅니다.
  • pub: 구조체 필드, impl 블록, 모듈의 공개 가시성을 나타냅니다.
  • ref: 참조로 바인딩합니다.
  • return: 함수에서 반환합니다.
  • Self: 현재 정의하거나 구현 중인 타입을 가리키는 타입 별칭입니다.
  • self: 메서드의 대상이거나 현재 모듈을 가리킵니다.
  • static: 전역 변수이거나 프로그램 전체 실행 동안 지속되는 라이프타임을 나타냅니다.
  • struct: 구조체를 정의합니다.
  • super: 현재 모듈의 부모 모듈을 가리킵니다.
  • trait: 트레이트를 정의합니다.
  • true: 불리언 참 리터럴입니다.
  • type: 타입 별칭이나 연관 타입을 정의합니다.
  • union: 유니언 을 정의합니다. 유니언 선언에서 사용할 때만 키워드입니다.
  • unsafe: unsafe 코드, 함수, 트레이트, 구현을 나타냅니다.
  • use: 심벌을 현재 스코프로 가져옵니다.
  • where: 타입을 제한하는 절을 나타냅니다.
  • while: 표현식 결과에 따라 조건부로 반복합니다.

미래 사용을 위해 예약된 키워드

다음 키워드들은 아직 기능은 없지만, 러스트가 미래에 사용할 가능성에 대비해 예약해 두었습니다.

  • abstract
  • become
  • box
  • do
  • final
  • gen
  • macro
  • override
  • priv
  • try
  • typeof
  • unsized
  • virtual
  • yield

로우 식별자

로우 식별자 는 원래는 허용되지 않는 위치에서 키워드를 사용할 수 있게 해 주는 문법입니다. 키워드 앞에 r# 를 붙여 사용합니다.

예를 들어 match 는 키워드입니다. 다음처럼 match 를 함수 이름으로 사용하는 코드를 컴파일하려 하면,

Filename: src/main.rs

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

다음 오류를 얻게 됩니다.

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | fn match(needle: &str, haystack: &str) -> bool {
  |    ^^^^^ expected identifier, found keyword

오류 메시지는 match 키워드를 함수 식별자로 쓸 수 없다는 사실을 보여 줍니다. match 를 함수 이름으로 쓰려면 다음처럼 로우 식별자 문법을 사용해야 합니다.

Filename: src/main.rs

fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

fn main() {
    assert!(r#match("foo", "foobar"));
}

이 코드는 오류 없이 컴파일됩니다. 함수 정의에서도, main 에서 함수를 호출하는 곳에서도 함수 이름 앞에 r# 접두사가 붙는다는 점에 주목하세요.

로우 식별자를 사용하면, 그 단어가 예약 키워드라 해도 원하는 어떤 단어든 식별자로 쓸 수 있습니다. 덕분에 식별자 이름을 더 자유롭게 지을 수 있고, 해당 단어들이 키워드가 아닌 언어로 작성된 프로그램과도 더 쉽게 통합할 수 있습니다. 또한 로우 식별자는 현재 크레이트와 다른 러스트 에디션으로 작성된 라이브러리를 사용할 수 있게 도와줍니다. 예를 들어 try 는 2015 에디션에서는 키워드가 아니지만 2018, 2021, 2024 에디션에서는 키워드입니다. 만약 2015 에디션으로 작성된 라이브러리에 try 함수가 있고 그 라이브러리에 의존한다면, 이후 에디션의 코드에서는 그 함수를 호출할 때 r#try 처럼 로우 식별자 문법을 써야 합니다. 에디션에 대한 자세한 내용은 부록 E 를 참고하세요.