프록시 패턴(Proxy Pattern)은 호출에 대한 흐름제어가 목적입니다.

의존 역전 원칙(Dependency Inversion Principle, DIP)를 활용한 디자인 패턴입니다.

 

 


 

의존 역전 원칙(Dependency Inversion Principle, DIP)

DIP는 상위 객체가 하위 객체에 의존해서는 안되며 추상화에 의존해야함을 의미합니다.

 

즉, DIP는 상위 객체가 하위 객체에 직접 의존하기보다는 인터페이스나 추상 클래스를 통해 객체에 의존하라는 것입니다.

 

인터페이스를 통해 하위 객체에 접근하게 되면상위 객체와 하위 객체 간 관계가 느슨해지고 이로 인해  코드의 유연성을 높일 수 있습니다.

 

 

 

프록시 패턴(Proxy Pattern)

 

네트워크에서는 웹 프록시가 존재합니다.

웹 프록시를 간단하게 설명하면,

클라이언트와 서버 사이에서 중개자의 역할을 하면서 부가적인 기능을 통해 로직을 수행합니다.

 

이와 비슷하게, 프록시 패턴은 중개자의 역할이며

실제로 객체가 필요할 때까지 생성을 지연하고 접근을 제어하는 것에 목적을 두고 있습니다.

 

이해를 돕기 위한 간단한 예시 코드입니다.

 

public class IService {
    abstract String runSomething();
    
} // end interface

 

public class Service implements IService {
	
    @override
    public String runSomething() {
    	return "runSomething()"
        
    } // runSomething
    
} // end class

 

Service 클래스는 IService 인터페이스를 구현하고 있고 있습니다.

이제 Service 클래스에 접근을 제어하기 위한 Proxy 클래스를 만들겠습니다.

 

@log4j2
public class Proxy implements IService {
    IService service1;
    
    
    @override
    public String runSomething() {
    	log.trace("Proxy runSomething() Method invoked.");
        
        service1 = new Service();  // IService를 참조하는 Service 객체 생성
        return service1.runSomething();
        
    } // runSomething
    
} // end class

 

위 코드는 IService 인터페이스를 구현하는 Proxy 클래스입니다.

 

@log4j2
public class ClientWithProxy {
    
    
    public static class main(String[] args) {
        log.trace("main({}) invoked.", Arrays.toString(args));
        
        
        IService proxy = new Proxy(); // IService를 참조하는 Proxy 객체 생성
        log.info(proxy.runSomething());
    
    } // main
    
} // end class

 

 

Proxy 클래스를 보면

runSomething() 메서드를 실행시켜야 Service 객체를 생성하고 이용할 수 있도록 하였습니다.

 

만약 여기서 실행 클래스가 이용할 Service 클래스가 늘어난다 하더라도 Proxy 클래스를 이용해 객체를 관리하고 접근할 수 있습니다.

 

 

 

 

'Java > Design Patterns' 카테고리의 다른 글

암호화 알고리즘  (0) 2023.09.14
어댑터 패턴  (0) 2023.08.13

+ Recent posts