객체지향 (OOP)/디자인 패턴

프록시 패턴(proxy pattern)

고인돌개발자 2021. 6. 22. 22:17

정의[위키피디아]

프록시 패턴(proxy pattern)은 컴퓨터 프로그래밍에서 소프트웨어 디자인 패턴의 하나이다.

일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다.

프록시는 어떠한 것(이를테면 네트워크 연결, 메모리 안의 커다란 객체,

파일, 또 복제할 수 없거나 수요가 많은 리소스)과도 인터페이스의 역할을 수행할 수 있다.

 

정의[쉽게]

 단어적의미 Proxy 
 1.대리[위임](권)
 2.대리인
 3.명사 격식 또는 전문 용어 (측정·계산하려는 다른 것을 대표하도록 이용하는) 대용물

 

프록시 패턴은 프로그램에서 대리로 사용할 객체를 만들어서 사용한다.

프록시 패턴은 OCP, DIP 원칙을 구현한다.

 

우리가 스프링에서 쉽게 볼 수 있는 인터페이스 - 구현체의 관계로 이해된다.

<위키피디아 설명 이미지>


소스코드로 이해하기 

<Class Uml>

 


프록시 이전 

 

Service.java

public class Service {
	
	public String runSomething() {
		return "서비스 짱";
	}	
}

 

ClientWithNoProxy.java

public class ClientWithNoProxy {

	public static void main(String[] args) {
		// 프록시를 이용하지 않은 호출 
		Service service = new Service();
		System.out.println(service.runSomething());
	}
}

프록시 이후

 

IService.java

/*
 * Proxy 패턴에 사용할 대리자 (Interface)
 */
public interface IService {
	
	String runSomething();
}

Service2.java

/*
 * Proxy 패턴에 사용할 구현체 
 */
public class Service2 implements IService {

	@Override
	public String runSomething() {
		return "서비스 짱 !!!";
	}
}

Proxy.java

/*
 * Proxy 패턴에 사용할 구현체 
 */
public class Proxy implements IService {
	
	/* Proxy 패턴을 이용한, 대리객체 이용 */
	IService service2;

	@Override
	public String runSomething() {
		System.out.println("호출에 대한 흐름 제어가 주목정, 반환 결과를 그대로 전달");
		
		service2 = new Service2();		
		return service2.runSomething();
		
	}
}

ClientWithProxy.java

public class ClientWithProxy {

	public static void main(String[] args) {
		
		// 프록시 대리 객체를  이용한 호출 
		IService proxy = new Proxy();
		System.out.println(proxy.runSomething());

	}
}

프록시 패턴은 특히 스프링에서 DI 를 구현시 빈번하게 사용하는 패턴이다.

 

참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해