[java] 자바 프록시 패턴을 활용한 캐싱 기능 구현
개요
프록시 패턴은 하나의 객체가 다른 객체에 대한 인터페이스로 동작하도록 하여 객체에 대한 접근을 제어하는 디자인 패턴이다. 이 패턴을 활용하여 메소드 호출의 결과를 캐싱하는 기능을 구현할 수 있다.
프록시 패턴을 이용한 캐싱 기능 구현
프록시 패턴을 사용하여 메소드 호출 결과를 캐싱하는 기능을 구현하려면 다음과 같이 코드를 작성할 수 있다.
-
캐싱할 메소드를 가진 인터페이스를 정의한다.
public interface DataService { String fetchData(String key); }
-
실제 데이터를 제공하는 클래스를 구현한다.
public class DataServiceImpl implements DataService { @Override public String fetchData(String key) { // 데이터를 가져오는 로직 return "Data for key: " + key; } }
-
캐싱 기능을 추가한 프록시 클래스를 구현한다.
import java.util.HashMap; import java.util.Map; public class CachingProxy implements DataService { private DataService dataService; private Map<String, String> cache = new HashMap<>(); public CachingProxy(DataService dataService) { this.dataService = dataService; } @Override public String fetchData(String key) { if (cache.containsKey(key)) { return cache.get(key); } else { String data = dataService.fetchData(key); cache.put(key, data); return data; } } }
-
클라이언트에서 프록시를 통해 메소드를 호출한다.
public class Main { public static void main(String[] args) { DataService dataService = new DataServiceImpl(); DataService proxy = new CachingProxy(dataService); System.out.println(proxy.fetchData("key1")); // 데이터를 가져와서 캐싱 System.out.println(proxy.fetchData("key1")); // 캐싱된 데이터 사용 } }
결론
프록시 패턴을 사용하여 메소드 호출 결과를 캐싱하는 기능을 구현할 수 있다. 이를 통해 매번 동일한 메소드 호출에 대해 중복된 계산을 피하고 성능을 향상시킬 수 있다.
참고문헌:
- https://en.wikipedia.org/wiki/Proxy_pattern
- https://www.baeldung.com/java-proxy-pattern