ํผ์ฌ๋ ํจํด (Facade Pattern)
Facade๋ "๊ฑด๋ฌผ์ ์ ๋ฉด"์ ์๋ฏธํ๋ ๋จ์ด๋ก ์ด๋ค ์ํํธ์จ์ด์ ๋ค๋ฅธ ์ปค๋ค๋ ์ฝ๋ ๋ถ๋ถ์ ๋ํ์ฌ ๊ฐ๋ตํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ๋์์ธ ํจํด์ ์๋ฏธํฉ๋๋ค. ํผ์ฌ๋ ๊ฐ์ฒด๋ ๋ณต์กํ ์ํํธ์จ์ด ๋ฐ๊นฅ์ชฝ์ ์ฝ๋๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ชฝ ์ฝ๋์ ์์กดํ๋ ์ผ์ ๊ฐ์์์ผ ์ฃผ๊ณ , ๋ณต์กํ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉ ํ ์ ์๊ฒ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ค๋๋ค.
๋๊ธฐ
์ด๋ค ์ฌ๋์ด ์ํ๋ฅผ ๋ณด๊ณ ์ ํฉ๋๋ค. ์ํ๋ฅผ ๋ณด๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค. ์๋ฃ๋ฅผ ์ค๋นํ๋ค -> TV๋ฅผ ์ผ ๋ค -> ์ํ๋ฅผ ๊ฒ์ํ๋ค -> ์ํ๋ฅผ ๊ฒฐ์ ํ๋ค -> ์ํ๋ฅผ ์ฌ์ํ๋ค.
public void view()
{
Beverage beverage = new Beverage("์ฝ๋ผ");
Remote_Control remote= new Remote_Control();
Movie movie = new Movie("์ด๋ฒค์ ธ์ค");
beverage.Prepare(); //์๋ฃ ์ค๋น
remote.Turn_On(); //tv๋ฅผ ์ผ๋ค
movie.Search_Movie(); //์ํ๋ฅผ ์ฐพ๋ค
movie.Charge_Movie(); // ์ํ๋ฅผ ๊ฒฐ์ ํ๋ค
movie.play_Movie(); //์ํ๋ฅผ ์ฌ์ํ๋ค
}
์ฌ์ฉ์ ์ ์ฅ์์๋ ์ํ๋ฅผ ๋ณด๊ธฐ์ํด์๋ ์ ๋ฐ ๋ณต์กํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ด์ผ๋ง ํฉ๋๋ค. ์ฌ๊ธฐ์ ํผ์ฌ๋ ๊ฐ์ฒด๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋๋ฐ ํผ์ฌ๋๋ ์ด๋ฐ ์ฌ์ฉ์์ ์ํ๋ฅผ ๋ณด๊ธฐ์ํด ์ฌ์ฉํ๋ ์๋ธ ํด๋์ค๋ค ์ฌ์ด์ ๊ฐ๋จํ ํตํฉ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ์ญํ ์ ํ๊ฒ ๋ฉ๋๋ค.
ํผ์ฌ๋ ํจํด์ ๊ตฌ์กฐ
https://t1.daumcdn.net/cfile/tistory/99294A3359C9DBBE33
Client ์ ์ฅ์์๋ Facde ๊ฐ์ฒด์์ ์ ๊ณตํ๋ doSomething() ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ๋ณต์กํ ์๋ธ ํด๋์ค์ ์ฌ์ฉ์ ๋์์ฃผ๊ณ ์์ต๋๋ค.
์์
์์ ๋๊ธฐ ๋ถ๋ถ์์ ์ฌ์ฉํ ์์ ๋ฅผ Facade ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ ํํ์ ๋๋ถ์ด ์ ์ฒด ์์ค๋ฅผ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
Remote_Control.java
public class Remote_Control {
public void Turn_On(){
System.out.println("TV๋ฅผ ์ผ๋ค");
}
public void Turn_Off(){
System.out.println("TV๋ฅผ ๋๋ค");
}
}
๋ฆฌ๋ชจ์ปจ์ ์กฐ์ํ๋ ํด๋์ค์ ๋๋ค. ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ค ํ๋์ ๋๋ค.
Movie.java
public class Movie {
private String name="";
public Movie(String name) {
this.name = name;
}
public void Search_Movie() {
System.out.println(name+" ์ํ๋ฅผ ์ฐพ๋ค");
}
public void Charge_Movie() {
System.out.println("์ํ๋ฅผ ๊ฒฐ์ ํ๋ค");
}
public void play_Movie() {
System.out.println("์ํ ์ฌ์");
}
}
์ํ ์ฌ์๊ณผ ๊ด๋ จ๋ ํด๋์ค์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ค ํ๋์ ๋๋ค.
Beveragejava
public class Beverage {
private String name="";
public Beverage(String name) {
this.name = name;
}
public void Prepare() {
System.out.println(name+" ์๋ฃ ์ค๋น ์๋ฃ ");
}
}
์๋ฃ๋ฅผ ์ ๊ณตํ๋ ํด๋์ค์ ๋๋ค. ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ค ํ๋์ ๋๋ค.
Facade.java
public class Facade {
private String beverage_Name ="";
private String Movie_Name="";
public Facade(String beverage,String Movie_Name) {
this.beverage_Name=beverage_Name;
this.Movie_Name=Movie_Name;
}
public void view_Movie() {
Beverage beverage = new Beverage(beverage_Name);
Remote_Control remote= new Remote_Control();
Movie movie = new Movie(Movie_Name);
beverage.Prepare();
remote.Turn_On();
movie.Search_Movie();
movie.Charge_Movie();
movie.play_Movie();
}
}
๋ค์์ ๊ฐ์ฅ ์ค์ํ Facade ํด๋์ค์ ๋๋ค. ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ ๋ํ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๋ฉฐ ๋ณต์กํ ํธ์ถ ๋ฐฉ์์ ๋ํ์ฌ view_Movie() ๋ฉ์๋๋ด์์ ๊ตฌํ์ ํ๋๋ก ํ์์ต๋๋ค.
public class Facade {
public void view() {
Facade facade = new Facade("์ฝ๋ผ","์ด๋ฒค์ ธ์ค");
facade.view_Movie();
}
์ฌ์ฉ์ ์ ์ฅ์์๋ ์ด์ ์๋ธ ํด๋์ค์ ๋ํด์ ์ ํ์๊ฐ ์์ต๋๋ค. ๋จ์ง Facde ๊ฐ์ฒด์ view_Movie() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ์๋ธ ํด๋์ค๋ค์ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ํ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถ์ฒ : https://lktprogrammer.tistory.com/42