포스트

Facade 디자인 패턴

Facade 디자인 패턴
AI 요약

Facade 패턴은 복잡한 하위 시스템에 대한 단순화된 인터페이스를 제공하는 디자인 패턴임. 이를 통해 코드의 책임 분리와 관리 용이성을 높여 개발자가 수정 부분을 명확히 찾을 수 있도록 돕는 장점이 있음. 하지만 Facade 자체가 전지전능한 객체가 되어 모든 클래스에 결합되거나 컴파일 시 의존성을 완전히 제거하기 어려운 한계점도 존재함.

Facade 패턴

  • 라이브러리, 프레임워크 또는 다른 클래스들의 복잡한 집합에 대한 단순화 된 인터페이스를 제공하는 구조적 디자인 패턴이다.

Facade 패턴을 통해 해결 할 수 있는 점

  • 하나의 책임이 변경 되어도 다른 책임에는 영향을 미치지 않으며, 개념이 같은 클래스를 하나로 관리하여 버전에 따라 달라지는 것을 최소화 할 수 있다.
  • 하나의 책임 변경이 어느 클래스에 작성되어 있는지가 명확하기 때문에 수정할 부분을 찾기 쉬워진다.

Facade 패턴의 장점

  • 복잡한 하위 시스템에서 코드를 별도로 분리할 수 있다.

Facade 패턴의 단점

  • Facade는 앱의 모든 클래스에 결합된 전지전능한 객체가 될 수 있다.

Facade 패턴의 한계점

  • 컴파일 시 의존성이 아직 존재하여 변경에 취약한 형태가 된다.

Facade 코드 예시

1
2
3
4
5
6
public class Application {
public static void main(String[] args) {
        Facade facade = new Facade("김치찌개", "아이스크림");
        facade.eat_Meal();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Facade {

    private String foodName = "";
    private String desertName = "";

    public Facade(String foodName, String desertName) {
        this.foodName = foodName;
        this.desertName = desertName;
    }

    public void eat_Meal() {
        MealPrep mealPrep = new MealPrep();
        Food food = new Food(foodName);
        Desert desert = new Desert(desertName);

        food.PickOrder();
        desert.PickOrder();
        mealPrep.PutCutlery();
        food.EatFood();
        desert.EatDesert();

    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Desert {

    private String name ="";

    public Desert(String name) {
        this.name = name;
    }

    public void PickOrder() {
        System.out.println(name + " 디저트 주문하기");
    }

    public void EatDesert() {
        System.out.println(name + " 디저트 먹기");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Food {

    private String name ="";

    public Food(String name) {
        this.name = name;
    }

    public void PickOrder() {
        System.out.println(name + " 음식 주문하기");
    }

    public void EatFood() {
        System.out.println(name + " 음식 먹기");
    }

}
1
2
3
4
5
public class MealPrep {
public void PutCutlery() {
        System.out.println("음식이 나오기 전에 수저 세팅하기");
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.