java Proxy pattern 실습해보기

오늘은 java로 Proxy pattern을 실습해본 자료입니다.

프록시 패턴은 프록시 자체의 뜻과 비슷하게 대신해주는 패턴입니다.

간단한 일을 프록시 클래스에서 대신 수행하고 복잡한 일은 본 클래스에서 수행하게 됩니다.

public interface Value {
	public void getValue();
}

우선 인터페이스로 공통된 메소드를 추상화합니다.

public class RealValue implements Value{
	
	private String val;
	
	public RealValue(String val) {
		setVal(val);
		save(val);
	}

	private void save(String val) {
		System.out.println("Load "+val);
	}

	@Override
	public void getValue() {
		System.out.println("get Real Value");
	}
	
	public void setVal(String val) {
		this.val = val;
	}
}

값을 저장할 변수를 만들고 private으로 접근지정자로 지정합니다.

그리고 생성자로 변수에 값을 저장하며 출력합니다.

인터페이스에 추상화된 메소드로 구현합니다.

public class ProxyValue implements Value{
	
	private String val;
	RealValue realvalue;
	
	public ProxyValue(String val) {
		setVal(val);
	}

	@Override
	public void getValue() {
		if(realvalue == null)
			realvalue = new RealValue(val);
		realvalue.getValue();
	}
	
	public void setVal(String val) {
		this.val = val;
	}

}

프록시 클래스에서는 대부분 기능을 그대로 할 수 있겠지만 중요한 메소드는 넘겨줍니다.

이 코드는 getValue 메소드가 넘겨주게됩니다.

생성된 객체가 없다면 인자를 넣어 만들어주고, 있다면 그대로 getValue 메소드를 넘겨줍니다.

public class Main {
	public static void main(String[] args) {
		ProxyValue test = new ProxyValue("one value");
		
		test.getValue();
	}
}

메인 클래스는 테스트의 형태입니다.

프록시 객체에서 해당 메소드를 실행해도 프록시 클래스에서는 실행하지않고 넘겨줍니다.

Written on February 20, 2018