๐ŸŽฐ Design Pattern

Proxy Pattern | ํ”„๋ก์‹œ ํŒจํ„ด

์—ฐ_์šฐ๋ฆฌ 2022. 8. 16. 22:31
๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

     

     

     

     

    ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ?

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ A๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ์— 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ ํ•˜์ž.

    A ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š”๋ฐ 

    A ๊ฐ์ฒด์˜ ๊ฐ’์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ๋ผ๊ณ ํ•˜์ž. ์ฆ‰ A์˜ ๊นกํ†ต๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค๋Š” ์–˜๊ธฐ์ด๋‹ค!

     

    ๋’ค์— ํ• ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•„๋„ 10์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ ค์„œ A๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š”๊ฒŒ ๋‚˜์€ ์„ ํƒ์ผ๊นŒ?

     

    ์ฐจ๋ผ๋ฆฌ A๊ฐ์ฒด์˜ ๊ฐ’์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ A๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์ „์—๋Š” ๊นกํ†ต์ธ ์ฑ„๋กœ ๋†”๋‘๋ฉด ์–ด๋–จ๊นŒ?

     

     

     

     

    ํ”„๋ก์‹œ ํŒจํ„ด์ด๋ž€?

    ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด

    ์ดˆ๊ธฐํ™” ์ง€์—ฐ, ์ ‘๊ทผ์ œ์–ด, ์บ์‹ฑ ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

     

    ํ”„๋ก์‹œ์˜ ํ™œ์šฉ

    - ์ดˆ๊ธฐํ™” ์ง€์—ฐ

       ๋ฆฌ์†Œ์Šค๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ฐ์ฒด ํƒ€์ž…์˜ ํ”„๋ก์‹œ๋ฅผ ๋งŒ๋“  ํ›„

       ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ํ”„๋ก์‹œ๊ฐ€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•ด์„œ ์ดˆ๊ธฐํ™”๋ฅผ ์ตœ๋Œ€ํ•œ ๋Šฆ์ถ˜๋‹ค

     

    - ์ ‘๊ทผ์ œ์–ด

       ์–ด๋–ค ๊ฐ์ฒด๋Š” ํŠน์ • ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•  ๋•Œ, ์ค‘๊ฐ„์— ํ”„๋ก์‹œ๋ฅผ ๋‘๊ณ  

       ํ”„๋ก์‹œ์—์„œ ๊ถŒํ•œ์„ ์ฒดํฌํ•œ ํ›„ ์‹ค์ œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ฒŒํ•œ๋‹ค

     

    - ์บ์‹ฑ

       ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ, ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ฒˆ ์ ‘๊ทผํ–ˆ๋˜ ๊ฐ์ฒด๋ผ๋ฉด ๊ตณ์ด ์‹ค์ œ ๊ฐ์ฒด๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ๋˜์ง€ ์•Š์„๊นŒ?

       ํ”„๋ก์‹œ์—์„œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋น ๋ฅด๊ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด ์บ์‹ฑ์ฒ˜๋ฆฌํ•œ๋‹ค

     

    ๋“ฑ๋“ฑ...

     

     

    ์žฅ์ 

    - ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค

    - ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ํ•ด์•ผํ•˜๋Š” ์ผ๋งŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ๋‹จ์ 

    - ์ฝ”๋“œ์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€

     

     

    ๊ตฌํ˜„์ฝ”๋“œ

    ๊ธฐ์กด์ฝ”๋“œ

    public class GameService {
        public void startGame() {
            System.out.println("์ด ์ž๋ฆฌ์— ์˜ค์‹  ์—ฌ๋Ÿฌ๋ถ„์„ ์ง„์‹ฌ์œผ๋กœ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.");
        }
    }
    ---------------------------------------------------------------------------
    public class Client {
        public static void main(String[] args) throws InterruptedException {
            GameService gameService = new GameService();
            gameService.startGame();
        }
    }

     

     

     

    ๋ณ€๊ฒฝ์ฝ”๋“œ

    public interface GameService {
        void startGame();
    }
    ---------------------------------------------------------------
    public class DefaultGameService implements GameService {
    
        @Override
        public void startGame() {
            System.out.println("์ด ์ž๋ฆฌ์— ์˜ค์‹  ์—ฌ๋Ÿฌ๋ถ„์„ ์ง„์‹ฌ์œผ๋กœ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.");
        }
    }
    ---------------------------------------------------------------
    public class GameServiceProxy implements GameService {
    
        private GameService gameService;   //์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•ด์•ผํ•˜๋‹ˆ ์ฐธ์กฐํ•œ๋‹ค
    
        @Override
        public void startGame() {
        	//์ดˆ๊ธฐํ™” ์ง€์—ฐ
            if (this.gameService == null) {
                this.gameService = new DefaultGameService();
            }
    
            gameService.startGame();
        }
    }
    public class Client {
    
        public static void main(String[] args) {
            GameService gameService = new GameServiceProxy();
            gameService.startGame();
        }
    }

     

     

    ๋ฐ˜์‘ํ˜•
    • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
    • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
    • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
    • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
    • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ