-
[spring] 프록시 (Proxy) 패턴spring 2023. 5. 2. 19:55
▷프록시 패턴 정의
- 구조 패턴 카테고리
- 클라이언트는 실제 객체 대신 프록스 객체를 통해 작업 요청
▷프록시 패턴 구조
- Subject : Proxy와 RealSubject를 하나로 묶는 인터페이스 (다형성)
- 대상 객체와 프록시 역할을 동일하게 하는 추상 메소드
operation()를 정의한다. - 인터페이스가 있기 때문에 클라이언트는 Proxy 역할과 RealSubject 역할의 차이를 의식할 필요가 없다.
- 대상 객체와 프록시 역할을 동일하게 하는 추상 메소드
- RealSubject : 원본 대상 객체
- Proxy : 대상 객체(RealSubject)를 중계할 대리자 역할
- 프록시는 대상 객체를 합성(composition)한다.
- 프록시는 대상 객체와 같은 이름의 메서드를 호출하며, 별도의 로직을 수행 할수 있다 (인터페이스 구현 메소드)
- 프록시는 흐름제어만 할 뿐 결과값을 조작하거나 변경시키면 안 된다.
- Client : Subject 인터페이스를 이용하여 프록시 객체를 생성해 이용.
- 클라이언트는 프록시를 중간에 두고 프록시를 통해서 RealSubject와 데이터를 주고 받는다.
▷프록시 패턴 종류
- 가상 프록시
- 꼭 필요로 하는 시점까지 객체의 생성을 연기
- 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을때 사용하는 패턴
- 프록시 클래스에서 자잘한 작업들을 처리
- 리소스가 많이 요구되는 작업들이 필요할 때에만 주체 클래스를 사용하도록 구현
- 원격프록시
- 원격 객체에 대한 접근을 제어 로컬 환경에 존재
- 원격객체에 대한 대변자 역할을 하는 객체
- 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것처럼 동작
- 보호프록시
- 주체 클래스에 대한 접근을 제어하기 위한 경우에 객체에 대한 접근 권한을 제어
- 객체마다 접근 권한을 달리하고 싶을때 사용
- 프록시 클래스에서 클라이언트가 주체 클래스에 대한 접근을 허용할지 말지 결정할 수 있음
▷프록시 패턴 장점
- 메모리 사용량이 큰 객체가 로딩 전에 프록시를 통해서 참조 가능
- 로컬에 있지 않고 떨어져 있는 객체 사용 가능
- 원래 객체의 접근에 대해서 사전처리 작업 가능
▷프록시 패턴 단점
- 객체 생성에 한 단계를 거치므로 빈번한 객체 생성이 필요한 경우 성능 저하 발생 가능
- 코드 가독성 저하
▷기타 패턴 종류
- 생성 패턴
- 객체 인스턴스를 생성하는 패턴
- 구조 패턴
- 객체와 클래스를 보다 큰 구조로 조립
- 행동 패턴
- 객체나 클래스의 교류 방법에 대해 정의
생성 패턴 구조 패턴 행동 패턴 - 싱글턴
- 추상 팩토리
- 팩토리 메소드
- 빌더
- 프로토 타입
- 데코레이터
- 프록시
- 컴포지트
- 퍼사드
- 어댑터
- 플라이웨이트
- 브리지
- 템플릿메소드
- 싱글턴
- 반복자
- 옵저버
- 상태
- 전략
- 비지터
- 인터프리터
- 역할 변경
- 중재자
- 메멘토
[참고자료]
https://wellsw.tistory.com/218
[디자인패턴][Proxy] 프록시 패턴
프록시 패턴 정의 프록시에게 어떤 일을 대신 시키는 것 어떤 객체를 사용할 때 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대리하는 객체를 통해서 대상 객체에 접근하는 방식. 이는
wellsw.tistory.com
https://coding-factory.tistory.com/711
[Design Pattern] 프록시 패턴(Proxy Pattern)에 대하여
프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하시면 됩니다. 사장님한테 사소한 질문을 하기보다는 비서한테 먼저 물어보는
coding-factory.tistory.com
https://4z7l.github.io/2020/12/25/design_pattern_GoF.html
[Design Pattern] GoF(Gang of Four) 디자인 패턴 - HERSTORY
디자인 패턴이란 디자인 패턴은 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식을 말한다. 디자인 패턴을 통해 설계 문제, 해결 방
4z7l.github.io
'spring' 카테고리의 다른 글
[spring] tdd와 단위 테스트 (0) 2023.05.22 [spring] spring과 mysql 연결 (0) 2023.05.08 [spring] MyBatis와 Hibernate의 차이 (0) 2023.03.28 [spring] IntelliJ Cannot resolve symbol 'persistence' (1) 2023.03.27 [spring] GDSC spring study 2주차 오답노트 (0) 2023.03.21 - Subject : Proxy와 RealSubject를 하나로 묶는 인터페이스 (다형성)