[java] 자바 프록시 패턴을 활용한 로깅 기능 구현
우리는 자바 어플리케이션에서 로깅 기능을 구현하는 것이 중요하다는 것을 알고 있습니다. 이러한 기능은 소스 코드에 분산되어 있을 수 있으며, 코드를 변경하지 않고도 로깅을 추가하거나 제어할 수 있는 방법이 필요합니다.
이를 위해 자바의 프록시 패턴을 사용하여 로깅 기능을 구현하는 방법을 살펴보겠습니다.
프록시 패턴
프록시 패턴은 기본적으로 다른 객체에 대한 인터페이스를 제공하여 해당 객체에 대한 접근을 제어하거나 대리할 수 있도록 하는 구조적 디자인 패턴입니다.
로깅 프록시 구현
우선 간단한 인터페이스를 만들어 보겠습니다. 이 인터페이스는 실제 작업을 처리하는 클래스의 메서드와 동일한 시그니처를 갖습니다.
public interface Service {
void doSomething();
}
다음으로, 이 인터페이스를 구현하는 실제 클래스를 만듭니다.
public class RealService implements Service {
@Override
public void doSomething() {
System.out.println("실제 작업을 수행합니다.");
}
}
이제 프록시 클래스를 작성하여 실제 작업을 수행하는 클래스를 감싸고 추가 기능을 수행할 수 있도록 합니다.
public class LoggingProxy implements Service {
private Service service;
public LoggingProxy(Service service) {
this.service = service;
}
@Override
public void doSomething() {
System.out.println("작업을 수행하기 전에 로깅을 시작합니다.");
service.doSomething();
System.out.println("작업을 완료하고 로깅을 마칩니다.");
}
}
사용 방법
실제 사용 시에는 프록시를 통해 실제 서비스에 액세스합니다.
public class Main {
public static void main(String[] args) {
Service service = new RealService();
Service proxy = new LoggingProxy(service);
proxy.doSomething();
}
}
위와 같이 하면 LoggingProxy
의 doSomething
메서드가 호출되고, 원하는 로깅 기능이 추가된 후에 RealService
의 doSomething
메서드가 호출됩니다.
이러한 방식으로 프록시 패턴을 사용하여 로깅 기능을 추가하고, 실제 동작을 변경하지 않으면서 유연하게 제어할 수 있습니다.
이처럼 프록시 패턴을 활용하여 로깅 기능을 구현하는 방법을 살펴보았습니다. 이 패턴은 다른 추가적인 기능을 구현할 때도 유용하게 활용될 수 있으므로, 기억해 두시면 좋을 것 같습니다.