런타임노트

[헤드퍼스트 디자인패턴] 36일차. 475-487pg 본문

책책책 책을 읽읍시다‼ ver.개발/[ 헤드퍼스트 디자인패턴 ]

[헤드퍼스트 디자인패턴] 36일차. 475-487pg

D269 2023. 6. 12. 14:35
728x90

36일차


헤드퍼스트 디자인패턴 [6주차_토요일]
475-487pg


요약

 

**CHAPTER 11. 객체 접근 제어하기 (feat. 프록시 패턴)**

사람들이 좋은 경찰에 접근하는 일을 나쁜 경찰이 제어한다. 패턴에서 나쁜 경찰은 프록시(proxy)이다. 접근을 제어하고 관리한다. 

 

[ RMI 레지스트리 ]

- 클라이언트는 스텁 객체(프록시)를 가져와야 한다. 거기에 있는 메소드를 호출해야 하기 때문에.

- 클라이언트는 룩업(lookup)으로 스텁 객체를 요청한다. (이름을 건네주면서 그 이름에 맞는 스텁 객체를 요구하는 것)

 

1. 클라이언트에서 RMI 레지스트리 룩업

Naming.lookup("rmi://127.0.0.1/RemoteHello");

2. RMI 레지스트리에서 스텁 객체 리턴.

(이 때, 스텁 클래스는 반드시 클라이언트에만 있어야 한다.)

 

3, 클라이언트는 스텁의 메소드를 호출한다.

 

[ RMI 사용 시 흔히 하는 실수 ]

1. 원격 서비스를 돌리기 전에 rmiregistry를 실행하지 않는다.

2. 인자와 리턴 형식을 직렬화할 수 없게 만든다.

 

 


 

[ GumballMachine 클래스를 원격 서비스로 바꾸기 ]

- 원격 프록시를 쓸 수 있도록 코드를 바꿀 때  가장 먼저 할 일 : GumballMachine 클래스를 클라이언트로부터 전달된 원격 요청을 처리하도록 바꾸기.

 

1. GumballMachine의 원격 인터페스 만들기 : 이 인터페이스는 원격 클라이언트에서 호출할 수 있는 메소드 정의

2. 인터페이스의 모든 리턴 형식을 직렬화 할 수 있는지 확인한다.

3. 구상 클래스에서 인터페이스 구현

- GumballMachine 클래스를 네트워크로 들어온 요청을 처리하는 서비스로 고쳐야 한다.

4. 클라이언트가 찾을 수 있게 뽑기 기계를 RMI 레지스트리에 등록한다.

5. GumballMonitor 클래스는 그대로 두고, 네트워크로 데이터 받아오기.

6. 새로운 모니터링 코드 만들기.

 

 

 

 

발췌

프록시에 있는 메소드를 호출하면 네트워크로 메소드 호출이 전달된다. 
호출 결과로 String, 정수, State 객체가 리턴된다.
프록시를 사용하므로 GumballMonitor는 원격 호출을 하고 있다는 사실을 몰라도 된다. (믈론 RemoteException에 대비 해야함)

 

 

 

 

 

728x90
반응형