[JAVA] PROXY ?

다 은·2024년 6월 28일

JAVA

목록 보기
14/14

PROXY 🍕

proxy의 사전적인 의미는 '대리', '대리인, '대용'과 같은 의미로 쓰인다.

그렇다면 Java에서의 proxy는 클라이언트가 사용하는 실제 서비스 객체를 대체하는 객체를 제공하는 디자인 패턴, 즉 실제 객체는 자신의 기능에만 집중을 하고 그 외 부가 기능은 proxy 객체에서 위임하여 제어하도록 한다.

PROXY 패턴의 특징

  • proxy 객체는 실제 객체와 같은 이름의 메소드를 구현한다.
  • 프록시 객체는 실제 객체에 대한 참조 변수를 가진다.
  • 프록시 객체는 실제 객체의 메소드를 호출하고 그 결과를 클라리언트에게 반환한다.
  • 프록시 객체는 실제 객체 메소드의 호출 전과 후에 별도의 로직을 수행할 수 있다.

예시 👽

클라이언트가 호출 할 인터페이스(InterfacePhone)를 정의한다

public interface InterfacePhone {
    void appliedSystem();
}

인터페이스를 구현하고 있는 실제 객체(IPhone, Samsung)를 정의한다.

public class IPhone implements InterfacePhone {
	@Override
	public void appliedSystem() {
		System.out.println("I am using IOS");	
	}
}
public class Samsung implements InterfacePhone {
	@Override
	public void appliedSystem() {
		System.out.println("I am using android");
    }
}

인터페이스를 구현하고 있고, 실제 객체를 참조하고 있는 proxy 객체(StaticProxy)를 정의한다. 여기서의 예시는 정적 proxy !

public class StaticProxy implements InterfacePhone{
	
    InterfacePhone interfacePhone;

	public StaticProxy(InterfacePhone interfacePhone) {
		super();
		this.interfacePhone = interfacePhone;
	}
    
	@Override
	public void appliedSystem() {
		System.out.println("[LOG] "+ new Date() + " :The application invoked the below:" )
		interfacePhone.appliedSystem();
	}
}

proxy 마무리 🍕

proxy를 사용하기 위해서는 대상 클래스의 수만큼 proxy 클래스를 하나하나 만들어 줘야하고, 그 안에 생성되는 코드들은 반복되기 때문에 코드 중복이라는 단점이 있다.
🔜 dynamic proxy를 사용하면 해결할 수 있다!

proxy를 사용함으로써 실제 객체에 부가 기능을 추가하지 않을 수 있으며 이에 SOLID 원칙을 지향하는 코드를 개발할 수 있다.

참고 사이트 🌐

➡️ Proxy란 (with Java)
➡️ Quick Understanding of Java Proxy

0개의 댓글