반응형
퍼사드 패턴(Facade Pattern)은 소프트웨어 디자인 패턴 중 하나로, 복잡한 서브시스템에 대한 단순한 인터페이스를 제공하여 시스템의 사용성을 높이는 데 유용합니다. 이번 포스팅에서는 퍼사드 패턴의 개념, 자바로 작성한 예제 코드, 그리고 시각적 다이어그램을 통해 이해를 돕고자 합니다.
퍼사드 패턴이란?
퍼사드 패턴은 복잡한 서브시스템을 감추고 간단한 인터페이스를 제공하여 사용자가 시스템을 쉽게 사용할 수 있도록 도와줍니다. 이를 통해 클라이언트는 복잡한 서브시스템의 세부 사항을 몰라도 단순한 인터페이스를 통해 기능을 사용할 수 있습니다.
퍼사드 패턴의 구성 요소
- Facade: 클라이언트가 사용할 간단한 인터페이스를 제공하는 클래스.
- Subsystem Classes: 실제 복잡한 작업을 수행하는 여러 클래스들.
- 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();
}
}
퍼사드 패턴 다이어그램
다음 다이어그램은 퍼사드 패턴의 구조를 시각적으로 설명합니다.
- Client: 홈 시어터 시스템을 사용하는 클라이언트입니다. 클라이언트는 홈 시어터의 세부 사항을 알 필요가 없습니다.
- HomeTheaterFacade: 클라이언트에게 단순한 인터페이스를 제공하는 퍼사드 클래스입니다. 클라이언트는 퍼사드를 통해 홈 시어터를 제어합니다.
- 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 |