Backend/JAVA / / 2025. 3. 27. 00:55

Java의 강한 참조, 약한 참조, 부드러운 참조 완벽 정리

Java 참조 타입: 강한 참조, 약한 참조, 부드러운 참조 차이점 완벽 이해

1. 강한 참조(Strong Reference)란?

강한 참조(Strong Reference)는 Java에서 가장 일반적인 참조 방식입니다. 우리가 일반적으로 객체를 생성할 때 사용하는 방식이며, 이 참조가 존재하는 한 가비지 컬렉터(Garbage Collector, GC)는 해당 객체를 절대 제거하지 않습니다.

public class StrongReferenceExample {
    public static void main(String[] args) {
        String strongReference = new String("Hello, Strong Reference");
        System.out.println(strongReference);  // 가비지 컬렉션 대상이 아님
    }
}

 

2. 약한 참조(Weak Reference)란?

약한 참조(Weak Reference)는 java.lang.ref.WeakReference 클래스를 사용하여 선언할 수 있으며, GC가 해당 객체를 수거해도 문제가 없는 경우 사용됩니다. 강한 참조가 없는 약한 참조 객체는 GC 수행 시 제거됩니다.

import java.lang.ref.WeakReference;

public class WeakReferenceExample {
    public static void main(String[] args) {
        WeakReference<String> weakReference = new WeakReference<>(new String("Hello, Weak Reference"));
        System.gc();  // GC 실행 시 약한 참조된 객체는 제거될 가능성이 높음
        System.out.println(weakReference.get());  // null이 될 수 있음
    }
}

 

3. 부드러운 참조(Soft Reference)란?

부드러운 참조(Soft Reference)는 java.lang.ref.SoftReference 클래스를 사용하여 선언하며, 메모리가 부족할 때만 GC에 의해 제거됩니다. 약한 참조보다 좀 더 강한 특징을 가지며, 캐시(Cache) 구현 시 유용하게 사용됩니다.

import java.lang.ref.SoftReference;

public class SoftReferenceExample {
    public static void main(String[] args) {
        SoftReference<String> softReference = new SoftReference<>(new String("Hello, Soft Reference"));
        System.gc();  // 즉시 제거되지 않음
        System.out.println(softReference.get());  // 여전히 값이 존재할 가능성이 높음
    }
}

 

4. 강한 참조 vs 약한 참조 vs 부드러운 참조 비교

참조 유형GC 대상 여부주요 특징

강한 참조 제거 안됨 일반적인 참조 방식, 객체가 사용되는 한 제거되지 않음
약한 참조 즉시 제거 GC가 탐색하면 바로 제거 가능, 캐시나 메모리 관리에 활용
부드러운 참조 메모리 부족 시 제거 GC가 메모리가 부족할 때만 제거, 캐시 등에 사용

5. 언제 어떤 참조를 사용해야 할까?

  • 강한 참조: 일반적인 객체 사용 시
  • 약한 참조: 메모리 부담을 줄이고 캐시 구현 시
  • 부드러운 참조: GC 부담을 최소화하면서 캐시를 유지할 때

6. 결론

Java에서 참조 유형을 올바르게 사용하면 메모리 관리를 효율적으로 할 수 있습니다. 특히, 캐시 관리나 메모리 최적화가 필요한 경우 약한 참조와 부드러운 참조를 적절히 활용하는 것이 중요합니다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유