2024. 7. 3. 17:14ใDesing Pattern
๐ Facade Pattern์ด๋?
ํผ์ฌ๋ ํจํด(Facade Pattern)์ ๊ตฌ์กฐ ํจํด(Structural Pattern)์ ํ ์ข ๋ฅ๋ก์จ, ๋ณต์กํ ์๋ธ ํด๋์ค๋ค์ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์ ์ํ๋ ์์ ์์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํจํด์ด๋ค.
- ํผ์ฌ๋ ๊ฐ์ฒด(Facade Object)๋ ์๋ธ ํด๋์ค์ ์ฝ๋์ ์์กดํ๋ ์ผ์ ๊ฐ์์์ผ ์ฃผ๊ณ , ๋ณต์กํ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋จํ ์ฌ์ฉ ํ ์ ์๊ฒ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
- ํผ์ฌ๋ ํจํด์ ํตํด ์๋ธ ์์คํ (SubSystem)๋ค ๊ฐ์ ์ข ์์ฑ์ ์ค์ฌ์ค ์ ์์ผ๋ฉฐ, ํผ์ฌ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ณณ(Client)์์๋ ์ฌ๋ฌ ์๋ธ ํด๋์ค๋ค์ ํธ์ถํ ํ์ ์์ด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๐ ํผ์ฌ๋ ํจํด ๊ตฌ์กฐ

- Facade : ์๋ธ์์คํ ๊ธฐ๋ฅ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํด ์ฌ๋ฌ ์์คํ ๊ณผ ์ํธ ์์ฉํ๋ ๋ณต์กํ ๋ก์ง์ ์ฌ์ ๋ฆฌํด์ ๋์ ๋ ๋ฒจ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ค. Facade ์ญํ ์ ์๋ธ ์์คํ ์ ๋ง์ ์ญํ ์ ๋ํด ‘๋จ์ํ ์ฐฝ๊ตฌ’๊ฐ ๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ธ์์คํ ์ด ์๋ก ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋์ง ์๋๋ก ํ๋ค.
- Additional Facade : ํผ์ฌ๋ ํด๋์ค๋ ๋ฐ๋์ ํ๊ฐ๋ง ์กด์ฌํด์ผ ํ๋ค๋ ๊ท์น๊ฐ์ ๊ฑด ์๋ค. ์ฐ๊ด ๋์ง ์์ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ์ผ๋ง๋ ์ง ํผ์ฌ๋ 2์ธ๋ก ๋ถ๋ฆฌํ๋ค. ์ด ํผ์ฌ๋ 2์ธ๋ ๋ค๋ฅธ ํผ์ฌ๋์์ ์ฌ์ฉํ ์๋ ์๊ณ ํด๋ผ์ด์ธํธ์์ ์ง์ ์ ๊ทผํ ์๋ ์๋ค.
- SubSystem(ํ์ ์์คํ ) : ์์ญ ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํด๋์ค๋ค
- Client : ์๋ธ ์์คํ ์ ์ง์ ์ ๊ทผํ๋ ๋์ Facade๋ฅผ ์ฌ์ฉํ๋ค.
๐ ์์
์๋ฅผ ๋ค์ด, ์ธํ์ด๋ผ๋ ํ์์ Facade Pattern์ ์ ์ฉ์์ผ๋ณด์.
์ธํ๋ฅผ ํ๊ธฐ ์ํด์๋ ํฌ๊ฒ Washing, Rinsing, Spinning๊ณผ ๊ฐ์ ๋์๋ค์ด ํ์ํ๋ค. ์ด๋ค์ SubSystem๋ค๋ก์จ, Facade Object๋ฅผ ํตํด '์ธํ'์ด๋ผ๋ ํ์์ ํ์ํ ๊ณตํต ๊ธฐ๋ฅ๋ค์ ์ ์ํ ์ ์๋ค.
๊ธฐ์กด์ ์ฝ๋ (Facade Pattern ๋ฏธ์ ์ฉ)
Washing
class Rinsing{
void rinse(){
System.out.println("do Rinsing")
}
}
Rinsing
class Spinning{
void spin(){
System.out.println("do Spinning")
}
}
Spinning
class Washing{
void wash(){
System.out.println("do Washing")
}
}
Client (sub class ์ฌ์ฉ ๊ฐ์ฒด)
class Client{
Washing washing = new Washing();
Rinsing rinsing = new Rinsing();
Spinning spinning = new Spinning();
washing.wash();
rinsing.rinse();
spinning.spin();
}
์ฝ๊ธฐ๊ฐ ํ๋ ์ฝ๋์ด๋ฉฐ, ์ ์ง๋ณด์์ ์ฉ์ดํ์ง ์๋ค. Client๊ฐ ์ฌ๋ฌ ๊ฐ์ฒด๋ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค.
๐ Facade Pattern ์ ์ฉ
WashingMachine
class WashingMachine{
Washing washing = new Washing();
Rinsing rinsing = new Rinsing();
Spinning spinning = new Spinning();
void startWashing(){
washing.wash();
rinsing.rinse();
spinning.spin();
}
}
Client
class Client{
WashingMachine washingMachine = new WashingMachine();
washingMachine.strartWahsing();
}
Client์์๋ Facade Object(WashingMachine)๋ง์ ํธ์ถํ์ฌ '์ธํ'์ด๋ผ๋ ๋์์ ์ํํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋์ ์๋ฏธ ๋ํ ๋ช ํํ๊ฒ ์ ์ ์๋ค.
๐ ํผ์ฌ๋ ํจํด ํน์ง
ํจํด ์ฌ์ฉ ์๊ธฐ
- ์์คํ ์ด ๋๋ฌด ๋ณต์กํ ๋
- ๊ทธ๋์ ๊ฐ๋จํ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ณต์กํ ์์คํ ์ ์ ๊ทผํ๋๋ก ํ๊ณ ์ถ์๋
- ์์คํ ์ ์ฌ์ฉํ๊ณ ์๋ ์ธ๋ถ์ ๊ฒฐํฉ๋๊ฐ ๋๋ฌด ๋์ ๋ ์์กด์ฑ ๋ฎ์ถ๊ธฐ ์ํ ๋
ํจํด ์ฅ์
- ํ์ ์์คํ ์ ๋ณต์ก์ฑ์์ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ, ์ธ๋ถ์์ ์์คํ ์ ์ฌ์ฉํ๊ธฐ ์ฌ์์ง๋ค.
- ํ์ ์์คํ ๊ฐ์ ์์กด ๊ด๊ณ๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ฐ์์ํค๊ณ ์์กด์ฑ์ ํ ๊ณณ์ผ๋ก ๋ชจ์ ์ ์๋ค.
- ๋ณต์กํ ์ฝ๋๋ฅผ ๊ฐ์ถค์ผ๋ก์จ, ํด๋ผ์ด์ธํธ๊ฐ ์์คํ ์ ์ฝ๋๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ Facade ํด๋์ค๋ง ์ดํดํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
'Desing Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Strategy ํจํด์ด๋? (0) | 2024.06.25 |
---|