일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- redis
- devops
- laravel
- Spring
- Design Patterns
- IntelliJ
- 요리
- JVM
- jsp
- java
- Gradle
- springboot
- javascript
- jenkins
- ReactJS
- 맛집
- db
- ubuntu
- linux
- MySQL
- Spring Batch
- Spring Boot
- it
- Git
- tool
- AWS
- php
- Web Server
- Oracle
- elasticsearch
Archives
- Today
- Total
아무거나
[Design Pattern] Flyweight Pattern 본문
반응형
플라이웨이트 패턴(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
처음에만 새로 생성하고 그 다음부터 재사용 하므로 메모리를 적게 사용할 수 있는 장점이 있다.
반응형
'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