아무거나

[Design Pattern] Flyweight Pattern 본문

Java & Kotlin/Java

[Design Pattern] Flyweight Pattern

전봉근 2020. 1. 12. 12:19
반응형

플라이웨이트 패턴(Flyweight Pattern)

플라이웨이트 패턴을 통하여 메모리 공간을 절약할 수 있다.

 

 

Client가 Flyweight를 직접관리하지 않고 Factory나 다른 매니저들한테 Flyweight를 대신 관리하도록 하는것이 해당 패턴의 중요한 부분이다.

플라이웨이트 패턴 예시 - 1

먼저 Client가 다루는 Flyweight 클래스를 생성하자.
[Flyweight.java]

package com.bkjeon.flyweight;

public class Flyweight {

    public Flyweight(String data) {
        this.data = data;
    }

    private String data;

    public String getData() {
        return data;
    }
}

FlyweightFactory(=매니저) 클래스를 생성하자.
[FlyweightFactory.java]

package com.bkjeon.flyweight;

import java.util.Map;
import java.util.TreeMap;

public class FlyweightFactory {

    Map<String, Flyweight> pool;

    public FlyweightFactory() {
        pool = new TreeMap<>();
    }

    public Flyweight getFlyweight(String key) {
        Flyweight flyweight = pool.get(key);

        if (flyweight == null) {
            flyweight = new Flyweight(key);
            pool.put(key, flyweight);   // pool에 넣어주는 부분이 없다면 계속하여 새로생성하여 메모리에 치명적
            System.out.println("새로생성 " + key);
        } else {
            System.out.println("재사용 " + key);
        }

        return flyweight;
    }

}

메인 클래스를 작성
[Main.java]

package com.bkjeon.flyweight;

public class Main {

    public static void main(String[] args) {
        FlyweightFactory factory = new FlyweightFactory();

        Flyweight flyweight = factory.getFlyweight("A");
        System.out.println(flyweight);

        flyweight = factory.getFlyweight("A");
        System.out.println(flyweight);

        flyweight = factory.getFlyweight("A");
        System.out.println(flyweight);

        flyweight = factory.getFlyweight("A");
        System.out.println(flyweight);

        // 새로생성
        // flyweight = factory.getFlyweight("B");
        // System.out.println(flyweight);
    }

}

실행결과

새로생성 A
com.bkjeon.flyweight.Flyweight@4f3f5b24
재사용 A
com.bkjeon.flyweight.Flyweight@4f3f5b24
재사용 A
com.bkjeon.flyweight.Flyweight@4f3f5b24

처음에만 새로 생성하고 그 다음부터 재사용 하므로 메모리를 적게 사용할 수 있는 장점이 있다.

 

 

참고: https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard

반응형

'Java & Kotlin > Java' 카테고리의 다른 글

[Design Pattern] Command Pattern  (0) 2020.01.12
[Design Pattern] Proxy Pattern  (0) 2020.01.12
[Design Pattern] Memento Pattern  (0) 2020.01.12
[Design Pattern] State Pattern  (0) 2020.01.10
[Design Pattern] Mediator Pattern  (0) 2020.01.08
Comments