먼저 이 글은 영문 위키의 글을 번역한 글임을 알려드립니다.
영어 실력이 부족한 관계로 오역이 있을 수도 있습니다.
원문 주소 : http://en.wikipedia.org/wiki/Facade_pattern
구조적 패턴 - 퍼사드 패턴
퍼사드 패턴은 객체 지향 프로그래밍에서 종종 사용되는 소프트웨어 디자인 패턴이다. 그 이름은 건축학의 퍼사드(전면, facade)에서 유추되었다.
퍼사드는 많은 양의 코드를 단순화된 인터페이스로 제공하는 객체이다. (예를들면 클래스 라이브러리가 있다.)
퍼사드는 다음과 같은 것들을 할 수 있다.
- 퍼사드는 공통적인 작업(tasks)에 대해 편리한 메서드를 가지기 때문에, 더 사용하기 쉽고, 이해하기 쉽고, 테스트하기 쉽게 소프트웨어 라이브러리를 만들 수 있다.
- 같은 이유로 라이브러리를 더 읽기 쉽게 만들 수 있다.
- 대부분의 코드가 퍼사드를 사용하기 때문에, 바깥 코드와 라이브러리 안쪽 코드의 의존성(dependency)을 줄일 수 있고, 따라서 시스템을 개발하는데에 더 유연성을 제공한다.
- 형편없이 설계된 API의 컬렉션을 하나의 잘 설계된 API로 감쌀 수 있다.
감싸는 클래스(wrapper)가 특정 인터페이스를 준수해야하고 다형성(polymorphic)을 지원해야만 한다면 어댑터(adapter)가 사용된다. 반면에, 퍼사드는 더 쉽거나 간단한 인터페이스를 원할 때 사용한다.
구조 Structure
Facde - 퍼사드 클래스는 Package 1, 2, 3을 나머지 애플리케이션으로부터 추상화시킨다.
Clients - Package들의 리소스에 접근하기 위해 퍼사드 패턴을 사용하는 객체
예 Example
이 추상적인 예는 복잡한 시스템에서(CPU와 하드 드라이브 같은 컴퓨터 내부) 클라이언트(당신)가 어떻게 퍼사드(컴퓨터)와 상호작용하는지 보여준다.
/* Complex parts */ class CPU { public void freeze() { ... } public void jump(long position) { ... } public void execute() { ... } } class Memory { public void load(long position, byte[] data) { ... } } class HardDrive { public byte[] read(long lba, int size) { ... } } /* Facade */ class Computer { private CPU cpu; private Memory memory; private HardDrive hardDrive; public Computer() { this.cpu = new CPU(); this.memory = new Memory(); this.hardDrive = new HardDrive(); } public void startComputer() { cpu.freeze(); memory.load(BOOT_ADDRESS, hardDrive.read(BOOT_SECTOR, SECTOR_SIZE)); cpu.jump(BOOT_ADDRESS); cpu.execute(); } } /* Client */ class You { public static void main(String[] args) { Computer facade = new Computer(); facade.startComputer(); } }
'Design Patterns > 영문 위키(Wikipedia)' 카테고리의 다른 글
Proxy pattern (프록시 패턴) (0) | 2012.06.06 |
---|---|
Flyweight pattern (플라이웨이트 패턴) (0) | 2012.06.05 |
Decorator Pattern (데코레이터 패턴) (0) | 2012.06.04 |
Composite Pattern (콤포짓 패턴) (0) | 2012.06.04 |
Bridge pattern (브릿지 패턴) (0) | 2012.05.31 |