Facade Pattern을 시나리오를 통해 느껴보자!

강상우·2021년 7월 25일
0

DesignPattern

목록 보기
1/2
post-thumbnail

시나리오

이번에도 역시 시나리오를 통해 파사드 혹은 퍼사드 패턴이라고 불리는 디자인 패턴에 대해 느껴보겠습니다 🤩
집에서 생활하는 시간이 길어지는 요즘,, 저희는 집 영화관을 만들기로 했습니다!

집 영화관을 만들기 위해 필요한 가전제품을 찾아보니, 빔 프로젝트, 전등, 스피커가 있었다고 가정해보겠습니다!
저희는 인터넷을 통해 빔 프로젝트와 전등 스피커를 각각 구매하였습니다.
마침내 배송이 완료되어 집에 세가지 가전 제품을 설치하였습니다!

영화를 봐보자!

집 영화관을 만든 후 근무 시간이 끝난 저녁, 집 영화관을 통해 영화를 보기 위해 쇼파에 앉았습니다.
하지만!! 쇼파에서 리모콘 하나만 누르면 티비를 볼 수 있던 상황과 다르게 집 영화관은 해주어야 할 것이 너무 많았습니다.

다시 자리에서 일어나서 빔 프로젝트를 키러 갔습니다. 그리고, 집 영화관 용 전등을 키고, 스피커 전원까지 킨 후 자리에 앉았습니다.
하지만 여기서 끝나지 않았습니다. 새로 산 전등은 영화를 보기에 너무 밝아서 다시 가서 전등의 밝기를 줄였고, 스피커에서 나오는 소리는 너무 작아서 소리를 키웠습니다.

마침내 다시 자리에 앉아 영화를 틀어 2시간 가량 영화를 봤습니다.
끝나갈 무렵 저희는 비몽자몽으로 다시 걸어가서 빔 프로젝트를 끄고, 전등을 끄고, 스피커까지 끈 후 쇼파로 다시와서 잠이 들었습니다.

불편한 집 영화관

저희가 기대했던 것과 다르게 생각보다 집 영화관은 귀찮은 점이 많았습니다.
다음 날 친구에게 이에 대한 이야기를 했더니, 친구도 이미 집 영화관을 만들어 둔 거였습니다. 심지어 친구는 인터넷에서 판매하는 집 영화관 전용 리모콘까지 사놨었습니다.

저희도 이 이야기를 듣고, 집 영화관 전용 리모콘을 구입하였습니다.

집 영화관 리모콘

집 영화관 리모콘은 본인들이 사용하는 집 영화관 가전제품들을 등록하면 리모콘이 스스로 영화를 볼 수 있는 전등 밝기, 스피커 크기, 그리고 영화 재생을 시켜주는 리모콘이었습니다.

다시 쇼파에 앉은 저희는 리모콘으로 영화 재생 버튼을 눌렀습니다. 그랬더니 빔 프로젝트에 전원이 들어오고, 전등이 켜지며 밝기가 조절되었고, 스피커 소리가 조절되었습니다. 그리고 영상이 재생되기 시작했습니다.

이제 정말 영화관같은 느낌이 드네요.

편하게 저희는 영화를 본 후, 리모콘으로 영화 종료 버튼을 눌렀더니, 빔 프로젝트 전원이 꺼지고, 전등이 꺼지며, 스피커가 껴졌습니다.

이제 진짜 집 영화관이 잘 만들어진 것 같네요!

Facade Pattern

Facade Pattern은 이렇게 영화보기라는 시스템에 필요한 서브 시스템(빔 프로젝트, 전등, 스피커 조절 등)들을 통합한 인터페이스를 제공해주는 패턴을 말합니다.

즉, 한층 더 고수준의 인터페이스로 정의해버리기 때문에, 그 하위의 시스템은 신경쓰지 않아도 된다는 것이에요!

이전에 리모콘이 없던 시기를 코드로 시뮬레이션 해보겠습니다.

public static void main(String[] args) {
    BeamProjector beamProjector = BeamProjector.setUpBeamProjector();
    Light light = Light.setUpLight();
    Speaker speaker = Speaker.setUpSpeaker();

    beamProjector.turnOn();
    light.turnOn();
    speaker.turnOn();

    light.down();
    speaker.up();

    beamProjector.playVideo();

    beamProjector.turnOff();
    light.turnOff();
    speaker.turnOff();
}

빔 프로젝트와 전등 스피커를 설치했습니다.

그리고, 각각의 전원을 키고, 전등의 밝기는 낮추고, 사운드의 크기는 올려준 후, 영화를 시작시켰습니다.
영화가 끝난 후에는, 각각의 전원을 꺼주었습니다.

이번에는 리모콘을 통해 조정하는, 즉 한단계 더 고차원으로 추상화된 Facade Pattern 방식으로 시뮬레이션 해보겠습니다.

public static void main(String[] args) {
    HomeTheater homeTheater = new HomeTheater.Builder()
        .beamProjector(BeamProjector.setUpBeamProjector())
        .light(Light.setUpLight())
        .speaker(Speaker.setUpSpeaker())
        .build();

    homeTheater.startHomeTheater();
    homeTheater.endHomeTheater();
}

홈 시어터라는 고차원 객체를 생성합니다. 이때 어떤 전자제품들을 사용하는지 설정해주었습니다.(빌더 패턴이 어울려서 빌더패턴을 사용했습니다.)

그 후, homeTheater.startHomeTheater()homeTheater.endHomeTheater()라는 명령만 호출하면 원하는 결과가 나오게 됩니다.

마무리

저희는 각각의 서브 시스템을 직접 컨트롤하지 않고, 리모콘이라는 고차원 인터페이스를 사용했습니다.
그리고, 이 리모콘 내부에서 서브 시스템들을 컨트롤합니다.
하지만 리모콘을 잃어버려도 저희는 직접 가전제품들을 사용할 수 있는 것처럼, Facade 객체를 통해서뿐만 아니라 직접 가전제품 객체들을 컨트롤 할 수 있습니다.

모든 서브시스템과 Facade 객체에 대한 코드는 여기를 참조해주세요!

profile
https://sangwoo0727.github.io/ 기존 블로그 이전 중입니다.

0개의 댓글