구조 패턴: 프록시 패턴

소개

특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴이다.

  • 초기화 기젼, 접근 제어, 로길, 캐싱 등 다양하게 응용하여 사용할 수 있다.

1) 장점

  1. 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다.
  2. 기존 코드가 해야 하는 일만 유지할 수 있다.
  3. 기능 추가 및 초기화 지연 등으로 다양하게 활용할 수 있다.

2) 단점

  1. 코드의 복잡도가 증가한다.

구현

1) 인터페이스 정의

public interface GameService {
	void startGame();
}

2) 인터페이스를 구현하는 프록시 클래스 정의

  • 멤버 변수로 인터페이스를 구현하는 클래스의 인스턴스(구체 인스턴스)를 가진다.
  • 이후, 이터페이스를 오버라이딩 하는 곳에서 구체 인스턴스를 호출한다.
public class GameServiceProxy implements GameService {

	private GameService gameService;
    
    @Override
    public void startGame() {
    	long before = System.currentTimeMillis();
        if(this.nameService == null) {
        	this.gameSerivce = new DefaultGameService();
        }
        
        gameService.startGame();
        System.out.println(System.currentTimeMiliis() - before);
    }
    
}

3) 인터페이스를 구현하는 구체 클래스 정의

public class DefaultGameService implements GameService {

	@Override
    public void startGame() {
    	System.out.println("이 자리에 오신 여러분을 진심으로 환영합니다.");
    }
}

사용

public class Client {
	public static void main(String[] args) {
    	GameService gameService = newGameServiceProxy();
        gameService.startGame();
    }
}

좋은 웹페이지 즐겨찾기