본문 바로가기
프로그래밍/디자인패턴

자바 프록시 패턴

by 방구석개발자 2022. 11. 1.
반응형

설명 및 왜 사용해야하는지

Proxy를 번역하면 대리자 입니다.

즉 프록시 패턴이란 어떤 객체의 접근을 제어하는 대리 객체를 제공하여 다양한 선행처리(접근제한, 캐시 등)을 이용하는 패턴입니다.

대리(Proxy)객체는 부모객체를 상속받고 위임도 받아서 사용합니다.

 

예시

ride()메서드를 가진 자전거를 간단하게 객체 생성하고 ride를 실행해보는 작업을 진행해보겠습니다.

 

먼저 타다 라는 메서드를 지닌 자전거 인터페이스가 있습니다.

public interface Bicycle {
    void ride();
}

 

자전거는 구현체를 지니고 있는데요. 다이아몬드백이 자전거의 구현체입니다.

public class DiamondbackBicycle implements Bicycle {
    @Override
    public void ride() {
        System.out.println("다이아몬드백 자전거 타는 중");
    }
}

 

다이아몬드백을 위임하고 자전거를 상속받은 대리자전거(ProxyBicyle)이 있습니다.

public class ProxyBicyle implements Bicycle {
    private DiamondbackBicycle bicycle;

    @Override
    public void ride() {
        // 여기서 원하는 로직을 실행할 수 있습니다.
        if(Objects.isNull(bicycle)){
            // 여기서 원하는 로직을 실행할 수 있습니다.
            System.out.println("다이아몬드 자전거는 프록시에서 생성됨");
            bicycle = new DiamondbackBicycle();
        }
        bicycle.ride();
    }
}

 

프록시자전거에서 실제 ride를 실행하기 전에 원하는 로직을 먼저 선행하여 실행 할 수 있습니다.

이제 자전거를 생성하여 타보겠습니다.

public class Client {
    public static void main(String[] args) {
        System.out.println("자전거를 타보겠습니다.");

        Bicycle bicycle = new ProxyBicyle();

        bicycle.ride();
    }
}

실행 결과

실행결과를 보면 프록시에서 다이아몬드 자전거를 생성하여 ride를 실행하게 됩니다.

이처럼 프록시패턴을 사용하면 선행처리(접근제한, 캐시 등)를 먼저 할 수 있습니다.

 

해당 코드는 깃허브 레포에 있습니다!

https://github.com/lsm7179/hdcd_source_java_designpattern_gof/tree/master/ch02/src/com/my/pattern/proxy

 

GitHub - lsm7179/hdcd_source_java_designpattern_gof: 자바로 보는 디자인 패턴 스터디 및 공부

자바로 보는 디자인 패턴 스터디 및 공부. Contribute to lsm7179/hdcd_source_java_designpattern_gof development by creating an account on GitHub.

github.com

 

프록시 패턴 vs 데코레이터 패턴

프록시 패턴의 경우 실제 객체에 대한 접근을 제어하는데 초점이 맞춰져 있습니다.

데코레이터 패턴은 기존 객체의 기능을 확장하는데 초점을 맞추고 있습니다.

 

스프링 예시

spring aop는 기본적으로 프록시 방식으로 동작됩니다.

잘 설명된 포스팅 참고하시면  좋을거 같습니다.

https://mangkyu.tistory.com/175

 

[Spring] Spring의 AOP 프록시 구현 방법(JDK 동적 프록시, CGLib 프록시)과 @EnableAspectJAutoProxy의 proxyTarget

아래의 내용은 토비의 스프링 2권 5장을 읽고 정리한 내용입니다. 1. Spring의 AOP 프록시 구현 방법(JDK Dynamic Proxy,  CGLib Proxy) [ AOP에 대한 이해 ] AOP는 부가 기능을 핵심 기능으로부터 분리하기..

mangkyu.tistory.com

 

감사합니다.

반응형

'프로그래밍 > 디자인패턴' 카테고리의 다른 글

자바 커맨드(Command) 패턴  (0) 2022.12.12
자바 데커레이터(Decorator) 패턴  (0) 2022.11.15
자바 전략 패턴  (0) 2022.11.03
자바 빌더 패턴  (0) 2022.10.30
자바 팩토리 메서드 패턴  (0) 2022.10.25

댓글