ํผ์‚ฌ๋“œ(Facade) ํŒจํ„ด์ด๋ž€?

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