๐ŸŽฐ Design Pattern

Flyweight Pattern | ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด

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

๋ชฉ์ฐจ

     

     

     

     

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

    ๊ธ€์ž์—๋Š” ๊ธ€๊ผด, ํฌ๊ธฐ, ์ƒ‰๊น”, ๋‚ด์šฉ ๋“ฑ์˜ ์†์„ฑ์ด ์žˆ๋‹ค.

    ์šฐ๋ฆฌ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ณดํ†ต ๊ธ€๊ผด๊ณผ ํฌ๊ธฐ๋Š” ์ผ๊ด€๋˜๊ฒŒ ๋งž์ถ”๊ธฐ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•  ์ผ์ด ๊ฑฐ์˜ ์—†๋‹ค!

    ํ•˜์ง€๋งŒ ๋‚ด์šฉ๊ณผ ์ƒ‰๊น”์€ ์‹œ์‹œ๋•Œ๋•Œ๋กœ ๋ณ€ํ•˜๋Š” ์†์„ฑ์ด๋‹ค.

     

    ๊ธ€์ž ๊ฐ์ฒด๋Š” ๊ธ€๊ผด ๊ฐ์ฒด + ํฌ๊ธฐ ๊ฐ์ฒด + ์ƒ‰๊น” ๊ฐ์ฒด + ๋‚ด์šฉ ๊ฐ์ฒด์˜ ์กฐํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด ์ง„๋‹คํ•˜๋ฉด

    ์ž์ฃผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ธ€๊ผด ๊ฐ์ฒด์™€ ํฌ๊ธฐ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒˆ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?

    ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋‘๊ณ  ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ?

     

     

     

    ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด์ด๋ž€?

    ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ํŒจํ„ด์ด๋‹ค.

    ์ž์ฃผ ๋ณ€ํ•˜๋Š” ์†์„ฑ๊ณผ ์ž์ฃผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ธ๋‹ค!

     

    ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

    ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ 

    ๋น ๋ฅธ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค

     

     

     

    ์žฅ์ 

     

     

    ๋‹จ์ 

     

     

     

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

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

    public class Character {
        private char value;
        private String color;
        private String fontFamily;
        private int fontSize;
    }
    public class Client {
    
        public static void main(String[] args) {
            Character c1 = new Character('h', "white", "Nanum", 12);
            Character c2 = new Character('e', "white", "Nanum", 12);
            Character c3 = new Character('l', "white", "Nanum", 12);
            Character c4 = new Character('l', "white", "Nanum", 12);
            Character c5 = new Character('o', "white", "Nanum", 12);
        }
    }

     

     

     

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

    public class ๐Ÿ’™Character {
        private char value;
        private String color;
        private ๐Ÿ’šFont font;
    }
    ----------------------------------------
    public final class ๐Ÿ’šFont {
        final String family;
        final int size;
    }
    ----------------------------------------
    public class FontFactory {
    
        private Map<String, ๐Ÿ’šFont> cache = new HashMap<>();
        //์ผ์ข…์˜ ์บ์‹œ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค!
    
        public Font getFont(String font) {
            if (cache.containsKey(font)) {
            	//์บ์‹œ์— ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ 
                return cache.get(font);
               
            } else {
            	//์บ์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
                String[] split = font.split(":");
                Font newFont = new Font(split[0], Integer.parseInt(split[1]));
                cache.put(font, newFont);
                return newFont;
            }
        }
    }
    public class Client {
    
        public static void main(String[] args) {
            FontFactory fontFactory = new FontFactory();
            Character c1 = new Character('h', "white", fontFactory.getFont("nanum:12"));
            Character c2 = new Character('e', "white", fontFactory.getFont("nanum:12"));
            Character c3 = new Character('l', "white", fontFactory.getFont("nanum:12"));
        }
    }

     

     

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