IT TIP

WeakHashMap은 있지만 WeakSet은없는 이유는 무엇입니까?

itqueen 2020. 10. 26. 21:38
반응형

WeakHashMap은 있지만 WeakSet은없는 이유는 무엇입니까?


에서 J. 블로흐

... 메모리 누수의 원인은 리스너입니다. 콜백이 즉시 가비지 수집되도록 보장하는 가장 좋은 방법은 WeakHashMap에 키로 만 저장하는 것과 같이 약한 참조 만 저장하는 것 입니다.

그렇다면 Java Collections 프레임 워크에 WeakSet이없는 이유는 무엇입니까?


간단합니다. WeakHashMap(특히 추가 속성으로 객체에 주석을 달고 싶은 경우) 사용 사례가 있지만 WeakSet에 대한 사용 사례는 없습니다.


Set<Object> weakHashSet = Collections.newSetFromMap(
        new WeakHashMap<Object, Boolean>());

에서 보는 바와 같이 Collections.newSetFromMap문서, A는 통과 WeakHashMap를 얻을 Set.


그렇다면 자바 컬렉션 프레임 워크에 WeakSet이없는 이유는 무엇입니까?

그것에 대한 유일한 정답은 우리가 디자인 결정을 내린 사람이 아니기 때문에 이유를 말할 수 없다는 것입니다. Java 설계자 만이 결정을 내린 이유를 알고 있습니다 1 .


에 대한 사용 사례가 제한적일 수 있지만 WeakHashSetJava 클래스 라이브러리 디자인 철학의 일부는 가능한 모든 사용 사례에 대해 유틸리티 클래스로 클래스 라이브러리를 채우지 않는 것이 었습니다.

컬렉션 유형을 포함하는 다른 클래스 라이브러리가 많이 있습니다. Apache Commons Collections 및 Google Collections (일명 Guava)가 좋은 예입니다. 그러나 WeakHashSet아파치와 구글 라이브러리를 "잘라 내지"않았다.

물론 인스턴스 Collections.newSetFromMap를 래핑하는 데 사용할 수 있습니다 WeakHashMap.


1-해당 결정의 정확성에 대한 토론은 StackOverflow의 범위를 벗어납니다. 이것은 토론 포럼이 아닌 Q & A 사이트입니다.


실제로 Collections.newSetFromMap()WeakSet을 얻는 데 사용할 수 있지만 사용 사례는 실제로 매우 제한적입니다.

같은 것을 구현 String.intern()하려면 Interners.newWeakInterner()대신 Guava의 기능을 살펴 보는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/4062919/why-does-exist-weakhashmap-but-absent-weakset

반응형