책너두 (헤드 퍼스트 디자인 패턴) 38일차 (~513p)
- Book/헤드 퍼스트 디자인 패턴
- 2023. 8. 17.
요약
- 프록시 패턴
- 보호 프록시 만들기
- 객체마을 데이팅 서비스
- Person 인터페이스용 동적 프록시 만들기
- 1단계 : Invocationhandler 만들기
- 호출 핸들러 만들기
- 2단계 : 동적 프록시 생성 코드 만들기
- 1단계 : Invocationhandler 만들기
메모
보호 프록시 만들기
- java.lang.reflect 패키지 안에 프록시 기능이 내장되어 있음.
- 즉석에서 하나 이상의 인터페이스를 구현하고, 지정한 클래스에 메소드 호출을 전달하는 프록시 클래스를 만들 수 있음.
- 진짜 프록시 클래스는 실행 중에 생성되므로 이러한 자바 기술을 동적 프록시(dynamic proxy)라고 부름
- 이번에는 프록시가 2개의 클래스로 구성됨.
- 자바에서 Proxy클래스가 Subject 인터페이스 전체를 구현함.
- Proxy 객체의 모든 메소드 호출을 전달받는 InvocationHandler를 제공해야 함.
- Invocationhandler에서 RealSubject 객체에 있는 메소드로의 접근을 제어함.
객체마을 데이팅 서비스
- 이 서비스에서는 서로 상대방의 괴짜 지수(좋은 쪽으로 얼마나 괴짜인지 따지는 점수)를 매기는 기능을 더해, 사용자들이 더 적극적으로 서비스를 사용하고, 더 좋은 상대를 찾을 수 있도록 함.
- 이때, 다른 사람이, 내 관심 사항을 바꾸거나, 자기 선호도 점수를 조작해서 왕창 올려놓는 일을 제재해야 함.
- 이때, 보호 프록시(Protection Proxy)를 사용해야 함.
- 접근 권한을 바탕으로 객체로의 접근을 제어하는 프록시임.
- 이때, 보호 프록시(Protection Proxy)를 사용해야 함.
Person 인터페이스용 동적 프록시 만들기
- 자기 괴짜 지수를 직접 조작할 수 없어야하고, 다른 사람들의 개인 정보도 수정할 수 없도록 해야 함.
- 이 문제를 해결하기 위해 2개의 프록시를 만들어야 함.
- 하나는 본인의 Person 객체에 접근하는 프록시, 다른 하나는 다른 사람들의 Person 객체에 접근하는 프록시임.
- 2개의 Invocationhandler 만들기
- InvocationHandler는 프록시의 행동을 구현함.
- 프록시 클래스와 객체를 만드는 일은 자바에서 알아서 해 주기에, 프록시의 메소드가 호출되었을 때 할 일을 지정해 주는 핸들러만 만들면 됨.
- 동적 프록시 생성 코드 만들기
- 프록시 클래스를 생성하고, 그 인스턴스를 만드는 코드가 필요함.
- 적절한 프록시로 Person 객체 감싸기
- Person 객체를 사용하는 객체는 고객 자신의 객체(owner), 아니면 데이텅 서비스를 사용하는 다른 고객의 객체(non-owner), 이렇게 둘 중 하나임.
1단계 : Invocationhandler 만들기
- 호출 핸들러란, 프록시의 메소드가 호출되면, 프록ㄷ시는 그 호출을 호출 핸들러에게 넘김.
- 하지만 호출 핸들러에 있는 같은 이름의 메소드를 호출하는 것은 아님.
- 메소드는 invoke() 하나 뿐임.
- 프록시의 어떤 메소드가 호출되든, 무조건 핸들러에 있는 invoke() 메소드가 호출됨.
호출 핸들러 만들기
- 프록시의 메소드가 호출될 때마다 invoke 메소드를 호출함.
- getter, setter 메소드는 본인한테 모두 허용해줘야 하므로 주제에 있는 메소드를 호출함.
- setGeekRating 메소드 (레이팅 점수 매기기)는 본인이 호출하면 안되므로 IllegalAcceessException 을 던져서 호출을 막음.
2단계 : 동적 프록시 생성 코드 만들기
- Person 객체를 인자로 받고, 본인용 프록시를 만드는 메소드를 만들어야 함.
- 즉, 메소드 호출을 OwnerInvocationHandler에게 넘겨주는 프록시를 만듦.
- p512 참고
'Book > 헤드 퍼스트 디자인 패턴' 카테고리의 다른 글
책너두 (헤드 퍼스트 디자인 패턴) 40일차 (~539p) (0) | 2023.08.21 |
---|---|
책너두 (헤드 퍼스트 디자인 패턴) 39일차 (~527p) (0) | 2023.08.18 |
책너두 (헤드 퍼스트 디자인 패턴) 37일차 (~502p) (0) | 2023.08.16 |
책너두 (헤드 퍼스트 디자인 패턴) 36일차 (~488p) (0) | 2023.08.15 |
책너두 (헤드 퍼스트 디자인 패턴) 35일차 (~474p) (0) | 2023.08.14 |