Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spring Boot Actuator
- The law of Demeter
- 생산자 소비자 패턴
- 스레드
- Transaction Pattern
- zipkin
- 스프링 배치
- Action Pattern
- 배치
- 사가 패턴
- Parallel Old GC
- JPA
- Resilinece4j
- 멀티스레드
- 디자인패턴
- 알고리즘
- Java
- 체인 패턴
- saga pattern
- MSA
- Serial GC
- 타입스크립트
- spring batch
- thread
- TypeScript
- Spring Cloud Netfilx Eureka
- 디자인 패턴
- 키클락
- java 정렬
- spring cloud
Archives
- Today
- Total
PSD( Private-Self-Development )
플라이웨이트 패턴 본문
플라이웨이트 패턴?
각 객체를 그때 그때 생성하는 것이 아닌 하나의 객체를 공유 사용하여 자원 소모를 줄이는 패턴이다.
말 그대로 가벼운 무게 즉 자원 소모가 적다는 뜻
여기서 플라이웨이트 패턴으로 공유되는 객체는
"본질적 상태"를 가진 객체여야 하고 이를 "본질적 공유" 라 한다.
본질적 상태? 부가적 상태?
본질적 상태란 어떠한 변경도 없이 객체를 있는 그대의 상태 즉 불변성을 만족하는 상태
부가적 상태란 반대로 상태값에 따라 객체가 달라지는 것 가변성
플라이웨이트 패턴 장점
- 자원 소모를 줄일 수 있다.
플라이웨이트 패턴 단점
- 코드가 복잡해진다.
플라이웨이트 패턴의 구현
public interface SharedObject {
void print();
}
public class SharedObject1 implements SharedObject{
@Override
public void print() {
System.out.println("SharedObject1");
}
}
public class SharedObject2 implements SharedObject{
@Override
public void print() {
System.out.println("SharedObject2");
}
}
public class SharedObjectFactory {
private static final HashMap<String, SharedObject> pools = new HashMap<>();
public static SharedObject getObject(String name){
try {
synchronized(SharedObjectFactory.class){
if( pools.get(name) == null ){
pools.put(name, (SharedObject) Class.forName(name).getDeclaredConstructor().newInstance());
}
}
return pools.get(name);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
// 사용 예
public static void main(String[] args) {
SharedObject test1 = SharedObjectFactory.getObject("com.alcherainc.mowgli.SharedObject1");
SharedObject secondTest1 = SharedObjectFactory.getObject("com.alcherainc.mowgli.SharedObject1");
System.out.println(test1 == secondTest1);
}
언제 사용해야 할까?
- 비슷한 객체를 너무 많이 생성하여 자원이 낭비되는 경우
참조