프록시 패턴

김예진·2023년 1월 6일

java

목록 보기
20/21

✨프록시 패턴이란?

  • 프록시(Proxy)는 사전적 용어로 대리인 이라는 의미를 지니고 있음
  • 프록시 패턴이라는 용어를 본래 자신이 해야할 역할을 다른 무언가가 대신 하는 것이라는 뜻으로 접근할 수 있음
  • 프록시 패턴은 어떠한 객체에 대한 접근을 제어하는 용도로 객체의 대리인 역할을 하는 객체를 제공하는 패턴

✨프록시의 구성요소

  • Client (사용자)
  • Subject (인터페이스)
  • Proxy (대리인)
  • Real (실체 객체)

✨프록시 사용 예시

✨프록시 패턴의 종류

  1. 가상 프록시
  • 꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을때 사용하는 패턴임
  • 프록시 클래스에서 자잘한 작업들을 처리하고 리소스가 많이 요구되는 작업들이 필요할 때에만 주체 클래스를 사용하도록 구현
  • 해상도가 아주 높은 이미지를 처리해야 하는 경우 작업을 분산하는 것을 예로 들 수 있음
  1. 원격 프록시
  • 원격 객체에 대한 접근을 제어
  • 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것처럼 동작하게 만드는 패턴
  • Google Docs를 예시로 들 수 있음
  1. 보호 프록시
  • 주체 클래스에 대한 접근을 제어하기 위한 경우에 접근 권한을 제어하거나 객체마다 접근 권하을 달리하고 싶을때 사용하는 패턴
  • 클라이언트가 주체 클래스에 대한 접근을 허용할지 말지 결정하도록 할 수 있음

✨예제 코드

  • 현재 문지기에게 쫓아내는 행동밖에 없는 상태
  • 문지기에게 쫓아낼때 인사를 하는 행동을 추가하고 싶음
  • 쫓아내 메소드에 추가하는 방법도 있지만 이 방법은 기존 코드를 수정하게 되어 ocp원칙을 지키지 못함

프록시 패턴을 사용해서 추가
DoorManProxy.java

package com.test.proxypatten.ex2;

public class DoorManProxy{

	private DoorMan doorMan;

	public DoorManProxy(DoorMan doorMan) {
		this.doorMan = doorMan;
	}
	public void 쫓아내(Animal a){
		System.out.println("잘가");
		doorMan.쫓아내(a);
	}

}

DoorMan.java

package com.test.proxypatten.ex2;

public class DoorMan {

	public void 쫓아내(Animal a){
		System.out.println(a.getName() + " 쫓아내");
	}

}

App.java

package com.test.proxypatten.ex2;

public class App {
	public static void main(String[] args){
		Mouse mouse = new Mouse();
		Cat cat = new Cat();
		DoorManProxy doorManProxy = new DoorManProxy(new DoorMan());
		doorManProxy.쫓아내(mouse);
		doorManProxy.쫓아내(cat);
	}
}

실행결과

참고자료
https://today-retrospect.tistory.com/102
https://coding-factory.tistory.com/711
https://www.youtube.com/watch?v=TO9XnSkuUtg&t=2s

0개의 댓글