
93
1
장
타입
한 동기화 컨테이너를 사용해야 한다. 하지만 이런 컨테이너는 공유 상태 동시성 관련 문제 중
일부만 막아준다(아이템
17
).
컴파일 오류가 발생할 때 제시된 해결책을 보고 판단하는 전략을 따를 수도 있지만, 다양한 스
마트 포인터의 동작을 정확히 이해하는 것이 시간을 절약하고 시행착오를 줄이는 방법이다.
『러스트 프로그래밍 공식 가이드』 (제이펍,
2019
)의 초판본에 나온 말장난 섞인 예를 인용하면
다음과 같다.
●
Rc<RefCell<Vec<T>>>
는 공유 소유권 (
Rc
)을 가진 벡터(
Vec
)를 보유하는데, 이 벡터는 전체 벡터만
변경할 수 있고 개별 항목을 수정할 수는 없다.
●
Rc<Vec<RefCell<T>>>
역시 공유 소유권을 가진 벡터를 보유하지만, 벡터 안에 담긴 개별 항목 단위로
변경할 수 있다.
이런 동작은 관련 타입을 통해 명확히 드러난다.
아이템
9
: 명시적 루프보다 반복자 변환으로 표현하라
루프는 초기의 단순한 형태에서 시작해, 점점 더 사용하기 편하고 고차원적으로 표현할 수 있
도록 발전해 왔다.
C
언어의 전신인
34
B
언어는
while
(
condition
) { ... }
만 제공했지만,
C
언어부터 등장한
for
루프 덕분에 우리가 자주 사용하는 배열 인덱스 기반 반복문을 더욱 쉽
게 작성할 수 있게 됐다.
// C ...