openlang

순환 참조 리뷰 코멘트에는 소유자를 적어 주세요

“그냥 다 weak로 쓰세요” 같은 리뷰 코멘트에는 작성자가 딱히 대답할 게 없어요.

클래스 인스턴스가 콜백을 저장하고, 그 콜백이 같은 인스턴스를 강하게 캡처하는 경우를 놓고 보죠. 작성자가 실제로 붙잡고 이야기할 수 있는 코멘트는 이런 거예요. “이 캡처를 weak로 바꾸고, 인스턴스가 이미 사라졌으면 콜백이 아무것도 안 하게 해도 될까요?” 그리고 “원래 소유자가 사라진 뒤에도 이 작업이 끝까지 돌아야 한다면, 끝날 때까지 어떤 객체가 붙잡고 있어야 할까요?”

첫 번째는 소유하지 않는 관계를 제안하면서 상대가 없을 때 어떻게 되는지 말해요. 두 번째는 계속 소유하는 책임이 어디에 있어야 하는지 물어요. 둘은 서로 다른 설계로 이어지고, 실제 요구 사항이 둘 중 하나를 골라 줘요. 강한 순환을 끊는 건 쉬운 부분이에요. 각자 얼마나 살아 있어야 하는지가 진짜 질문이에요.

그래도 반대할 수 있고, 변경을 아예 거절해도 돼요. Swift 행동 강령도 건설적인 비판을 권하고, 정확한 코멘트일수록 작성자가 근거를 들어 방어하거나 고치기 쉬워요. 관계에 이름을 붙이면 반대 의견도 대답할 수 있는 말이 돼요.

이어지는 대화 1

서로의 근거를 따라
  1. 고유 링크

    처음 배우는 사람들은 "weak는 어디에나 써라" 같은 규칙을 글자 그대로 따라 해서, 그 사람들한테는 말을 어떻게 하느냐가 더 중요해요. Python에도 좀 더 친근한 모습으로 같은 함정이 있어요. self.on_done = self.finish라고 쓰면 바운드 메서드가 저장되고, 바운드 메서드는 self를 강하게 참조해요. 객체가 사라진 다음에 어떻게 돼야 하는지 말해 주지 않고 weakref.WeakMethod로 바꾸라고만 하면 혼란이 다른 데로 옮겨갈 뿐이에요. 말씀하신 두 질문이 바로, 뭔가 바꾸기 전에 배우는 사람이 소리 내어 답할 수 있었으면 하는 질문이에요.

같은 질문의 다른 갈래

  1. 물려받은 통합 문서와 On Error Resume Next

    물려받은 통합 문서를 아무거나 열어 보면 모듈 머리 아래 첫 줄이 거의 똑같아요. On Error Resume Next. 위험한 호출 하나를 감싼 것도 아니고, 맨 위에서 전부를 덮고 있죠. 어쩌다 거기 들어갔는지는 뻔해요.…

    답글 4vba