
149
3
장
주요 개념
어떻게든 찾아내서 음흉한 미소를 지으며 이 포인터를 역참조하는 방식으로 시스템을 공격할
것이다.
하지만 러스트에는 이런 위험이 없다. 러스트에서 가장 매력적인 특징이 바로 이런 댕글링 포
인터 문제를 근본적으로 해결했다는 점이다. 따라서 보안 문제의 상당 부분이 저절로 해결
됐다.
1
이러한 특성 덕분에 그동안 내부적으로 가려져 있던, 그래서
C
/
C
++ 프로그래머가 언어 차원
의 도움 없이 직접 책임져야 했던
수명
lifetime
이란 개념이 전면에 등장하게 된 것이다. 앰퍼샌드
(
&
)가 붙은 타입은 모두 수명(
'
a
)을 갖는다. 물론 이를 생략해도 대부분은 컴파일러가 처리해
준다.
수명의 스코프
스택에 담긴 항목의 수명이란 그 항목이 유지되도록 보장되는 기간이다. 다시 말해 항목에 대
한 레퍼런스(포인터)가 무효화되지 않는다고 보장되는 기간이다.
수명은 항목이 생성될 때 시작해서 그 항목이 드롭 (제거)
drop
되거나 이동
move
할 때 끝난다. 여
기서 드롭이란
C
++의 객체 소멸
destruction
에 대한 러스트의 표현 방식이다.
C
/
C
++에 익숙한 프로그래머라면 이동할 때 수명이 끝나는 경우가 많다는 사실에 놀랄 것이
다. 러스트에서는 스택 안의 한 지점에서 다른 지점으로, 스택에서 힙으로, 힙에서 스택으로 이
동하는 경우가 상당히 많다. ...