본문 바로가기
개발/Rust

[Rust] 쉐도잉(shadowing)

by 77monkey 개발자 2024. 4. 9.
반응형

Rust 쉐도잉(Shadowing)에 대해서 알아보도록 하겠습니다. 

 

쉐도잉(Shadowing)이란?

쉐도잉(Shadowing)은 동일한 이름의 변수를 새로운 값을 가진 새로운 변수로 다시 정의하는 것을 의미합니다. 

새로운 변수가 이전 변수를 가리게 되어서 쉐도잉(Shadowing)이라고 합니다. 코드를 통해서 좀 더 알아볼까요? 

 

쉐도잉(Shadowing) 예시

아래 코드를 보시면, let을 통해서 x를 선언하게 됩니다. x는 bool 타입으로 선언이 되었고, 이를 출력하면 x: true가 출력되게 됩니다. 그리고 다시 let을 통해서 x를 &str 타입으로 선언해 줍니다. 그러면 x: monkey가 출력되게 됩니다. 좀 더 설명을 해보자면, true 값을 가진 x는 monkey 값을 가진 x가 선언이 되면 사라지게 됩니다. 즉, true 값을 가진 x의 라이프타임이 끝납니다. 자, 그러면 위에서 설명한 쉐도잉(Shadowing)의 의미를 이해하셨나요? 동일한 이름을 가졌지만, let을 통해서 선언을 해주면 다른 타입의 값을 받을 수 있습니다.

fn main() {
    let x = true;
    println!("x: {}", x);

    let x = "monkey";
    println!("x: {}", x);
}

아래 코드는 위 코드를 실행했을 때의 결과입니다.

x: true
x: monkey

 

쉐도잉(Shadowing) 주의사항

쉐도잉을 사용하다보면 주의할 부분이 있습니다. 위에서 설명한 라이프타임을 생각하면 아래의 3가지 주의사항은 당연하게 받아들일 수 있으실 겁니다.

 

타입 변경

변수를 다시 정의할 때 새로운 값의 타입이 이전 값과 다를 수 있습니다. 위 예시를 생각하면 쉽게 이해하실 수 있습니다. 그렇기 때문에 코드가 길어질 경우에 위에서 정의한 변수의 타입과 중간에 쉐도잉(Shadowing)한 타입과 다를 수 있으니, 주의하시길 바랍니다. 

 

가시성

쉐도잉(Shadowing)이 된 경우에는 위에서 언급했던 것처럼 해당 라이프타임까지만 사용할 수 있습니다. 블록과 같이 구역 안에서 설정이 되었다면 해당 쉐도잉된 변수는 해당 구역에서만 유의미합니다. 

 

불변성 유지

이전에 선언한 변수가 immutable로 선언된 불변이더라도 같은 이름의 새로운 변수를 정의하여 쉐도잉(Shadowing) 할 수 있습니다. 이는 변수가 변경되지 않는다는 사실을 보장하면서도 새로운 값을 가진 새로운 변수를 사용할 수 있게 합니다.

 

마무리

쉐도잉(Shadowing)을 사용하게 되면 변수값을 바꾸기 위해서 mutable로 선언할 필요가 없어집니다. 글에서 계속 강조했지만, 라이프 타임으로 접근을 하시면 가독성 부분에서 큰 도움을 받으실 것으로 보입니다. 

 

반응형

'개발 > Rust' 카테고리의 다른 글

[Rust] 포인터 타입 => 레퍼런스/박스/원시 포인터  (0) 2023.10.09
[Rust] 슬라이스 vs 슬라이스 레퍼런스  (0) 2023.10.08
[Rust] 벡터(Vector)  (0) 2023.10.05
[Rust] 배열(array)  (0) 2023.10.02
[Rust] 튜플(tuple)  (0) 2023.09.28