본문 바로가기
컴퓨터 과학/디자인패턴

[디자인패턴] 구조 패턴(5) : 파사드(Facade)

by webcodur 2024. 3. 25.
728x90
반응형

목차

     

     

    파사드(Facade)

    파사드(Facade) 디자인 패턴은 복잡한 시스템을 더 간단한 인터페이스로 제공하려는 목적을 가진 구조적 디자인 패턴이다. '파사드'라는 단어는 프랑스어로 '외관' 또는 '정면'을 의미하는데, 건축학에서 건물의 전면을 지칭하는 용어로 사용된다. 이 패턴의 핵심은 시스템의 복잡성을 감추고, 클라이언트가 시스템에 더 쉽게 접근할 수 있도록 단순화된 인터페이스를 제공하는 것이다.

     

    기본 구성 요소

    1. 파사드(Facade): 클라이언트에게 간단한 인터페이스를 제공한다.
    2. 복잡한 시스템(Complex System): 여러 서브 시스템으로 구성된 복잡한 시스템이다. 파사드는 이 시스템의 기능에 쉽게 접근할 수 있는 인터페이스를 제공한다.

     

    패턴 미적용 코드 예시

    게임의 여러 설정(예: 그래픽, 사운드, 게임플레이 설정)을 관리하는 시나리오를 가정해보자.

    패턴을 적용하지 않았을 때, 클라이언트는 각각의 설정 시스템과 직접 상호작용해야 한다. 이는 코드의 복잡성을 증가시키고 유지 보수를 어렵게 만든다.

    // 게임 설정 예시
    class GraphicsSettings
    {
        public void SetResolution(int width, int height) { /* 해상도 설정 로직 */ }
        // 추가 그래픽 설정 메서드
    }
    
    class SoundSettings
    {
        public void SetVolume(float level) { /* 볼륨 설정 로직 */ }
        // 추가 사운드 설정 메서드
    }
    
    class GameplaySettings
    {
        public void SetDifficulty(string difficulty) { /* 난이도 설정 로직 */ }
        // 추가 게임플레이 설정 메서드
    }
    
    class GameSettingsClient
    {
        public void Setup()
        {
            var graphics = new GraphicsSettings();
            graphics.SetResolution(1920, 1080);
    
            var sound = new SoundSettings();
            sound.SetVolume(0.5f);
    
            var gameplay = new GameplaySettings();
            gameplay.SetDifficulty("Hard");
        }
    }
    

     

    패턴 적용 코드 예시

    파사드 패턴을 적용하면, GameSettingsFacade 클래스가 복잡한 설정 관리 시스템에 대한 단일 진입점을 제공한다. 클라이언트는 이 파사드를 통해 모든 설정을 간단하게 구성할 수 있다.

    class GameSettingsFacade
    {
        private GraphicsSettings graphics = new GraphicsSettings();
        private SoundSettings sound = new SoundSettings();
        private GameplaySettings gameplay = new GameplaySettings();
    
        public void SetDefaultSettings()
        {
            graphics.SetResolution(1920, 1080);
            sound.SetVolume(0.5f);
            gameplay.SetDifficulty("Normal");
        }
        // 필요한 경우 추가 설정 메서드 구현
    }
    
    class Client
    {
        public void Setup()
        {
            var settingsFacade = new GameSettingsFacade();
            settingsFacade.SetDefaultSettings();
            // 클라이언트는 이제 설정 시스템의 복잡성을 신경 쓸 필요가 없다
        }
    }
    

     

    파사드 패턴을 적용함으로써, 클라이언트 코드는 시스템의 내부 복잡성으로부터 분리되고, 사용하기 훨씬 쉬워진다. 이는 코드의 가독성과 유지 보수성을 향상시키며, 시스템의 다른 부분과의 의존성을 줄여준다. 클라이언트는 오직 파사드와만 상호작용하면 되므로, 내부 구현이 변경되더라도 클라이언트 코드를 수정할 필요가 없다. 이는 개발 과정에서 유연성을 제공하고, 시스템의 다양한 부분을 독립적으로 개발하고 테스트할 수 있는 가능성을 열어준다.

     

    파사드 패턴 적용 시의 주요 이점

    1. 단순화된 인터페이스: 복잡한 시스템에 대한 간단하고 직관적인 인터페이스를 제공하여 클라이언트의 사용성을 향상시킨다.
    2. 결합도 감소: 클라이언트와 복잡한 시스템 사이의 결합도를 줄임으로써, 시스템의 일부가 변경되어도 다른 부분에 미치는 영향을 최소화한다.
    3. 유지 보수의 용이성: 파사드를 통해 제공되는 인터페이스를 사용함으로써, 내부 구현의 변경이 클라이언트 코드에 미치는 영향을 줄일 수 있다.
    4. 테스트 용이성: 복잡한 시스템의 특정 부분을 독립적으로 테스트하기 어려울 수 있는데, 파사드는 이러한 시스템의 특정 기능에 대한 접근을 단순화하여 테스트를 용이하게 한다.

     

    적용 시 고려사항

    파사드 패턴은 시스템의 복잡성을 효과적으로 관리하고, 클라이언트와의 상호작용을 단순화하는데 매우 유용하지만, 모든 상황에 최적의 해결책이 되는 것은 아니다. 파사드는 추가적인 추상화 레이어를 도입하므로, 설계가 과도하게 복잡해지거나 성능상의 오버헤드가 발생할 수 있다는 점을 고려해야 한다. 따라서 파사드 패턴을 적용하기 전에, 시스템의 복잡성, 클라이언트의 요구, 그리고 성능 요구 사항 등을 종합적으로 고려해야 한다.

    파사드 패턴은 시스템을 더 잘 구조화하고, 클라이언트 코드의 사용성을 향상시키며, 시스템의 유지 보수성을 높이는데 큰 도움을 준다. 적절히 적용되었을 때, 이 패턴은 복잡한 시스템과의 상호작용을 크게 단순화시켜 줄 수 있다.

    반응형