728x90
반응형
Proxy Pattern
특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴
초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용할 수 있다.
클라이언트가 원래 사용하려는 객체를 직접하는 하는 것이 아니라 '대리인'을 사용하여 접근하는 방식.
BEFORE
Client
public class Client {
public static void main(String[] args) throws InterruptedException {
GameService gameService = new GameService();
gameService.startGame();
}
}
GameService
public class GameService {
public void startGame() {
System.out.println("이 자리에 오신 여러분을 진심으로 환영합니다.");
}
}
AFTER
Client (GameServiceProxy으로 생성)
public class Client {
public static void main(String[] args) {
GameService gameService = new GameServiceProxy();
gameService.startGame();
}
}
GameServiceProxy
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);
}
}
DefaultGameService (Real Subject)
public class DefaultGameService implements GameService {
@Override
public void startGame() {
System.out.println("이 자리에 오신 여러분을 진심으로 환영합니다.");
}
}
GameService (interface화)
public interface GameService {
void startGame();
}
[패턴 복습]
장점 | 단점 |
- 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다. - 기존코드가 해야하는 일만 유지할 수 있다. - 기능 추가 및 초기화 지연 등으로 다양하게 활용할 수 있다. |
- 코드의 복잡도가 증가한다. |
[실무에서 쓰이는 경우]
- 자바
- 다이나믹 프록시, java.lang.reflect.Proxy
- 스프링
- 스프링 AOP
💡 INTIP 프로젝트에서 커뮤니티별로 달라지는 CRUD 기능들은 이 프록시패턴을 활용하여 리팩토링하면 좋을 듯!
728x90
반응형
'Design Patterns > 구조(Structural)' 카테고리의 다른 글
[Flyweight]플라이웨이트패턴 (0) | 2022.10.18 |
---|---|
[Facade]퍼사드패턴 (0) | 2022.10.18 |
[Decorator]데코레이터패턴 (0) | 2022.08.01 |
[Composite]컴포짓패턴 (0) | 2022.08.01 |
[Bridge]브릿지패턴 (0) | 2022.08.01 |