반응형
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
- 지표
- 실용주의 프로그래머
- 디자인 패턴
- Rust
- 생성 패턴
- AWS
- 커머스
- Til
- 토스
- MAPF
- 구조 패턴
- PostgreSQL
- docker
- 티스토리챌린지
- DevOps
- 경로 계획 알고리즘
- AWS 비용 절감
- leetcode
- 신혼 여행
- 청첩장 모임
- ssh
- study
- Go-lang
- 오블완
- amazon ecs
- 논문 정리
- terraform
- 14일 공부
- Playwright
- github
Archives
- Today
- Total
밤 늦게까지 여는 카페
[디자인 패턴] 플라이웨이트(flyweight) 패턴이란 본문
반응형
오늘 공부할 디자인 패턴은 플라이웨이트 패턴입니다.
1. 플라이웨이트 패턴이란
플라이웨이트 패턴은 이미 생성되어 있는 객체를 재활용하여 자원을 효율적으로 사용하는 패턴입니다. 싱글톤 패턴과 유사해보입니다만 플라이웨이트 패턴의 경우에는 객체의 세부 상태에 따라서 여러 개의 객체가 생성될 수 있습니다.
2. 활용하기 좋은 순간
- 소프트웨어에서 너무 많은 객체가 생성될 때
- 많은 수의 객체들을 생성하는 대신에 공유하는 것으로 대체할 수 있을 때
3. 예시
플라이웨이트 패턴을 공부하면서 CarInterface로 적절한 예시를 찾기가 어렵더라구요. 이번에는 Piano 클래스라는 새로운 예시를 준비해봤습니다.
우리는 3d 게임을 만들고 있고, 마침 피아노 오브젝트가 즐비한 맵을 만들고 있습니다. 피아노 오브젝트의 건반은 실제로 상호작용이 이뤄지며 소리가 재생됩니다. 플레이어가 건반을 조작할 경우, 해당 건반과 맵핑되는 음원 파일이 재생됩니다. 이 때, 피아노 건반 하나하나 객체를 생성하고, 각 객체들은 음원 파일을 읽어와야 할까요? 피아노 오브젝트가 1, 2개라면 문제 없겠지만 갯수가 많아질수록 시스템에 걸리는 부하가 커질 것입니다.
플라이웨이트 패턴을 적용하여 문제를 해결해볼까요?
아래의 예제 코드를 보시면 생성되는 피아노 객체는 건반 객체들을 공유하고 있다는 것을 확인할 수 있습니다.
플라이웨이트 패턴을 설명할 때, 싱글톤 패턴과는 다른 점을 설명드렸는데 준비한 예시에서는 보여드리질 못했네요 ^^;;;
## piano.py
class Piano:
def __init__(self):
self.key_map = load_keys()
def play(self, key: str):
self.key_map[key].play()
## key.py
KEYS = {}
def load_keys():
global KEYS
if len(KEYS) > 0:
return KEYS
for i in range(88):
str_i = str(i)
KEYS[str_i] = Key(str_i)
return KEYS
class Key:
def __init__(self, key: str):
self.load(key)
def load(self, key: str):
with open(f"/data/{:s}.mp4".format(key)) as f:
self.content = f.read()
def play(self):
## play the mp4 file
pass반응형
'디자인 패턴 > 구조 패턴' 카테고리의 다른 글
| [디자인 패턴] 퍼사드(Facade) 패턴이란 (2) | 2022.08.30 |
|---|---|
| [디자인 패턴] 데코레이터(Decorater) 패턴이란 (0) | 2022.08.29 |
| [디자인 패턴] 컴퍼짓(Composite) 패턴이란 (0) | 2022.08.28 |
| [디자인 패턴] 브릿지(Bridge) 패턴이란 (0) | 2022.08.27 |
| [디자인 패턴] 어답터(Adapter) 패턴이란 (0) | 2022.08.26 |