[Rust] 변수 섀도잉 (Shadowing)

섀도잉은 Rust의 문법적 도우미 요소 중 하나다.

말 그대로 변수를 가린다는 뜻이다.
무슨 타입이든 상관없이 같은 이름이기만 하면 이전의 변수는 가려진다.

여기서 중요한건. 이건 이름을 가리기만 한다는 것이다. 코드상에서만 추가로 접근을 하지 못할 뿐이지, 메모리에는 여전히 남아있다.

그래서 섀도잉된 변수도 똑같이 해당 함수 스택이 종료될때 함께 drop된다.




장점?

난 개인적으로, Result나 Option 등의 모나드가 중첩된 타입을 벗길 때 가장 필수적인 기능이라고 생각한다.

예를 들어.. 이런 코드가 있다 치겠다.

foo라는 Option이 중첩된 타입이 있다.
그리고 그걸 하나하나 벗기면서 예외처리를 하는 로직이다.

값이 정상이라면 계속 벗겨가면서 섀도잉 할당을 하는 것을 볼 수 있다.

저 경우에는 사실 오류 상태가 Option으로 씌여있을 뿐이지, 벗겨진 값이든 덜 벗겨진 값이든 사실상 거의 같은 변수라고 할 수가 있다.

만약 섀도잉이 지원되지 않는다면..
저런 상황이 발생할때마다 오류가 존재하는 변수와 오류가 없는 변수의 이름을 구분할 창의적인 작명법들을 매번 생각해야 했을 것이다.

이런건 너무 끔찍하지 않은가?