6_oHji
6_oHji
ν™˜μ˜ν•©λ‹ˆλ‹€☺
GitHub   Gmail
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (62)
    • πŸ’‘ DEEP DIVE (17)
      • PATTERN (17)
    • πŸ“ 끄적끄적 (4)
    • 🌈 EXPERIENCE (3)
    • πŸ’» PROJECT (3)
    • πŸ“’ STUDY (34)
      • ALGORITHM (1)
      • JAVA (5)
      • FRONT-END (7)
      • BACK-END (10)
      • SPRING (7)
      • NETWORK (3)
      • CLOUD (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • μŠ€ν† λ¦¬
  • 포럼
  • 둜그인
hELLO Β· Designed By μ •μƒμš°.
6_oHji
6_oHji
Deep Dive Into Design Patterns - ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄
πŸ’‘ DEEP DIVE/PATTERN

Deep Dive Into Design Patterns - ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄

2024. 5. 10. 20:12

πŸ’‘ ν”ŒλΌμ΄μ›¨μ΄νŠΈ(Flyweight) νŒ¨ν„΄μ΄λž€?

μž¬μ‚¬μš© κ°€λŠ₯ν•œ 객체 μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ μ‹œμΌœ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ†Œν™”ν•˜λŠ” ꡬ쑰 νŒ¨ν„΄μž…λ‹ˆλ‹€. 각 객체에 λͺ¨λ“  데이터λ₯Ό μœ μ§€ν•˜λŠ” λŒ€μ‹  μ—¬λŸ¬ 객체듀 간에 μƒνƒœμ˜ 곡톡 뢀뢄듀을 κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” RAM에 더 λ§Žμ€ 객체듀을 포함할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

 

자주 λ³€ν•˜λŠ” 속성(extrinsic)κ³Ό λ³€ν•˜μ§€ μ•ŠλŠ” 속성(intrinsic)을 λΆ„λ¦¬ν•˜κ³ , λ³€ν•˜μ§€ μ•ŠλŠ” 속성을 μΊμ‹œν•˜μ—¬ μž¬μ‚¬μš©ν•΄ λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ μ€„μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ λ™μΌν•˜κ±°λ‚˜ μœ μ‚¬ν•œ 객체듀 사이에 κ°€λŠ₯ν•œ λ§Žμ€ 데이터λ₯Ό μ„œλ‘œ κ³΅μœ ν•˜μ—¬ μ‚¬μš©ν•˜λ„λ‘ ν•˜μ—¬ μ΅œμ ν™”λ₯Ό λ…Έλ¦¬λŠ” κ²½λŸ‰ νŒ¨ν„΄μ΄λΌκ³  λΆˆλ¦½λ‹ˆλ‹€.

 

πŸ’‘ 클래슀 λ‹€μ΄μ–΄κ·Έλž¨μœΌλ‘œ λ³Έ ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄

  1. Flyweight : κ²½λŸ‰ 객체λ₯Ό λ¬ΆλŠ” μΈν„°νŽ˜μ΄μŠ€.
  2. Flyweight State : ν”ŒλΌμ΄μ›¨μ΄νŠΈ 내뢀에 μ €μž₯된 μƒνƒœλ₯Ό κ³ μœ ν•œ(intrinsic) μƒνƒœλΌκ³  ν•˜λ©°, ν”ŒλΌμ΄μ›¨μ΄νŠΈμ˜ λ©”μ„œλ“œμ— μ „λ‹¬λœ μƒνƒœλ₯Ό κ³΅μœ ν•œ(extrinsic) μƒνƒœλΌκ³  ν•œλ‹€.
  3. FlyweightFactory : κ²½λŸ‰ 객체λ₯Ό λ§Œλ“œλŠ” 곡μž₯ μ—­ν• κ³Ό μΊμ‹œ 역할을 κ²ΈλΉ„ν•˜λŠ” Flyweight 객체 관리 클래슀둜, getFlyweight() λ©”μ„œλ“œλŠ” νŒ©ν† λ¦¬ λ©”μ„œλ“œ 역할을 ν•œλ‹€. 만일 객체가 λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λ©΄ κ·ΈλŒ€λ‘œ 가져와 λ°˜ν™˜ν•˜κ³ , μ—†λ‹€λ©΄ μƒˆλ‘œ 생성해 λ°˜ν™˜ν•œλ‹€. 이둜 인해 ν΄λΌμ΄μ–ΈνŠΈλŠ” ν”ŒλΌμ›¨μ΄μ΄νŠΈλ“€μ„ 직접 λ§Œλ“€μ§€ μ•ŠλŠ”λ‹€.

 

πŸ’‘ ν”„λ‘μ‹œ νŒ¨ν„΄ κ΅¬ν˜„

 

-  TreeFactory : FlyweightFactory

public class TreeFactory {
    static Map<String, TreeType> treeTypes = new HashMap<>();

    public static TreeType getTreeType(String name, Color color, String otherTreeData) {
        TreeType result = treeTypes.get(name);
        if (result == null) {
            result = new TreeType(name, color, otherTreeData);
            treeTypes.put(name, result);
        }
        return result;
    }
}

 

- TreeType : Flyweight

public class TreeType { // κ³΅μœ ν•˜λŠ” μƒνƒœ
    private String name;
    private Color color;
    private String otherTreeData;

    public TreeType(String name, Color color, String otherTreeData) {
        this.name = name;
        this.color = color;
        this.otherTreeData = otherTreeData;
    }

    public void draw(Graphics g, int x, int y) {
        g.setColor(Color.BLACK);
        g.fillRect(x - 1, y, 3, 5);
        g.setColor(color);
        g.fillOval(x - 5, y - 10, 10, 10);
    }
}

 

-  Tree : Context

public class Tree {
    private int x;
    private int y;
    private TreeType type;

    public Tree(int x, int y, TreeType type) {
        this.x = x;
        this.y = y;
        this.type = type;
    }

    public void draw(Graphics g) {
        type.draw(g, x, y);
    }
}

 

-  Forest : Client

public class Forest extends JFrame {
    private List<Tree> trees = new ArrayList<>();

    public void plantTree(int x, int y, String name, Color color, String otherTreeData) {
        TreeType type = TreeFactory.getTreeType(name, color, otherTreeData);
        Tree tree = new Tree(x, y, type);
        trees.add(tree);
    }

    @Override
    public void paint(Graphics graphics) {
        for (Tree tree : trees) {
            tree.draw(graphics);
        }
    }
}

 

πŸ’‘ 마무리

ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄μ€

  1. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ˜ν•΄ μƒμ„±λ˜λŠ” 객체의 μˆ˜κ°€ λ§Žμ•„ μ €μž₯ λΉ„μš©μ΄ λ†’μ•„μ§ˆ λ•Œ
  2. μƒμ„±λœ 객체가 μ˜€λž˜λ„λ‘ λ©”λͺ¨λ¦¬μ— μƒμ£Όν•˜λ©° μ‚¬μš©λ˜λŠ” νšŸμˆ˜κ°€ λ§Žμ„ λ•Œ
  3. 곡톡적인 μΈμŠ€ν„΄μŠ€λ₯Ό 많이 μƒμ„±ν•˜λŠ” 둜직이 ν¬ν•¨λ˜μ—ˆμ„ λ•Œ
  4. μž„λ² λ””λ“œμ™€ 같이 λ©”λͺ¨λ¦¬λ₯Ό μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ

에 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬λ₯Ό 쀄일 수 있고, ν”„λ‘œκ·Έλž¨ 속도λ₯Ό κ°œμ„  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄

/ λ””μžμΈ νŒ¨ν„΄λ“€ / ꡬ쑰 νŒ¨ν„΄ ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄ λ‹€μŒ μ΄λ¦„μœΌλ‘œλ„ λΆˆλ¦½λ‹ˆλ‹€: μΊμ‹œ, Flyweight μ˜λ„ ν”ŒλΌμ΄μ›¨μ΄νŠΈλŠ” 각 객체에 λͺ¨λ“  데이터λ₯Ό μœ μ§€ν•˜λŠ” λŒ€μ‹  μ—¬λŸ¬ 객체듀 간에 μƒνƒœμ˜ 곡톡 뢀뢄듀을

refactoring.guru

 

πŸ’  κ²½λŸ‰(Flyweight) νŒ¨ν„΄ - μ™„λ²½ λ§ˆμŠ€ν„°ν•˜κΈ°

Flyweight Pattern ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄(Flyweight Pattern)은 μž¬μ‚¬μš© κ°€λŠ₯ν•œ 객체 μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ μ‹œμΌœ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ†Œν™”ν•˜λŠ” ꡬ쑰 νŒ¨ν„΄μ΄λ‹€. κ°„λ‹¨νžˆ λ§ν•˜λ©΄ μΊμ‹œ(Cache) κ°œλ…μ„ μ½”λ“œλ‘œ νŒ¨ν„΄ν™” ν•œκ²ƒμœΌ

inpa.tistory.com

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ’‘ DEEP DIVE/PATTERN' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • Deep Dive Into Design Patterns - ν…œν”Œλ¦Ώ λ©”μ„œλ“œ νŒ¨ν„΄
    • Deep Dive Into Design Patterns - λΉŒλ” νŒ¨ν„΄
    • Deep Dive Into Design Patterns - μ±…μž„ 연쇄 νŒ¨ν„΄
    • Deep Dive Into Design Patterns - ν”„λ‘μ‹œ νŒ¨ν„΄
    6_oHji
    6_oHji
    끄적끄적

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”