상세 컨텐츠

본문 제목

JAVA - 프록시패턴

Java

by endless123 2024. 9. 27. 16:51

본문

프록시 패턴

 

프록시(Proxy)는 대리자, 대변인이라는 뜻을 가진 단어이다. 대리자 / 대변인은 다른 누군가를 대신해 그 역할을 수행하는 존재를 말한다. 이는 프로그램에도 똑같이 적용된다. 즉 프록시에게 어떤 일을 대신 시키는 것을 말한다.

따라서 프록시 패턴은 특정 객체의 대리자나 대변인 역할을 하는 프록시 객체를 제공하는 디자인 패턴이다.

어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 수 있다.

프록시 패턴을 사용함으로써 클라이언트는 특정 객체를 직접 참조하여 접근하는 것이 아닌 프록시 객체를 통해 상호작용한다.

 

프록시 객체의 장단점

 

장점

- 접근 제어 : 클라이언트가 실제 객체에 직접 접근하지 않도록 제어하여 객체의 접근들을 관리하고 권한 검사 등을 수행할 수 있다.

- 지연 초기화 : 실제 객체의 생성 및 초기화를 지연시키는데 사용하여 필요한 순간만에 생성 및 초기화하여 성능을 최적화 할 수 있다.

- 캐싱 : 결과를 캐싱하여 접근하기 전에 데이터의 유효성 검사를 통해 검증할 수 있다.

- 유효성 검사 : 실제 객체에 접근하기 전에 데이터의 유효성 검사를 통해 검증할 수 있다.

- 원격 액세스 : 원격 프록시를 사용하여 다른 시스템에서 실행 중인 객체에 접근할 수 있으며 분산 시스템에서 객체 간 통신을 용이하게 한다.

 

단점

- 복잡성 증가 : 추가적인 객체를 도입하기 때문에 코드의 복잡성이 증가할 수 있다.

- 성능 저하 : 프록시 객체에 접근하는 데 추가적인 오버헤드가 발생할 수 있으며, 일부 성능 저하가 발생할 수 있다.

- 디자인 복합성 : 프록시 패턴을 오용하면 코드를 과도하게 복잡하게 만들 수 있다.

 

프록시 패턴은 특정 객체에 대한 접근 제어, 지연 초기화, 유효성 검사, 로깅, 원격 액세스 등 특정 상황에서 유용하며 여러 가지 상황을 고려하여 도입하는 것이 중요하다.잘못된 사용은 코드를 더 복잡하게 하며 성능 저하가 일어날 수 있다.

 

 

프록시 패턴의 구조

 

프록시 패턴은 클라이언트가 접근할 Subject와 이에 대한 구현체인 RealSubject, Proxy가 존재한다.

 

- Subject : Proxy와 RealSubject가 모두 구현하는 인터페이스로 클라이언트가 프록시와 실제 대상을 동일하게 다룰 수 있도록 정의한다.

- RealSubject : 클라이언트가 직접 상호작용하는 실제 객체다.

- Proxy : RealSubject를 감싸며 실제 작업을 수행하는 주체로 클라이언트와 RealSubject 사이에 위치한 중간 객체다. RealSubject의 같은 이름의 메서드를 호출하며, 클라이언트의 요청을 처리하기 전이나 후에 추가적인 작업릉 수행할 수 있다.

 

프록시 패턴의 종류

 

가상프록시

꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것 처럼 동작하도록 만들고 싶을 때 사용하는 패턴이다. 프록시 클래스에서 작은 단위의 작업을 처리하고 리소스가 많이 요구되는 작업들이 필요한 경우만 주체 클래스를 사용하도록 구현한다.

 

원격프록시

원격 객체에 대한 접근을 제어 로컬 환경에 존재하며, 원격 객체에 대한 대변자 역할을 하는 객체, 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것 처럼 동작하게 하는 패턴이다.

 

보호프록시

주체 클래스에 대한 접근을 제어하기 위한 경우에 객체에 대한 접근 권한을 제어하거나

객체마다 접근 권한을 달리하고 싶을 경우 사용하는 패턴으로 프록시 클래스에서 클라이언트가 주체 클래스에 대한 접근을 허용할지 맣지 결정하도록 할 수 있다.

 

 

 

'Java' 카테고리의 다른 글

JAVA - 전략 패턴  (1) 2024.09.27
JAVA - 데코레이터 패턴  (0) 2024.09.27
JAVA - 어댑터 패턴  (2) 2024.09.26
JAVA - 콜백 메서드 만들어 보기 (1)  (1) 2024.09.26
JAVA - 싱글톤패턴  (2) 2024.09.26

관련글 더보기