
디자인 패턴 중 구조 패턴에 한 종류로써 라이브러리에 대한, 프레임워크에 대한 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공하는 구조적 디자인 패턴입니다.
시스템의 구조를 단순화하고, 코드의 가독성을 높이며 유지 보수를 용이하게 하기 위해서 사용합니다.
퍼사드 패턴은 이런 복잡성을 줄이고, 클라이언트가 필요한 기능을 간단한 인터페이스를 통해 사용할 수 있도록 합니다.퍼사드 패턴은 클라이언트가 여러 클래스와의 직접적인 상호작용을 피할 수 있게 하여, 단순하고 일관된 인터페이스를 제공합니다. 이를 통해 시스템을 더 쉽게 이해하고 사용할 수 있습니다.
퍼사드 패턴을 사용하면 하위 시스템 기능들의 특정 부분에 편리하게 접근할 수 있습니다. 또 퍼사드는 클라이언트의 요청을 어디로 보내야 하는지와 움직이는 모든 부품을 어떻게 작동해야 하는지를 알고 있습니다.
추가적인 퍼사드 클래스를 생성하여 하나의 퍼사드를 관련 없는 기능들로 오염시켜 복잡한 구조로 만드는 것을 방지할 수 있습니다. 추가 퍼사드들은 클라이언트들과 다른 퍼사드를 모두에 사용할 수 있습니다.
복잡한 하위 시스템은 수십 개의 다양한 객체들로 구성됩니다. 이 모든 객체가 의미 있는 작업을 수행하도록 하려면, 하위 시스템의 세부적인 구현 정보를 깊이 있게 살펴야 합니다. 예를 들어 올바른 순서로 객체들을 초기화하고 그들에게 적절한 형식의 데이터를 제공하는 등의 작업을 수행해야 합니다. 하위 시스템 클래스들은 퍼사드의 존재를 인식하지 못합니다. 인들은 시스템 내에서 작동하며, 매개체 없이 직접 서로와 작업합니다.
클라이언트는 하위 시스템 객체들을 직접 호출하는 대신 퍼사드를 사용합니다.
// 이것들은 복잡한 타사 비디오 변환 프레임워크 클래스의 일부입니다. 해당 프레임워크
// 코드는 우리가 제어할 수 없기 때문에 단순화할 수 없습니다.
class VideoFile
// …
class OggCompressionCodec
// …
class MPEG4CompressionCodec
// …
class CodecFactory
// …
class BitrateReader
// …
class AudioMixer
// …
// 퍼사드 클래스를 만들어 프레임워크의 복잡성을 간단한 인터페이스 뒤에 숨길 수
// 있습니다. 기능성과 단순함을 상호보완하는 것이죠.
class VideoConverter is
method convert(filename, format):File is
file = new VideoFile(filename)
sourceCodec = (new CodecFactory).extract(file)
if (format == "mp4")
destinationCodec = new MPEG4CompressionCodec()
else
destinationCodec = new OggCompressionCodec()
buffer = BitrateReader.read(filename, sourceCodec)
result = BitrateReader.convert(buffer, destinationCodec)
result = (new AudioMixer()).fix(result)
return new File(result)
// 애플리케이션 클래스들은 복잡한 프레임워크에서 제공하는 수많은 클래스에 의존하지
// 않습니다. 또한 프레임워크의 전환을 결정한 경우에는 퍼사드 클래스만 다시 작성하면
// 됩니다.
class Application is
method main() is
convertor = new VideoConverter()
mp4 = convertor.convert("funny-cats-video.ogg", "mp4")
mp4.save()
[참조]