Java 로 배우는 디자인패턴 입문 Chapter 15. Facade 간단한 창구 덕성여자대학교 컴퓨터학부
덕성여대 컴퓨터학부 Facade 패턴 객체 지향 프로그램은 많은 클래스와 객체들로 이루어지고, 서로 복잡한 관련을 맺고 있다. – 이들을 모두 이해하고 제어하기가 힘들다. – 이들을 제어하기 위한 ‘ 창구 ’ 역할을 담당하는 클래스를 만들자 facade: 건물의 정면 복잡한 내부는 숨기고, 높은 레벨의 인터페이스 (API) 를 외부 에 제공한다.
덕성여대 컴퓨터학부 Facade 패턴
덕성여대 컴퓨터학부 예제 프로그램 사용자의 웹페이지를 작성하는 프로그램 Facade 패턴의 예를 보이지 위해서는 “ 복잡하게 얽혀 있는 많은 클래스 ” 가 필요하다. – 그러나, 본 예제에서는 3 개의 클래스로 구성된 시스템을 생각 한다. Facade 역할 (High-level API 제공 )
덕성여대 컴퓨터학부 예제 프로그램 만들고자 하는 웹페이지
덕성여대 컴퓨터학부 예제 프로그램 클래스 다이어그램 Facade 역할 (High-level API 제공 ) Subsystem
덕성여대 컴퓨터학부 예제 프로그램 소스파일 디렉토리 구조
덕성여대 컴퓨터학부 예제 프로그램 Database 클래스 – 데이터베이스 명을 지정하면, 그것에 해당하는 Properties 를 작 성하는 클래스 –getProperties(String dbname) Properties 인스턴스를 생성한 후, dbname.txt 파일로부터 여러 가 지 속성 값을 읽어 들여 이를 리턴하는 메소드 Properties 클래스 –key 와 value 쌍으로 되어 있는 속성의 집합을 유지하는 클래스 maildata.txt – 속성을 저장하고 있는 파일 – 형식 : key=value
덕성여대 컴퓨터학부 예제 프로그램 HtmlWriter 클래스 – 간단한 웹페이지를 작성하는 클래스 – 생성자 Writer 타입의 인스턴스를 받아들여, 멤버 변수인 write 에 할당한다. –title( ): 헤더 및 타이틀에 대한 html 태그를 작성하는 메소드 –paragraph( ): 문단을 작성하는 메소드 –link( ): 하이퍼링크를 만드는 메소드 –mailto( ): 메일주소 링크를 만드는 메소드 –close( ): HTML 출력을 끝내는 메소드 – 제약조건 : title( ) 메소드가 제일 먼저 호출되어야 한다. 이 조건은, 창구가 되는 PageMake 클래스에 표현되어 있다.
덕성여대 컴퓨터학부 예제 프로그램 PageMaker 클래스 –Database 클래스와 HtmlWriter 클래스를 조합하여, 지정된 사 용자의 웹 페이지를 작성하기 위한 클래스 –makeWelcomePage(String mailaddr, String filename) Database 클래스를 이용해서 – “maildata.txt” 파일로부터 속성 집합을 얻은 후, 속성 중에서 입력 인 자로 들어온 mailaddr 를 key 로 하여 해당 value 를 얻는다. HtmlWriter 클래스의 메소드들을 이용해서 – 입력 인자로 들어온 filename 파일에 HTML 문서를 작성한다.
덕성여대 컴퓨터학부 예제 프로그램 Main 클래스 –pagemaker 패키지의 PageMaker 클래스를 이용해서, 를 key 로 한 value 를 가지고 “welcom.html” 이 라는 HTML 문서를 완성한다. –Main 클래스는, Database 나 HtmlWriter 클래스를 직접 이용하 지 않고, high-level API 를 제공하는 PageMaker 의 메소드만을 사용하여 원하는 작업을 한다.
덕성여대 컴퓨터학부 등장 역할 Facade( 정면 ) 의 역할 – 시스템을 구성하는 많은 역할의 ‘ 간단한 창구 ’ 가 되는 역할을 한다. – 높은 레벨에서 간단한 인터페이스를 시스템 외부에 제공한다. – 예제에서는 PageMaker 클래스가 해당됨 시스템을 구성하고 있는 그 밖의 많은 역할 –Facade 역할로부터 호출되는, 시스템을 구성하는 많은 클래스 들 – 이들은, Facade 역할은 의식하지 않는다 – 예제에서는, Database 와 HtmlWriter 클래스가 해당됨
덕성여대 컴퓨터학부 등장 역할 Client( 의뢰자 ) 의 역할 –Facade 패턴을 이용하는 역할 – 예제에서는, Main 클래스가 해당됨
덕성여대 컴퓨터학부 독자의 사고를 넓혀주는 힌트 Facade 역할이 하는 일은 무엇일까 – 복잡한 것을 단순하게 보여준다 내부에서 작동하고 있는 많은 클래스들의 관계나 사용법을 의식하 지 않도록 해 주는 역할 외부에 보이는 API 를 적게 해 주고 단순하게 해 준다. 재귀적인 Facade 패턴의 적용 – 여러 패키지들이 있고, 패키지마다 Facade 역할이 정의되어 있 다면, 이들 Facade 들에 대한 Facade 역할을 재귀적으로 정의 할 수 있다
덕성여대 컴퓨터학부 관련 패턴 Abstract Factory 패턴 (8 장 ) Singleton 패턴 (5 장 ) Mediator 패턴 (16 장 )
덕성여대 컴퓨터학부 요약 복잡한 시스템에 대한 간단한 창구의 역할을 하는 Facade 패 턴
덕성여대 컴퓨터학부 17 연습 문제 15-1 – 외부에서 절대로 Database 클래스나 HtmlWriter 클래스를 이용 할 수 없도록 하려면, 어떻게 예제 프로그램을 변경해야 하는가 ? 15-2 –maildata.txt 의 내용을 이용해서, 메일 주소 링크 만을 포함하는 파일을 만드는 makeLinkPage( ) 메소드를 PageMaker 클래스에 추가하기 예 : 그림 15-7, 15-8, 15-9