-
퍼사드 패턴(Facade Pattern)이란?Design Pattern/구조 디자인 패턴 2024. 4. 14. 15:58반응형
퍼사드(Facade) 패턴은 객체 지향 프로그래밍에서 복잡한 시스템을 더 간단한 인터페이스로 제공하여, 서브시스템들의 의존성을 감소시키고 클라이언트와 서브시스템 간의 상호작용을 단순화하는 구조적 디자인 패턴입니다. 이 패턴은 하나의 통합된 인터페이스를 통해 서브시스템들을 더 쉽게 사용할 수 있도록 해 줍니다.
1. 퍼사드 패턴은 주로 어디에 쓰이나?
퍼사드 패턴은 복잡한 라이브러리나 프레임워크의 간소화된 인터페이스를 제공하는 데 주로 사용됩니다. 이는 클라이언트 프로그램이 시스템의 복잡성을 이해하지 않아도 되도록 하여 사용의 용이성을 보장합니다. 예를 들어, 복잡한 비디오 변환 라이브러리를 사용할 때, 퍼사드를 통해 사용자는 단순한 메서드 호출로 비디오 파일 형식을 변환할 수 있습니다.
2. Java와 Go로 퍼사드 패턴을 구현할 때의 차이점
Java에서 퍼사드 패턴은 주로 클래스와 인터페이스를 통해 구현됩니다. 객체의 상속과 다형성을 활용하여 더 강력한 타입 체크와 보안을 제공할 수 있습니다.
Go에서는 인터페이스를 사용하여 퍼사드 패턴을 구현합니다. Go의 인터페이스는 묵시적으로 만족되므로, 사용자는 서브시스템을 더 유연하게 교체하거나 모의 객체로 대체하는 등의 작업을 쉽게 할 수 있습니다. 이는 특히 단위 테스트에서 유용합니다.
3. 퍼사드 패턴 예시 (Java, Golang)
Java:
class VideoConverterFacade { private VideoFile file; private CodecFactory codecFactory; private CompressionCodec codec; public VideoFile convert(String fileName, String format) { file = new VideoFile(fileName); codec = codecFactory.extract(format); return new BitrateReader().read(file, codec); } } public class Client { public static void main(String[] args) { VideoConverterFacade converter = new VideoConverterFacade(); VideoFile mp4Video = converter.convert("example.ogg", "mp4"); System.out.println("Conversion completed."); } }
Java 코드에서는 VideoConverterFacade 클래스를 사용하여 비디오 파일 변환의 퍼사드를 제공합니다. 이 클래스는 내부적으로 필요한 객체들을 생성하고 관리하여, 클라이언트가 복잡한 내부 구조를 몰라도 비디오 파일의 형식 변환을 요청할 수 있게 합니다.
- VideoFile, CodecFactory, CompressionCodec: 이 객체들은 비디오 파일을 읽고, 적절한 코덱을 선택하고, 최종적으로 파일을 변환하는 데 필요한 컴포넌트입니다.
- convert 메서드: 클라이언트가 호출하는 유일한 메서드로, 변환하고자 하는 파일 이름과 포맷을 인자로 받습니다. 이 메서드는 필요한 객체를 생성하고, 파일을 읽은 다음 적절한 코덱을 사용하여 변환을 수행합니다.
Golang:
type VideoConverter struct{} func (vc *VideoConverter) Convert(fileName string, format string) *VideoFile { file := NewVideoFile(fileName) codec := NewCodecFactory().Extract(format) return NewBitrateReader().Read(file, codec) } func main() { converter := VideoConverter{} mp4Video := converter.Convert("example.ogg", "mp4") fmt.Println("Conversion completed.", mp4Video) }
Golang 코드에서는 VideoConverter 구조체를 통해 유사한 기능을 구현합니다. Go에서는 클래스가 없으므로, 구조체와 메서드를 사용하여 비슷한 기능을 제공합니다.
- VideoConverter 구조체: 비디오 변환 기능을 감싸는 구조체입니다.
- Convert 메서드: 이 메서드는 Java의 convert 메서드와 유사하게 작동합니다. 파일 이름과 포맷을 인자로 받아, 적절한 비디오 파일과 코덱 객체를 생성하고 변환을 수행합니다.
공통점과 차이점
두 예시 모두 퍼사드 패턴을 통해 클라이언트에게 복잡한 시스템의 간단한 인터페이스를 제공합니다. 차이점은 Java가 클래스와 객체 지향 특성을 사용하는 반면, Go는 구조체와 인터페이스를 사용하여 좀 더 유연하고 간결한 코드를 제공한다는 점입니다. 또한, Go의 구현 방식은 타입 시스템과 런타임 동작에서 Java보다 유연성을 제공하며, 이는 테스트와 유지보수에서 이점을 제공할 수 있습니다.
4. 퍼사드 패턴의 장단점
장점:
- 복잡한 시스템에 대한 간단하고 이해하기 쉬운 인터페이스 제공
- 시스템과 클라이언트 사이의 의존성 감소
- 서브시스템의 변경 사항이 클라이언트에 미치는 영향 최소화
단점:
- 퍼사드 클래스가 너무 많은 책임과 작업을 수행하게 되면 퍼사드 자체가 시스템의 복잡성을 증가시킬 수 있음
- 일부 클라이언트는 퍼사드를 통한 제한된 기능에 만족하지 못할 수 있음
이러한 구조를 통해 복잡한 시스템을 효과적으로 관리하고 유지보수할 수 있으며, 퍼사드 패턴은 시스템의 복잡성을 내부에 숨기는 데 탁월한 방법을 제공합니다.
반응형'Design Pattern > 구조 디자인 패턴' 카테고리의 다른 글
플라이웨이트 패턴(Flyweight Pattern)이란? (0) 2024.04.14 복합체 패턴(Composite Pattern)이란? (0) 2024.04.14 브리지 패턴(Bridge Pattern)이란? (0) 2024.04.14 어댑터 패턴(Adapter Pattern)이란? (0) 2024.04.14 데코레이터 패턴(Decorator Pattern)이란? (0) 2024.04.14