: 메모리 사용량을 줄이기 위해(=경량화) 인스턴스를 공유하는 패턴
- Keyword : Map, 객체 캐시, 재사용, 참조값 반환
✅ 구현
- 보통 해당 인스턴스의 생성여부를 확인하기 위해 Map 또는 배열 사용
- Singleton과 관련
- 원래 인스턴스 생성이라면 아래 코드 처럼 진행. 즉 '내'가 직접 만들어서 사용.
Integer i = new Integer(1);
- Flyweight 패턴으로는 중간에 있는 'Factory Method'가 만들어줘서 그걸 '내'가 사용하는 것.
Integer i = Integer.valueOf(1);

✅ intrinsic, extrinsic
- 공유하는 정보(intrinsic): 어떤 상황에서도 변하지 않는, 상태에 의존하지 않는 정보
- 공유하지 않는 정보(extrinsic): 인스턴스 배치 장소에 따라 변경되는 정보, 상황에 따라 변하는 정보, 상태에 의존하는 정보.
✅ static Factory Method
ex) getInstance: 유일한 인스턴스를 얻기 위한(Singleton) 것.
ex) String.valueOf
✅ 싱글톤과 차이
- Singleton: 하나의 인스턴스
- Flyweight: 여러 개의 인스턴스(단, 최소화하려는 것이 keypoint. 동일한 속성의 인스턴스를 공유한다는 것.) for 메모리 절약