Java의 약한 참조 클래스
Sheeraz Gul
2023년10월12일
약한 참조는 개체가 메모리에 남아 있도록 할 만큼 강력하지 않은 참조입니다. 이 자습서는 Java에서 약한 참조를 사용하는 방법을 보여줍니다.
Java의 약한 참조 클래스
Java에서 java.lang.ref.WeakReference
클래스는 가비지 수집기를 활용하여 도달 가능성을 결정하므로 직접 수행할 필요가 없습니다. Java의 약한 참조 클래스에는 다음과 같은 메서드가 있습니다.
방법 | 설명 |
---|---|
get() |
이 메서드는 참조 개체의 참조를 반환합니다. |
clear() |
이 메서드는 참조 개체를 지우는 데 사용됩니다. |
enqueue() |
이 메서드는 참조 개체를 대기열에 추가하는 데 사용됩니다. 개체를 대기열에 등록해야 합니다. |
isEnqueued() |
이 메서드는 참조 개체가 대기열에 추가되었는지 여부를 알려줍니다. 가비지 수집기 또는 프로그램 자체에 의해 발생할 수 있습니다. |
먼저 Java 약한 참조 클래스를 구현하는 간단한 예제를 시도해 보겠습니다.
package delftstack;
import java.lang.ref.WeakReference;
public class Weak_Reference {
public static void main(String[] args) {
// creating a strong object
Demo_Class Strong_Object = new Demo_Class();
// creating a weak reference of demo_class
WeakReference<Demo_Class> Weak_Object = new WeakReference<>(Strong_Object);
System.out.println("Call the show info function using the strong object");
Strong_Object.Show_Info();
System.out.println("Setting the object to null");
Strong_Object = null;
Strong_Object = Weak_Object.get();
System.out.println("Call the show info function using the weak object");
Strong_Object.Show_Info();
}
}
class Demo_Class {
void Show_Info() {
System.out.println(">>This is the info from demo class<<");
}
}
위의 코드는 Demo_Class
의 강력한 객체와 동일한 클래스의 약한 객체를 생성하고 Show_Info
함수를 호출합니다. 출력 참조:
Call the show info function using the strong object
>>This is the info from demo class<<
Setting the object to null
Call the show info function using the weak object
>>This is the info from demo class<<
이제 위의 방법으로 예제를 시도해 보겠습니다.
package delftstack;
import java.lang.ref.WeakReference;
public class Weak_Reference {
public static void main(String[] args) {
Demo_Class Strong_Object = new Demo_Class();
WeakReference<Demo_Class> Weak_Object = new WeakReference<Demo_Class>(Strong_Object);
System.out.println("Retrieve object from weak reference using get()");
Weak_Object.get().Show_Info();
System.out.println("queue object using enqueue()");
System.out.println(Weak_Object.enqueue());
System.out.println("Check if reference is queued using isEnqueued()");
System.out.println(Weak_Object.isEnqueued());
}
}
class Demo_Class {
void Show_Info() {
System.out.println("Show_Info() from Demo_Class is called.");
}
}
위의 코드는 Demo_Class
의 약한 개체에 대해 위에서 설명한 모든 방법을 사용합니다. 출력 참조:
Retrieve object from weak reference using get()
Show_Info() from Demo_Class is called.
queue object using enqueue()
false
Check if reference is queued using isEnqueued()
false
작가: Sheeraz Gul
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook