개인 공부/디자인패턴

디자인패턴 플라이웨이트 (경량패턴)

smallship 2024. 7. 15. 14:56

플라이웨이트 패턴(Flyweight Pattern)은 메모리 사용을 최적화하기 위한 구조적 디자인 패턴이다. 이 패턴은 많은 수의 유사한 객체를 효율적으로 공유하여 메모리 사용을 줄이는 것을 목표로 한다.


public interface StringFlyweight
{
    void Display();
}

FlyWeight 인터페이스

 

public class ConcreteStringFlyweight : StringFlyweight
{
    private string value;

    public ConcreteStringFlyweight(string value)
    {
        this.value = value;
    }

    public void Display()
    {
        Debug.Log("Value: " + value);
    }
}

 

문자열 저장,출력 구현

public class StringFlyweightFactory
{
    private Dictionary<string, StringFlyweight> flyweights = new Dictionary<string, StringFlyweight>();

    public StringFlyweight GetStringFlyweight(string value)
    {
        if (!flyweights.ContainsKey(value))
        {
            flyweights[value] = new ConcreteStringFlyweight(value);
        }
        return flyweights[value];
    }
}

 

같은 문자열은 동일한 플라이웨이트 객체를 사용하도록 구현

using UnityEngine;

public class FlyweightSimpleExample : MonoBehaviour
{
    void Start()
    {
        StringFlyweightFactory factory = new StringFlyweightFactory();

        StringFlyweight flyweight1 = factory.GetStringFlyweight("Hello");
        StringFlyweight flyweight2 = factory.GetStringFlyweight("World");
        StringFlyweight flyweight3 = factory.GetStringFlyweight("Hello");

        flyweight1.Display(); // "Value: Hello" 출력
        flyweight2.Display(); // "Value: World" 출력
        flyweight3.Display(); // flyweight1과 동일한 인스턴스를 반환하기 때문에 "Value: Hello" 출력
    }
}

 

문자열 "Hello"와 "World"를 각각 생성하고, "Hello" 문자열은 이미 생성된 플라이웨이트를 재사용하여 출력


이해하기 쉽게 문자로 예시를 들었지만 유니티에서 게임을 개발할때 총알, 파티클, 적, 아이템 등 많은 수의 객체를 효율적으로 관리할 때 플라이웨이트 패턴을 사용할 수 있다.

'개인 공부 > 디자인패턴' 카테고리의 다른 글

디자인패턴 컴포지트  (0) 2024.07.15
디자인패턴 프록시  (0) 2024.07.15
디자인패턴 퍼사드  (0) 2024.07.15
디자인패턴 데코레이터  (0) 2024.07.15
디자인패턴 브릿지  (0) 2024.07.15