순환 참조 차단 기준

Rc끼리 서로 강하게 가리키면 카운트가 0이 되지 않아 메모리가 해제되지 않으므로 소유 관계와 관찰 관계를 분리해야 합니다.

소유는 Rc, 관찰은 Weak 값을 살리는 방향만 strong_count에 남깁니다.

Before: Rc 순환

leak risk
Node A Rc<B>
strong strong
Node B Rc<A>
drop 이후 서로가 서로를 살려 strong_count가 0으로 내려가지 않습니다.

After: Weak 역참조

break cycle
Owner Rc<Child>
strong down weak back
Child Weak<Owner>
drop 이후 Weak는 소유하지 않으므로 strong_count가 0이 되면 값이 해제됩니다.
1. 소유 방향 값의 생명주기를 책임지는 간선만 Rc로 둡니다.
2. 관찰 방향 부모, 캐시, 역참조는 Weak로 낮춥니다.
3. upgrade 대상이 사라진 경우 None을 처리합니다.