디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[Java] 디자인 패턴: 구조-프록시(Proxy)

A갤러(221.167) 2024.03.29 18:34:22
조회 128 추천 3 댓글 0
														

[!] 디자인 패턴 소개:https://cafe.naver.com/minecraftgame/1904619

1. 소개

프록시는 대상 원본 객체를 Wrapping 하고대신 처리하게 함으로써 논리 흐름을 제어하는 행동 패턴임.

2. 기본 구조

24b0d121e09c28a8699fe8b115ef0464d189e7
publicinterface Subject {voidoperation();}
publicclass SubjectImpl implements Subject { @Override publicvoidoperation(){...}}
publicclass Proxy {private final SubjectImpl subject;publicProxy(SubjectImpl subject){this.subject = subject;} @Override publicvoidoperation(){// 이전에 다른 작업들을 할 수 있음. subject.operation();}}
publicclass Application {publicstaticvoidmain(String[] args){ Subject subject =new Proxy(new SubjectImpl()); subject.operation();// Proxy를 거쳐서 실행됨.}}

3. 예시

프록시는 주로 아래와 같은 작업을 하기 위해 만들어짐:

권한 확인(Authorization): 프록시는 클라이언트가 작업을 수행할 수 있는 권한이 있는지 확인하고 실행하게 할 수 있음.

@Override publicvoidoperation(User user){if(user.hasNotPermission("admin"))thrownew Exception("No permission"); subject.operation();}

캐싱(Caching): 프록시가 내부 캐시를 유지하여 데이터가 캐시에 아직 존재하지 않는 경우에만 대상에서 작업이 실행되도록 할 수 있음.

데이터 유효성 검사(Data validation): 입력을 대상으로 전달하기 전에 유효성을 검사할 수 있음.

@Override publicvoidoperation(int data){if(data <0|| data !=null)thrownew IllegalArgumentException("Invalid data: %s".formatted(data)); subject.operation();}

지연 초기화(Lazy initialization): 대상의 생성 비용이 비싸다면 프록시는 그것을 필요로 할 때까지 연기한 후, 실제로 사용될 때 초기화를 진행하게 할 수 있음.

@Override publicvoidoperation(User user){if(subject ==null) subject =new SubjectImpl(); subject.operation();}

로깅(Logging): 메소드 호출을 기록할 수 있음.

@Slf4j @Override publicvoidoperation(User user){ log.info("User %s called Proxy#operation".formatted(user.toString())) subject.operation();}

원격 객체(Remote objects): 프록시는 원격 위치에 있는 객체를 가져와서 줄 수 있음.

4. 응용

자바 JDK Reflection에서는 프록시의 생성을 자동으로 해주는 Dynamic Proxy(동적 프록시) 기능이 존재함. 자세한 설명은 아래를 참고해주셈:

Spring 에서는 Proxy를 이용해 AOP, JPA 등을 구현함. 프록시를 직접 쓰는 것도 괜찮지만, 이를 이용해 위에 설명한 Logging, Validating등의 작업이 가능함.

5. 장점 및 단점

클라이언트의 사용에 큰 영향을 미치지 않음.

Subject가 준비되지 않았을 때도 Proxy는 작동할 수 있음.

중간에서 수명 주기 관리를 포함한 추가적인 제어가 가능함.

한 계층이 추가되므로 복잡도를 늘림. 특히 여러 클래스에 비슷한 기능을 제공하고 싶은 경우 클래스가 비례해서 증가함.

6. 참고 자료

https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%ED%94%84%EB%A1%9D%EC%8B%9CProxy-%ED%8C%A8%ED%84%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EB%B0%B0%EC%9B%8C%EB%B3%B4%EC%9E%90

https://refactoring.guru/design-patterns/proxy

작성/수정 일자:2024.03.28

추천 비추천

3

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
834 망호) 런닝맨 끝나고 갈틱폰 좋아해。(211.226) 03.29 20 0
833 픽셀몬 성인 전용 서버 오픈! ㅇㅇ(1.254) 03.29 220 0
832 멀티월드 오피풀림 다시 질문드림 [3] A갤러(118.36) 03.29 80 0
831 번지코드 문제 재질문드림 ㅇㅇ(61.77) 03.29 67 1
830 망호) 봄맞이 서버 특집 런닝맨 편 고등어순살조림(61.77) 03.29 20 0
829 업데이트된 붐볼서버!! 하늘섬☁+ 추가! 포켓몬과 야생을 동시에? A갤러(1.225) 03.29 149 0
828 items adder 리소스팩 경로 도와줄게이 구해 [4] A갤러(61.73) 03.29 102 0
827 망호) 상점있는 마법모드 야생(7시 35분 오픈 ㅇㅇ(121.135) 03.29 20 0
826 부자가 되기 위한 첫걸음 ㅇㅇ(119.203) 03.29 21 0
825 망호) 림보 ㅇㅇ(121.158) 03.29 17 0
824 모래 리소스팩 질문 ㅇㅇ(175.198) 03.29 74 0
823 와 ㅋㅋㅋㅋ 답변 안 달릴정도의 난이도인건 알지만 혹시나 해서 올려봄 [4] ㅇㅇ(222.117) 03.29 71 0
822 같이 특수부대 컨셉의 캐릭터로 총대전 할게이? A갤러(122.36) 03.29 101 0
821 visible ores2.19 버전 질문있음 .. ㅇㅇ(211.177) 03.29 51 0
820 서버 개발을 하는데 비용이 많이드노. [4] ㅇㅇ(59.13) 03.29 267 0
819 itemsadder ㅇㅇ(121.134) 03.29 58 0
818 신화모드 골더셋 A갤러(118.36) 03.29 44 0
817 마크할래요에 관한 질문임 [2] A갤러(125.137) 03.29 69 0
816 자바 에디션과 베드락 에디션에 대해 [4] A갤러(211.226) 03.29 101 0
815 반갑습니노 리소스팩을 찾고 싶어서 글 작성함 A갤러(1.239) 03.29 33 0
814 [1.20.4] 폼폼타운 (24H/ 힐링 야생 직업+♀+ 스킨♀+ [1] A갤러(125.137) 03.29 215 0
813 [1.19.4-1.20.4] 최신 생야생 서버를 찾고 있는다면, 여기로 [1] A갤러(218.145) 03.29 98 0
812 스크립트 주무제작&판매 A갤러(1.232) 03.29 91 0
811 어줍잖게 영어쓰는애들 한심해보임 [11] A갤러(59.11) 03.29 218 0
810 리젠시간 관련 질문 ㅠㅠ ㅇㅇ(125.140) 03.29 82 0
809 [1.20.4] 24시 힐링 경제 Julie서버 다양한 A갤러(121.170) 03.29 130 0
808 현재 마인크래프크 서버 [3] ComPort(106.246) 03.29 190 1
807 1.20.1 모드 서버 [RPG, 파밍] 이 주된 1인 개발 서버임 [1] 숭아령(125.143) 03.29 232 0
806 itemsadder 명령어 권한 질문 드림. [2] A갤러(119.194) 03.29 76 0
805 마크할래요 있판은 왜 je인지 be인지 안 써놓음? [2] A갤러(39.114) 03.29 169 0
804 퍼피플레이타임 포에버 맵 A갤러(118.216) 03.29 96 0
803 숨바꼭질 맵 A갤러(61.75) 03.29 39 0
802 와, 해외 서버들은 운영진들만 해도 [4] ㅇㅇ(211.229) 03.29 325 0
801 마크 같이 뭐라도 할 게이! [1] ㅇㅇ(124.51) 03.29 130 0
800 농사 위주 서버 추천 받음 A갤러(180.65) 03.29 70 0
799 매직스펠 질문 [4] A갤러(61.84) 03.29 75 0
798 [1.20.2] 술래가 바뀌는 술래잡기! "먹이가 바뀐다 RE" Δ [1] A갤러(122.34) 03.29 656 12
797 노후 아파트 가상 재건축 [2] A갤러(119.192) 03.29 166 0
796 서버 제작에 참여할 플러그인 개발자 구함 A갤러(222.98) 03.29 116 0
795 신생크루에서 컨텐츠 팀원으로 활동할게이들을 찾음! A갤러(123.254) 03.29 96 0
794 gui관련 질문 [4] A갤러(183.97) 03.29 83 0
793 엔티티, 파티클 안보이게 하는 모드 있음 A갤러(61.74) 03.29 52 0
[Java] 디자인 패턴: 구조-프록시(Proxy) A갤러(221.167) 03.29 128 3
791 싱글벙글 디지몬...mp4 ㅇㅇ(106.246) 03.29 14 0
790 마크할래요 있판은 왜 je인지 be인지 안 써놓음? ㅇㅇ(14.51) 03.29 66 0
789 와, 해외 서버들은 운영진들만 해도 ㅇㅇ(121.158) 03.29 130 0
788 매직스펠 질문 ㅇㅇ(125.143) 03.29 57 0
787 노후 아파트 가상 재건축 ㅇㅇ(220.126) 03.29 99 0
786 [Java] 디자인 패턴: 구조-프록시(Proxy) A갤러(122.34) 03.29 87 0
782 뒤집으니 생긴 결과물... ㅇㅇ(222.117) 03.29 20 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2