Flyweight
Flyweight 패턴은 수많은 객체를 생성해야 하는 상황에서 메모리 사용을 줄이고 성능을 개선하기 위한 디자인 패턴입니다. 이 패턴의 핵심 아이디어는 동일한 상태를 가지는 객체를 여러 번 생성하는 대신, 이미 생성된 객체를 재사용(공유)하는 방식에 있습니다.
+----------------+
| Flyweight | <-- 공통 인터페이스
+----------------+
▲
│
+-----------------------+
| ConcreteFlyweight | <-- 실제 객체 (공유 대상)
+-----------------------+
▲
│
+-----------------------+
| FlyweightFactory | <-- 객체 생성 및 공유 관리
+-----------------------+
캐시(cache)나 풀(pool) 방식에서 이미 존재하는 id를 가진 객체가 있다면 새 객체를 생성하지 않고 해당 객체를 반환합니다. 만약 해당 객체가 없다면 새로 생성하여 저장한 후 반환하는 방식입니다.
기존의 id를 가진 값이 있으면 그값을 주고 없으면 새롭게 객체를 만들고 추가해서 주는(공유) 방식입니다. Java의 여러 Cache 에서 사용되고 있는 방식입니다.
How do code
public interface Flyweight {
void operation();
}
// 구체적인 Flyweight 클래스
public class ConcreteFlyweight implements Flyweight {
private final String id;
public ConcreteFlyweight(String id) {
this.id = id;
}
@Override
public void operation() {
System.out.println("Flyweight 객체 " + id + "의 작업 수행");
}
}
public class FlyweightFactory {
// 이미 생성된 객체들을 저장하는 캐시
private static final Map<String, Flyweight> pool = new HashMap<>();
// id를 기반으로 Flyweight 객체를 반환하는 메소드
public static Flyweight getFlyweight(String id) {
if (pool.containsKey(id)) {
return pool.get(id);
} else {
Flyweight flyweight = new ConcreteFlyweight(id);
pool.put(id, flyweight);
return flyweight;
}
}
}
Last updated