• 검색 결과가 없습니다.

덕성여자대학교 컴퓨터학과

N/A
N/A
Protected

Academic year: 2022

Share "덕성여자대학교 컴퓨터학과"

Copied!
18
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Java로 배우는 디자인패턴 입문 Chapter 21. Proxy 패턴

필요해질 때 만든다

교재: 자바언어로배우는디자인패턴입문(개정판)/YukiHiroshi저/김윤정역/영진닷컴

덕성여자대학교 컴퓨터학과

최 승 훈

(2)

01. Proxy 패턴

Proxy

– 대리인

– 본인을 대신해서 일을 처리하는 사람

client

대리인 본인

(1) 대리인이 client의 요청들을 처리하다가...

(2) 본인이 필요한 시점이 되면, 본인을 생성해서 본인에게 일을 맡긴다.

(3)

02. 예제 프로그램

이름을 가진 프린터

– 화면에 문자열을 표시하는 프로그램

(4)

02. 예제 프로그램

(5)

02. 예제 프로그램

Printable 인터페이스

– PrinterProxy와 Printer 클래스를 동일시하기 위한 인터페이스

(6)

02. 예제 프로그램

Printer 클래스

– ‘본인’을 나타내는 클래스

– 생성자: heavyJob (5초가 걸리는 상대적으로 오래 걸리는 일) 을 호출함

– setPrinterName( ) / getPrinterName( ) – print( )

 프린터 이름과 문자열을 화면에 출력함 – heavyJob( )

 [Thread.sleep(1000) 후 ‘.’을 찍는 일]을 5번 실행함.

(7)

02. 예제 프로그램

PrinterProxy 클래스

– Printer 클래스의 ‘대리인’을 나타내는 클래스 – name 필드: 대리인의 이름을 저장함

– real 필드: ‘본인’에 대한 참조를 저장함

– setPrintername( ): real이 null 이 아니면, 즉, 본인 객체가 이미 생성되어 있으면, 그 객체에도 이름을 설정한다.

– print( )

 realize( ) 호출 후, ‘본인’ 객체의 print( ) 메소드를 호출한다 =>

위임 – realize( )

 실제 일을 하는 ‘본인’ 객체가 생성되지 않았으면 생성한다.

– setPrintername( )과 realize( ) 는 synchronized 로 선언됨

(8)

02. 예제 프로그램

Main 클래스

– PrinterProxy를 경유해서, Printer를 이용하는 클래스

– 먼저, PrinterProxy 생성 후, 이름을 설정한 후 , “hello, world”

를 출력한다.

– 이름을 설정하거나 표시하는 동안에는, Printer 클래스의 인스 턴스(본인)은 아직 생성되지 않는다.

– print( ) 메소드가 호출되어야 비로소, Printer 객체가 생성된다.

필요할 때 비로소 생성된다.

(9)

02. 예제 프로그램

시퀀스 다이어그램

(1) 대리인이 client의 요청들을 처리하다가...

(2) 본인이 필요한 시점이 되면, 본인을 생성해서 본인에게 일을 맡긴다.

(10)

03. 등장 역할

Subject(주체)의 역할

– Proxy와 RealSubject를 동일시하기 위한 인터페이스(API)를 정 한다.

– 예제에서는, Printable 인터페이스가 해당됨

Proxy(대리인)의 역할

– Client로부터의 요구를 가능한 한 자신이 처리함

– 혼자서 처리할 수 없으면 RealSubject 역할에게 위임한다.

– Proxy 역할은, RealSubject 역할이 정말로 필요해지면 그 때가 서 RealSubject 역할을 생성한다.

– 예제에서는 PrinterProxy 클래스가 해당됨

(11)

03. 등장 역할

Client(의뢰자)의 역할

– Proxy 패턴을 이용하는 역할

– 예제에서는, Main 클래스가 해당됨

(12)

04. 독자의 사고를 넓혀주는 힌트

대리인을 사용해서 스피드업

– Proxy 역할이 대리인이 되어서, 할 수 있는 일은 모두 처리한다.

– 실제로 무거운 처리(예: Printer 인스턴스 생성)는 필요할 때까 지 지연시킨다.

– 초기화하는데 시간이 많이 걸리는 대규모의 시스템에서 유용 하다.

 기동하는 시점에서 아직 이용하지 않는 기능까지 전부 초기화하 면, 애플리케이션 기동에 시간이 걸림

 시간이 걸리는 아직 필요하지 않는 초기화는, 필요한 시점까지 미 루자.

(13)

04. 독자의 사고를 넓혀주는 힌트

대리와 위임

– 대리인이 처리할 수 있는 일은 대리인이 처리한다.

– 대리인이 처리할 수 없을 때는 본인에게 위임한다.

투명적이라는 것(transparent)

– 클라이언트(Main) 입장에서는, 실제로 호출하는 것이

PrinterProxy 객체인지, Printer 객체인지 상관하지 않는다.(투 명하게 보인다)

(14)

04. 독자의 사고를 넓혀주는 힌트

HTTP Proxy

– Proxy는 HTTP 서버(웹 서버)와 HTTP 클라이언트(웹 브라우저) 사이에 들어가, 웹 페이지의 캐싱 등을 실행하는 소프트웨어 – 여기에도, Proxy 패턴을 적용할 수 있다.

 웹 브라우저가 웹 페이지를 표시할 때, 일일이 원격지에 있는 웹 서버로부터 페이지를 얻어오는 것이 아니다.

 대신에, HTTP 프록시가 캐쉬한 페이지를 얻어온다.

 최신 정보가 필요하게 되었거나, 페이지의 유효기간이 다 되었을 때에 비로소 웹버서로 웹 페이지를 가지러 간다.

 웹 브라우저 => Client 역할

 HTTP Proxy => Proxy 역할

 웹 서버 => RealSubject 역할

(15)

04. 독자의 사고를 넓혀주는 힌트

ProxyHTTP 웹서버

(HTTP 서버)

(1) 웹 서버로부터 미리

웹페이지들을 가져다 놓는다(캐싱)

(2) 최신 정보가 필요하면 원격지에 있는 웹 서버로부터 가져온다.

웹 브라우저 웹 브라우저

웹 브라우저

(16)

04. 독자의 사고를 넓혀주는 힌트

다양한 Proxy

– Virtual Proxy (가상 프록시)

 이번 장 예제와 같이, 인스턴스가 필요해진 시점에서 생성, 초기 화를 실행하는 객체

– Remote Proxy (원격 프록시)

 RealSubject 역할이 멀리 떨어져 있을 때, 클라이언트는 이 원격 프록시를 통해서 자신의 근처에 있는 것처럼 메소드를 호출할 수 있다.

– Access Proxy

 RealSubject 역할의 기능에 대해, 접근 제한 기능을 수행하는 프 록시

(17)

05. 관련 패턴

Adapter 패턴

Decorator 패턴

(18)

06. 요약

본인이 필요해질 때까지 대리인에게 일을 맡기는 Proxy 패턴

참조

관련 문서

아킬레우스는 그저 들판에서 분노의 대상과 부딪혀 힘의 크기만을 증 명할 수 있을 뿐이다 이 힘의 증명이야말로 그가 목적으로 하는 것이 명할 수 있을 뿐이다. 이 힘의

폐기허증 面色㿠白 폐기쇠절증 面色㿠白 신기허증 面色㿠白 신기불고증 面色㿠白.

• 또한 애플릿은 자바의 JDK 안에 있는 애플릿 뷰어도구를 사용하여 실행될 수 있다. • 애플릿은 main

자신의 발표 모습을 성찰할 수 있다... 자신의 발표 모습을

◈ 어떤 데이터 언어가 relational calculus가 표현할 수 있는 모든 질의 를 표현할 수 있을 때 relationally complete 하다고 함

왼편과 같이 포인터 변수에 저장된 값을 대상으로 하는 증가 및 감소연산을 진행할 수 있다... 포인터와 배열을 통해서 얻을

이처럼, 다른 사회의 문화를 분석하거나 평가할 때 자신의 문화의 기준에 본다면 큰 오류를 범할 수 있다.. 문화를 제대로 이해하기 위해서는 자신의 문화가

최고경영자는 조직 구성원들에게 복종을 요구할 수 있고 보상할 수 있는 능력을 소유하고 있을 뿐만 아니라 조직의 자원과 저보에 대한 통제력을 소유하고