[cs - Java] Facade 패턴 (퍼사드 패턴)

링딩·2023년 5월 2일
0

Computer Science

목록 보기
48/49

이 글을 통해 작성하였습니다.




Facade 패턴?

  • 디자인 패턴 중 목적의 '구조패턴'에 속한다.

◽ 의미

  • 퍼사드 패턴(Facade Pattern)은 구조 패턴의 한 종류로, 서브시스템들의 공통적인 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 패턴이다.

  • Facade : 사용자의 요청을 서브시스템 객체에 전달하는 단순하고 일관된 통합 인터페이스

  • Subsystem Classes : Facade에 대한 정보를 가지지 않고, 서브시스템의 기능을 구현하는 클래스


+) 💡 구조패턴?

구조 패턴이란 작은 클래스들의 상속과 합성을 통해 더 큰 클래스를 생성하는 방법을 제공하는 패턴으로, 독립적으로 개발한 클래스들을 마치 하나인 것처럼 사용할 수 있다.
ex) 어댑터 패턴, 가교 패턴, Composite 패턴, Decorator 패턴, Proxy 패턴 등


예제 코드

◽ 상황

아침에 일어나서 사무실에 출근하기까지를 여러 과정으로 나눠볼 수 있다.
예를들어 씻고, 아침을 먹고, 대중교통을 타서 출근을 하는데, Facade Pattern을 이용하여 각각의 동작들을 서브클래스로 구현하고, 서브클래스들의 공통 기능을 정의하는 '상위 수준의 인터페이스'를 정의할 수 있다.


* Facade 정의

public class GoOffice {

    public void goToWork() {
        Wash wash = new Wash();
        Breakfast breakfast = new Breakfast();
        Move move = new Move();

        wash.brushTeeth();
        wash.shower();
        breakfast.eat();
        breakfast.water();
        move.bus();
    }
}

Subsystem Classes

Wash, Breakfast, Move 등으로 3가지 서브시스템 클래스를 만들어주자.

//Wash.class
public class Wash {

    public void brushTeeth() {
        System.out.println("Brush my teeth");
    }

    public void shower() {
        System.out.println("Take a shower");
    }
}

//Breakfast.class
public class Breakfast {

    public void eat() {
        System.out.println("Have breakfast");
    }

    public void water() {
        System.out.println("Drink water");
    }
}



//Move.class
public class Move {

    public void bus() {
        System.out.println("Take the bus");
    }
}

이제 이것들을 테스트해보자


public class Client {

    public static void main(String[] args) {
        GoOffice goOffice = new GoOffice();
        goOffice.goToWork();
    }
}

이로써 작은 클래스들(서브시스템 클래스들)의 상속과 합성을 통해 더 큰 클래스를 생성한 것을 확인할 수 있었다.


특징

  • 낮은 결합도
    -> 클라이언트가 서브시스템의 코드를 모르더라도 Facade 클래스를 통해 사용 가능

  • 서브 클래스 직접 접근이 가능하다
    -> Facade 클래스를 통해 서브클래스를 사용할지, 서브클래스를 직접 사용할지 선택 가능



profile
초짜 백엔드 개린이

0개의 댓글