Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 조인
- java
- json
- 널체크
- JavaScript
- 분(minute)
- 알고리즘
- spring
- Flyweight Pattern
- 생년
- map
- list
- ThreeWayPartition
- 초(second)
- 병합정렬
- SSL설정
- 자바
- 매일프로그래밍
- boot
- 디자인패턴
- 시간더하기
- SpringBoot
- 스트레티지패턴
- 자바스크립트
- degien pattern
- oracle
- 시(hour)
- jQuery
- 곱 최대값
- 파사드패턴
Archives
- Today
- Total
만들어가는 세상
[JAVA] 파사드 패턴 (facade pattern) 개념 본문
파사드 패턴(facade pattern) 개념
Gof 서적에 따르면 Facade 패턴은 "하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스를 정의한다." 라고 되어 있습니다. Facade 패턴은 어댑터 패턴과 거의 같은 방식으로 작동하지만 서로 다른 목적을 가지고 있습니다.
- Adapter 패턴은 원래 코드를 다른 코드와 작동할 수 있는 래퍼를 제공한다.
- Facade 패턴은 원래 코드를 더 쉽게 처리 할 수 있는 래퍼를 제공한다.
사용 예 :
- 캡슐화되지 않은 코드를 처리 할때 Facade 패턴을 사용한다.
- 원하는 코드를 다시 작성할 수 없을 때 일반적으로 Facade 패턴을 사용한다.
Facade를 사용하면 문제를 해결할 수 있지만 기본 코드가 변경되면 Facade 패턴도 변경해야 한다.
이제 코드로 확인해봅니다.
여러 클래스의 복잡한 실행 단위를 파사드 클래스에서 정의합니다.
컴퓨터,라디어,불을 킬때 하나하나 호출하는것이 아니라 홈 클래스에서 단위를 묶어서 원버튼으로 클릭 합니다.
public class Computer {
private boolean turnedOn = false;
public void turnOn() {
turnedOn = true;
System.out.println("컴퓨터를 킨다.");
}
public void turnOff() {
turnedOn = false;
System.out.println("컴퓨터를 끈다.");
}
public boolean isTurnedOn() {
return turnedOn;
}
}
public class Light {
private boolean turnedOn = false;
public void turnOn() {
turnedOn = true;
System.out.println("불을 킨다.");
}
public void turnOff() {
turnedOn = false;
System.out.println("불을 끈다.");
}
public boolean isTurnedOn() {
return turnedOn;
}
}
public class Radio {
private boolean turnedOn = false;
public void turnOn() {
turnedOn = true;
System.out.println("라디오를 킨다.");
}
public void turnOff() {
turnedOn = false;
System.out.println("라디오를 끈다.");
}
public boolean isTurnedOn() {
return turnedOn;
}
}
여기가 핵심 입니다. 생성자에 컴퓨터, 불, 라디오 등 객체의 그릇을 담아서 하나의 메소드로 통합? 합니다. 함수 단위를 묶은 샘 입니다.
public class HomeFacade {
private Computer computer;
private Light light;
private Radio radio;
public HomeFacade(Computer computer, Light light, Radio radio) {
this.computer = computer;
this.light = light;
this.radio = radio;
}
public void homeIn() {
System.out.println("집에 오면 컴퓨터 켜고, 라디오 켜고, 불 켜기.");
if (!computer.isTurnedOn()) {
computer.turnOn();
}
if (!light.isTurnedOn()) {
light.turnOn();
}
if (!radio.isTurnedOn()) {
radio.turnOn();
}
}
public void homeOut() {
System.out.println("컴퓨터 끄고, 라디오 끄고, 불 끄고 외출하기.");
if (computer.isTurnedOn()) {
computer.turnOff();
}
if (light.isTurnedOn()) {
light.turnOff();
}
if (radio.isTurnedOn()) {
radio.turnOff();
}
}
}
public class TestPattern {
public static void main(String[] args) {
Computer computer = new Computer();
Light light = new Light();
Radio radio = new Radio();
// 이전 사용 방식
System.out.println("========집에 나갈때 파사드 적용 전==========");
computer.turnOff();
light.turnOff();
radio.turnOff();
System.out.println("========집에 들어올때 파사드 적용 후==========");
// 파사드 패턴 적용 후 사용 방식
HomeFacade home = new HomeFacade(computer, light, radio);
home.homeIn();
}
}
결과
클래스다이어그램을 확인해보겠습니다.
간단하게 파사드 패턴(facade pattern)에 대해서 알아보았습니다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] 최대값, 최소값 알고리즘 응용 문제 (0) | 2020.04.23 |
---|---|
[JAVA] 병합 정렬 개념 및 알고리즘을 이용한 코딩#2 (0) | 2020.04.16 |
[JAVA] 계수 정렬(Counting Sort) 개념 및 알고리즘을 이용한 코딩 (0) | 2020.04.14 |
[JAVA] 병합 정렬 개념 및 알고리즘을 이용한 코딩#1 (0) | 2020.04.13 |
[JAVA] 스트레티지 패턴 (strategy pattern) 개념 (0) | 2020.04.12 |
Comments