Java의 약한 참조 클래스

Sheeraz Gul 2023년10월12일
Java의 약한 참조 클래스

약한 참조는 개체가 메모리에 남아 있도록 할 만큼 강력하지 않은 참조입니다. 이 자습서는 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 Gul avatar Sheeraz Gul avatar

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