반응형
청춘고양이
배움을 기록하는 곳
청춘고양이
전체 방문자
오늘
어제
  • Hello World (119)
    • JQuery (5)
    • In my opinion (4)
    • HTML&CSS (8)
    • JS (9)
    • JAVA (21)
    • Spring Boot (21)
    • Node.js (1)
    • Linux (7)
    • Git (2)
    • Kotlin (4)
    • Fluttor (4)
    • 정보처리기사 (19)
    • AWS (1)
    • Oracle (8)
    • MySQL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • js 로또 번호
  • 가위바위보js
  • 제이쿼리 패스워드 변경
  • 청춘고양이
  • 제이쿼리 비밀번호
  • js 패스워드 변경
  • js
  • js 비밀번호
  • 제이쿼리 버튼클릭시 색 변경
  • 스크롤js
  • 쉬프트 연산
  • 중복 제거 로또
  • 자바db연동
  • 객체 안의 함수
  • 제이쿼리
  • spring 기본설정
  • ScrollEffectJs
  • 초보개발
  • css
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청춘고양이

배움을 기록하는 곳

퍼사드 패턴
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 클래스들입니다. 퍼사드가 이들 클래스와 상호작용하여 작업을 수행합니다.

결론

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

반응형
저작자표시 변경금지 (새창열림)

'JAVA' 카테고리의 다른 글

Java에서의 일반형(Generic)에 대해 알아보자  (0) 2024.07.03
Java에서의 열거형(Enum)에 대해 알아보자  (0) 2024.07.02
static, final, static final  (0) 2024.06.28
조건문에서 if만 사용할까? else if를 사용할까?  (0) 2024.06.27
Java의 Wrapper 클래스: 기본 자료형을 객체로 다루는 방법  (0) 2024.06.25
    'JAVA' 카테고리의 다른 글
    • Java에서의 일반형(Generic)에 대해 알아보자
    • Java에서의 열거형(Enum)에 대해 알아보자
    • static, final, static final
    • 조건문에서 if만 사용할까? else if를 사용할까?
    청춘고양이
    청춘고양이
    신입개발자

    티스토리툴바