1

이 시나리오에서는 걱정할 가치가 없지만 모든 구성 요소가있는 JFrame과 원격 클라이언트의 요청을 처리하는 서버와 같은 클래스라는 두 가지 클래스가 있다고 가정 해 보겠습니다. 사용자는 GUI를 통해 서버 오브젝트를 시작 및 중지 할 수 있으며 각 서버 오브젝트에 발생하는 다양한 이벤트가 표시됩니다. JFrame이 MVC와 같은 명시적인 패턴을 사용하는지 여부에 관계없이 JFrame은 서버 클래스에 대한 참조 (시작 및 중지 호출)가 필요하며 서버는 JFrame에 대한 참조가 필요합니다 (특정 이벤트를 알리기 위해) .스윙 GUI에서 순환 참조 피하기

이 문제입니까? 아니면이 상황을 잘못보고 있습니까?

답변

4

리스너 패턴을 적용 할 장소와 비슷합니다. 서버에는 addSomethingListener (SomethingListener listener)라는 메서드가있을 수 있습니다.이 메서드는 JFrame에서 SomethingListener 구현으로 호출합니다. 그런 다음 서버는 적절한 이벤트가 발생할 때마다 리스너의 메소드를 호출합니다.

+0

JFrame에 대한 참조가 ArrayList에 있고 하드 코딩되지 않았기 때문에 Listener 패턴이 순환 참조에 있다는 사실을 제거하지 않는다는 것에 동의합니다. 실제로 두 번째 생각에서 순환 참조는 문제가 아니기 때문에 (GC가 처리 할 수 ​​있으므로) 순환 종속성이 유일한 문제입니다. 리스너 패턴은 ​​GUI가 '비즈니스'코드에 의존하는 것이 좋기 때문에 이것을 해결하지만 그 반대의 방식은 아닙니다. 그 이유를 설명해 주셔서 감사합니다. –