본문 바로가기
java

Design Patterns - Proxy

by 쭈꾸마뇽 2022. 1. 16.

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

초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 할 수 있다

public interface GameService {

    void startGame();

}
public class DefaultGameService implements GameService {

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

기본적으로 수행해야 할 로직이 담겨있는 기본 구현체 클래스이다

public class GameServiceProxy implements GameService {

    private GameService gameService;

    @Override
    public void startGame() {
        long before = System.currentTimeMillis();
        if (this.gameService == null) {
            this.gameService = new DefaultGameService();
        }

        gameService.startGame();
        System.out.println(System.currentTimeMillis() - before);
    }
}

기본 구현체 클래스를 수정하지 않고 새로운 기능을 추가하기 위해 프록시 구현체를 추가해준다.  이 프록시 구현체는 기본 구현체의 인터페이스를 상속받음과 동시에 인스턴스 변수로 갖고 있어 인터페이스에 정의된 메서드대로 호출되며 프록시의 기능을 구현하고 인스턴스 변수로 들어온 기본 구현체의 기능도 호출하여 기능을 추가할 수 있다.

public class Client {

    public static void main(String[] args) {
        GameService gameService = new GameServiceProxy();
        gameService.startGame();
    }
}
  • 장점
    • 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다
    • 기존 코드가 해야 하는 일만 유지할 수 있다
    • 기능 추가 및 초기화 지연 등으로 다양하게 활용할 수 있다
  • 단점
    • 코드의 복잡도가 증가한다

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

'java' 카테고리의 다른 글

Design Patterns - Command  (0) 2022.03.01
Design Patterns - Chain of Responsibility  (0) 2022.01.30
Design Patterns - Flyweight  (0) 2021.12.21
Design Patterns - Facade  (0) 2021.12.10
Design Patterns - Decorator  (0) 2021.12.04

댓글