러스트에는 두 가지 종류의 상수 타입이 있는데,
const
는변하지 않는 값을 담는 타입이고,
static
은static 키워드는 글로벌 변수를 선언하는데, 이 변수들은 read-only 메모리 영역에 위치하기 때문에 값을 수정하는 것이 금지됩니다.
참조 라이프타임을 나타내는 'static은 해당 참조가 가리키는 데이터가 프로그램 전체 라이프타임 동안 유효하다는 것을 의미합니다.
static NUM: i32 = 18;
let s: &'static str = "hello world";
만약에 어떠한 레퍼런스의 라이프타임이 'static 으로 명시되어 있다면 해당 레퍼런스는 프로그램의 전체 실행 시간 동안 존재하는 데이터를 레퍼런스 한다는 의미가 됩니다.
그래서 해당 값을 받는 쪽에서 원하는 만큼 해당 타입을 사용할 수 있습니다. 소유한 데이터를 넘길 때 'static 라이프타임 바운드를 갖습니다.
fn print_it( input: impl Debug + 'static ) {
println!( "'static value passed in is: {:?}", input );
}
fn main() {
// i is owned and contains no references, thus it's 'static:
let i = 5;
print_it(i);
// oops, &i only has the lifetime defined by the scope of
// main(), so it's not 'static:
print_it(&i);
}