퍼사드 패턴 ( Facade Pattern )

Kddongkyu·2024년 1월 4일
0

CS-Study

목록 보기
8/8
post-thumbnail

"Facade"는 원래 "건물의 정면"을 의미하지만, 소프트웨어 설계에서는 다소 다른 의미를 가집니다. 이 용어는 사용자에게 복잡한 구조나 로직을 갖춘 시스템을 단순하게 제공하는 방식을 나타냅니다. 예를 들어, 복잡한 구조를 가진 PC를 사용자가 UI를 통해 간단하게 버튼 하나로 조작할 수 있도록 만드는 것과 유사합니다. 소프트웨어에서의 Facade 패턴은 내부적으로 복잡한 코드를 가진 부분을 사용자에게는 간략화된 인터페이스로 제공하여, 사용의 편리성을 높이는 디자인 패턴을 말합니다.

예시 상황

  • 한 사람이 저녁식사를 하기위한 상황

Facade 적용안함.

public class Main {
    public static void main(String[] args) {
        // 장보기 단계
        Shopping shopping = new Shopping();
        shopping.getIngredients();

        // 요리하기 단계
        Cooking cooking = new Cooking();
        cooking.prepareMeal();

        // 식사하기 단계
        Eating eating = new Eating();
        eating.enjoyMeal();

        // 설거지하기 단계
        Cleaning cleaning = new Cleaning();
        cleaning.cleanDishes();
    }
}

class Shopping {
    public void getIngredients() {
        // 장보기 로직
    }
}

class Cooking {
    public void prepareMeal() {
        // 요리 로직
    }
}

class Eating {
    public void enjoyMeal() {
        // 식사 로직
    }
}

class Cleaning {
    public void cleanDishes() {
        // 설거지 로직
    }
}

Facade 적용함.

class DinnerFacade {
    private Shopping shopping;
    private Cooking cooking;
    private Eating eating;
    private Cleaning cleaning;

    public DinnerFacade() {
        shopping = new Shopping();
        cooking = new Cooking();
        eating = new Eating();
        cleaning = new Cleaning();
    }

    public void prepareDinner() {
        shopping.getIngredients(); // 장보기
        cooking.prepareMeal();     // 요리하기
        eating.enjoyMeal();        // 식사하기
        cleaning.cleanDishes();    // 설거지하기
    }
}

public class Main {
    public static void main(String[] args) {
        DinnerFacade dinnerFacade = new DinnerFacade();
        dinnerFacade.prepareDinner(); // 저녁식사 준비의 모든 단계를 한 번에 처리
    }
}

결론

  • 이처럼 Facade 패턴을 사용한다면, 복잡한 하위 시스템에서 코드를 별도로 분리할 수 있습니다.
  • 하지만, 이러한 Facade 패턴이 항상 좋은것은 아닙니다.
  • Facade 패턴을 적용시킨 어플리케이션은 모든 클래스에 결합된 전지전능한 객체(God Object)가 생성될 수 있다.

"God Object"는 소프트웨어 개발에서 사용되는 용어로, 과도하게 많은 책임과 기능을 가진 객체를 지칭합니다. 일반적으로, 이는 좋지 않은 디자인 패턴으로 간주됩니다.
God Object는 소프트웨어 시스템 내에서 너무 많은 역할을 담당하며, 이로 인해 코드의 유지보수와 확장이 어려워질 수 있습니다.
이러한 객체는 시스템의 다양한 부분과 강하게 결합되어 있으며, 이는 시스템의 다른 부분에 변경이 필요할 때마다 God Object 또한 수정해야 하는 상황을 초래합니다.

profile
Step by step

0개의 댓글