JAVA

퍼사드 패턴

청춘고양이 2024. 6. 28. 16:12
반응형

퍼사드 패턴(Facade Pattern)은 소프트웨어 디자인 패턴 중 하나로, 복잡한 서브시스템에 대한 단순한 인터페이스를 제공하여 시스템의 사용성을 높이는 데 유용합니다. 이번 포스팅에서는 퍼사드 패턴의 개념, 자바로 작성한 예제 코드, 그리고 시각적 다이어그램을 통해 이해를 돕고자 합니다.

퍼사드 패턴이란?

퍼사드 패턴은 복잡한 서브시스템을 감추고 간단한 인터페이스를 제공하여 사용자가 시스템을 쉽게 사용할 수 있도록 도와줍니다. 이를 통해 클라이언트는 복잡한 서브시스템의 세부 사항을 몰라도 단순한 인터페이스를 통해 기능을 사용할 수 있습니다.

퍼사드 패턴의 구성 요소

  1. Facade: 클라이언트가 사용할 간단한 인터페이스를 제공하는 클래스.
  2. Subsystem Classes: 실제 복잡한 작업을 수행하는 여러 클래스들.
  3. Client: Facade를 통해 서브시스템을 사용하는 클라이언트.

자바 예제 코드

이번 예제에서는 홈 시어터 시스템을 퍼사드 패턴으로 구현해보겠습니다. 홈 시어터 시스템에는 DVD 플레이어, 프로젝터, 앰프 등 여러 서브시스템이 있습니다. 퍼사드 클래스는 이들을 제어하는 간단한 인터페이스를 제공합니다.

서브시스템 클래스들

class DVDPlayer {
    public void on() {
        System.out.println("DVD Player is on");
    }

    public void play(String movie) {
        System.out.println("Playing '" + movie + "'");
    }

    public void off() {
        System.out.println("DVD Player is off");
    }
}

class Projector {
    public void on() {
        System.out.println("Projector is on");
    }

    public void setInput(String input) {
        System.out.println("Projector input set to " + input);
    }

    public void off() {
        System.out.println("Projector is off");
    }
}

class Amplifier {
    public void on() {
        System.out.println("Amplifier is on");
    }

    public void setVolume(int volume) {
        System.out.println("Amplifier volume set to " + volume);
    }

    public void off() {
        System.out.println("Amplifier is off");
    }
}

퍼사드 클래스

class HomeTheaterFacade {
    private DVDPlayer dvdPlayer;
    private Projector projector;
    private Amplifier amplifier;

    public HomeTheaterFacade(DVDPlayer dvdPlayer, Projector projector, Amplifier amplifier) {
        this.dvdPlayer = dvdPlayer;
        this.projector = projector;
        this.amplifier = amplifier;
    }

    public void watchMovie(String movie) {
        System.out.println("Get ready to watch a movie...");
        dvdPlayer.on();
        dvdPlayer.play(movie);
        projector.on();
        projector.setInput("DVD Player");
        amplifier.on();
        amplifier.setVolume(10);
    }

    public void endMovie() {
        System.out.println("Shutting movie theater down...");
        dvdPlayer.off();
        projector.off();
        amplifier.off();
    }
}

클라이언트 코드

public class Main {
    public static void main(String[] args) {
        // 서브시스템 인스턴스 생성
        DVDPlayer dvdPlayer = new DVDPlayer();
        Projector projector = new Projector();
        Amplifier amplifier = new Amplifier();

        // 퍼사드 인스턴스 생성
        HomeTheaterFacade homeTheater = new HomeTheaterFacade(dvdPlayer, projector, amplifier);

        // 영화 시작
        homeTheater.watchMovie("Inception");

        // 영화 종료
        homeTheater.endMovie();
    }
}

퍼사드 패턴 다이어그램

다음 다이어그램은 퍼사드 패턴의 구조를 시각적으로 설명합니다.

  1. Client: 홈 시어터 시스템을 사용하는 클라이언트입니다. 클라이언트는 홈 시어터의 세부 사항을 알 필요가 없습니다.
  2. HomeTheaterFacade: 클라이언트에게 단순한 인터페이스를 제공하는 퍼사드 클래스입니다. 클라이언트는 퍼사드를 통해 홈 시어터를 제어합니다.
  3. Subsystem Classes: 실제로 작업을 수행하는 DVDPlayer, Projector, Amplifier 클래스들입니다. 퍼사드가 이들 클래스와 상호작용하여 작업을 수행합니다.

결론

퍼사드 패턴은 복잡한 서브시스템을 간단한 인터페이스로 감춰 사용성을 높이는 강력한 디자인 패턴입니다. 이번 포스팅에서는 홈 시어터 시스템을 예제로 들어 퍼사드 패턴을 설명하였습니다. 자바 코드와 다이어그램을 통해 퍼사드 패턴의 구조와 동작 방식을 이해하는 데 도움이 되었길 바랍니다.

반응형