Rust는 성능과 메모리 안전성을 중요한 목표로 하는 프로그래밍 언어이다. 소유권과 빌림의 규칙을 컴파일 단계에서 검사하는 방식이 특징이며, 모든 값에 런타임 가비지 컬렉션을 적용하는 모델과 다르다.
프로그래밍 언어 | |
|---|---|
언어 | Python · Java · JavaScript · TypeScript · Rust |
분야 | 소유권 기반 정적 타입 시스템 언어 |
|---|
소유권
값에는 소유자가 있고 소유자가 범위를 벗어나면 해당 값의 정리 동작이 수행된다. 값을 다른 변수나 함수로 넘길 때 소유권이 이동하는 경우와 복사되는 경우를 구별해야 한다. 이동된 값을 다시 사용하려는 코드는 컴파일 오류가 될 수 있다.
빌림과 경계
소유권을 넘기지 않고 참조로 값을 이용하는 방식이 빌림이다. 함수가 데이터를 잠시 읽는지, 수정하는지, 아예 소유하는지를 API에서 드러낼 수 있다. 이 구분은 단지 컴파일러를 만족시키는 문법이 아니라 데이터의 생명주기와 변경 권한을 표현하는 설계 수단이다.
예시와 비용
큰 문자열을 분석하는 함수가 읽기만 한다면 매번 복제할 필요 없이 참조로 전달하는 구성을 고려할 수 있다. 반대로 데이터를 독립적으로 보관해야 한다면 소유권 이전이나 복제가 필요하다. 무조건 clone을 추가해 오류를 피하면 의도하지 않은 복사 비용이 생길 수 있다.
안전성의 범위
컴파일 검사가 모든 논리 오류나 자원 고갈을 막아 주는 것은 아니다. unsafe 코드와 외부 라이브러리를 사용할 때에도 지켜야 할 조건이 있다. 언어의 메모리 안전성과 서비스의 인증·권한·업무 규칙상 안전성을 구별한다.
참고 자료