[Design Pattern] 퍼싸드 패턴 || Facade Pattern

2022. 7. 24. 00:54·🐣 Computer Science
❓ 구조 패턴

클래스나 객체를 조합하여 더 큰 구조를 생성하는 방법이다.
서로 다른 인터페이스를 묶어 단일 인터페이스를 제공하거나, 새로운 기능을 제공한다.
따라서, 독립적인 각 클래스들을 마치 하나인 것처럼 사용한다.

퍼싸드 패턴은 이러한 구조 패턴 중 하나이다.


Facade : 건물의 외관

❓ 퍼싸드 패턴이란

내부의 서브 시스템을 감싸고, 클라이언트에게 인터페이스를 제공하여 쉽게 접근할 수 있도록 하는 패턴
서브 시스템을 더 쉽게 사용할 수 있도록 high-level 인터페이스를 정의하고 제공한다.
즉, 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다.
클라이언트는 내부에 어떤 기능이 존재하는지 복잡한 것에 대해 잘 모르더라도, 해당 기능에 접근하여 사용할 수 있다.

 

❗예시

[Design Pattern] 퍼싸드 패턴, Facade Pattern

오늘은 퍼싸드 패턴이오~!3학년 1학기 패턴 수업을 들을 때 Facade Pattern 이라는 단어를 처음 보고 '패케이드 패턴? 그게 뭐람?' 이라고 읽었던 기억이 난닼ㅋㅋㅋㅋ저렇게 읽자 마자 교수님이 "자

velog.io

클라이언트가 세탁기 버튼을 누른다.
→ 버튼을 누른 행위밖에 안했지만, 내부적으로 물과 세제가 들어가고 헹굼과 탈수과정이 진행된다.
 
서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체 필요

Facade : 사용자의 요청을 서브 시스템에 전달하는 단순하고 일관된 통합 인터페이스
Sub System : 독립적으로 기능이 수행되는 클래스. Facade에 대한 정보를 가지지 않는다.

❔ 서브 시스템을 감싸주는 거라고 그랬으니 캡슐화인가

캡슐화해주는 것처럼 보일 수 있는데, Facade에서는 캡슐화가 되지 않는다.
그저 기능 이용을 위한 간단한 인터페이스를 제공해주는 것이다.

 

❗구현

System/SubSytem1.java

package System;

class SubSystem1 {
    public SubSystem1() {
        System.out.println("Call Constructor : " + getClass().getSimpleName());
    }

    public void process() {
        System.out.println("Call Process : " + getClass().getSimpleName());
    }
}

System이라는 패키지 내부에 SubSytem1부터 3까지 존재한다.
생성자와 process 메서드가 존재한다.
접근 지정자가 default 로 동일한 패키지 내에서만 접근이 가능하다.
다른 패키지에서는 접근이 불가능하다.
 
System/Facade.java

package System;

public class Facade {
    private SubSystem1 subSystem1;
    private SubSystem2 subSystem2;
    private SubSystem3 subSystem3;

    public Facade() {
        subSystem1 = new SubSystem1();
        subSystem2 = new SubSystem2();
        subSystem3 = new SubSystem3();
    }

    public void process() {
        subSystem1.process();
        subSystem2.process();
        subSystem3.process();
    }
}

마찬가지로 System이라는 패키지에 존재하며, SubSystem와 동일한 패키지에 존재하기 때문에 접근이 가능하다.
process라는 메서드 안에 SubSystem의 process 메서드가 실행될 수 있도록 구현되어있다.
 
Main.java

import System.Facade;
//import System.SubSystem1;

class Main {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.process();

        /*
        접근 지정자로 인해 접근 불가
        new SubSytem1;
         */
    }

Main을 실행하면, Facade 내부에 있는 process 메서드를 실행하게 된다.
[ 결과 ]

Facade의 process 메서드만 실행하였는데, 내부적으로 SubSystem의 process 메서드가 실행된 것을 확인할 수 있다.
 

❗마무리

단순하게 통합된 것을 통해 클라이언트와 서브 시스템 간의 호출 횟수를 줄일 수 있다.
서브 시스템의 구성 요소를 보호할 수 있으며, 클라이언트가 다루어야 하는 객체의 수를 줄일 수 있다.
인터페이스 수가 확장되고, 복잡해질 수 있는 경우에 퍼싸드 패턴을 이용하면 좋다.
비슷한 작업을 해야 하는 다양한 인터페이스 중 하나의 인터페이스를 제공해야 할 때 적용하면 좋다.

 
 
 
참고)
https://gdtbgl93.tistory.com/142
https://dev-aiden.com/design%20pattern/Facade-Pattern/
 

반응형
저작자표시 (새창열림)
'🐣 Computer Science' 카테고리의 다른 글
  • SOA(Service Oriented Architecture)란?
  • 분산 컴퓨팅, RPC vs. XML Web Service 비교
  • 출처(Origin) | SOP | CORS
  • [Git] Git Branch 전략 || Github Flow vs. Git Flow vs. GitLab Flow
dmaolon
dmaolon
프로그래밍을 공부한 내용을 기록하는 공간입니다.
  • dmaolon
    기록 남기기
    dmaolon
  • 전체
    오늘
    어제
    • ALL (260)
      • ➰ Series (5)
      • 🎯PS (168)
        • Algorithm (15)
      • ☕ Java (11)
      • 🍀 Spring Boot (29)
      • 💬 Database (9)
      • 🐣 Computer Science (14)
      • 👍 Daily (4)
      • 🎁ReactJS (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    dfs
    Spring
    자바
    코딩
    알고리즘
    프로그래머스
    백준
    BFS
    프로그래밍
    파이썬
  • hELLO· Designed By정상우.v4.10.1
dmaolon
[Design Pattern] 퍼싸드 패턴 || Facade Pattern
상단으로

티스토리툴바