๐ 00. Memento๋?
์ฌ๋, ์ฌ๊ฑด ๋๋ ๊ฒฝํ์ ์๊ธฐ์ํค๋ ์ญํ ์ ํ๋ ๋ฌผ๊ฑด์ ๋งํ๋ค.
๐ 01. Memento ํจํด์ด๋?
์บก์ํ๋ฅผ ์ ์งํ๋ฉด์ ๊ฐ์ฒด ๋ด๋ถ ์ํ๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ.
- ๋ฉ๋ฉํ ํจํด์ด๋, ๊ฐ์ฒด์ ์ํ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ์์ฑํ์ฌ ๊ฐ์ฒด ๋ด๋ถ์ ์ํ๋ฅผ ์ธ๋ถ์ ์ ์ฅํด๋๊ณ ์ ์ฅํด๋์ ์ ๋ณด๋ฅผ ๋ณต์์ํฌ ์ ์๋๋ก ํด์ฃผ๋ ํจํด์ด๋ค.
- "ํน์ ์์ "์ "๊ฐ์ฒด์ ์ํ" ๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด ๋ด๋ถ์ ์ํ๊ฐ ์ธ๋ถ์ ์จ์ ํ ๋
ธ์ถ๋์ด์ผํ์ง๋ง ๋ฉ๋ฉํ ํจํด์ ์ฌ์ฉํ๋ค๋ฉด ์บก์ํ ์ํ๋ฅผ ์งํค๋ฉด์ ๋ณต์์ํฌ ์ ์๋ค.
- ์ฆ, ๋ฉ๋ฉํ ํจํด์ ๋ด๋ถ ์ํ๋ฅผ ์ ๋ถ ์ธ๋ถ์ ๋
ธ์ถํ์ง ์์ผ๋ฉด์ ๊ฐ์ฒด ์ํ๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๋ค๊ฐ ํด๋น ์ํ๋ก ๋ค์ ๋ณต๊ตฌ์ํค๋๋ฐ ๋ชฉ์ ์ ๊ฐ์ง๋ค.
<ํด๋์ค ๋ค์ด์ด๊ทธ๋จ>
-
Originator : ์๋ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต์ํ๊ณ ์ถ์ดํ๋ ์ฆ, ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค ๋๋ ๊ฐ์ฒด
-
Memento : Originator์ ๋ด๋ถ ์ ๋ณด๋ฅผ ์ถ์ํ ํ ํด๋์ค ๋๋ ๊ฐ์ฒด
-
CareTaker : Originator์ ๋ด๋ถ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ ์ฅํ๊ณ ์ด ์ ๋ณด๋ก ๋ค์ ๋ณต์ํ ์ ์๋ ์ธ๋ถ ํด๋์ค
-> CareTaker๋ Originator์ ๋ํ
์ผํ ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ์๋๋ผ Originator์ ๋ด๋ถ ์ ๋ณด๋ฅผ Memento๋ผ๋ ํ์
์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.
-> ๋ฐ๋ผ์, Originator๋ ๋ ๊ฐ์ง ์คํผ๋ ์ด์
์ ์ ๊ณตํด์ผ ํ๋ค.
-
createMemento : Originator์ ๋ด๋ถ ์ ๋ณด๋ฅผ Memento ํด๋์ค๋ก ์ถ์ํํด์ ์์ฑ ๋ฐ ์ ๋ฌํ๋ ๋ฉ์๋
-
restore : ํน์ ํ Memento ์ ๋ณด๋ก ๋ณต์ํ๋ ๋ฉ์๋
- Client๋ฅผ CareTaker๋ผ๊ณ ๋ด๋ ๋๊ณ ๋ฐ๋ก ๋ง๋ค์ด๋ ๋๋ค. ์ด๋ฒ ์์ ์์๋ Client๋ฅผ CareTaker๋ผ๊ณ ๊ฐ์ ํ์.
๐ 02. Memento ํจํด ์์
01. Memento ํจํด ์ ์ฉ ์
- ๋จผ์ ํน์ ํ ์ํ๊ฐ์ ๊ฐ์ง๋ Game ๊ฐ์ฒด๋ฅผ ์ ์ธํ์.
- ๊ฐ์ฒด์ ์ํ๊ฐ์ ๊ณ์ ๋ณ๋๋๊ณ , ํน์ ํ ์์ ์ ์ธ๋ถ์ ์ ์ฅํด ๋์๋ค๊ฐ ๋ณต์์ํค๊ณ ์ ํ๋ค.
- ๋จ์ํ๊ฒ ๊ตฌํํ์๋ฉด ์ด๋ ๊ฒ ํน์ ์์ ์ ์ํ๊ฐ์ ์ธ๋ถ์ ์ ์ฅ์์ผฐ๋ค๊ฐ ๋ณต์์ํฌ ์ ์๋ค.
- ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ ํน์ ๊ฐ์ฒด์ ์ํ๊ฐ์ด ์ด๋ค๊ฑธ ๊ฐ์ง๊ณ ์๋์ง ์จ์ ํ ์ ๋ถ ์ธ๋ถ์ ๋
ธ์ถ๋๊ณ ์๋ค.
- ๊ฐ์ฒด ์ํ์ ๋ณด๋ฅผ ์๋ํ๊ธฐ ์ํด ์ ๊ทผ์ ์ด์๋ฅผ private ๋ก ์ฌ์ฉํ ์๋ฏธ๊ฐ ์์ด์ง๋ค.
02. Memento ํจํด ์ ์ฉ ํ
- ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด, ์ ์ฅํ๊ณ ์ ํ๋ ๊ฐ์ฒด์ ์ํ๊ฐ์ ์๊ณ ์๋ ๋ณ๋์ ๊ฐ์ฒด๋ก ๊ด๋ฆฌํ์.
- ๊ฒฐ๊ตญ ํด๋น๊ฐ์ฒด(Memento) ๊ฐ ์ ์ฅํ๊ณ ์ํ๋ ๊ฐ์ฒด (Origintor)์ ์ํ๋ฅผ ์๊ณ ์์ด์ผ ํ์ง๋ง
- ์ธ๋ถ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ฒด์ privateํ ์ํ๊ฐ์ ๋ถ๋ณํ๊ฒ ์๊ณ ์๋ ๋จ์ ์ ์ค์ผ ์ ์๋ค.
Memento ๊ฐ์ฒด
- ๋จ, ์ด๋ฌํ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๊ฐ์ฒด๋ ์จ์ ํ ๊ฐ
๋ถ๋ณ ๊ฐ์ฒด
๋ก์จ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด์๋ ์๋๋ค.
Origin ๊ฐ์ฒด
- ์๋ณธ ๊ฐ์ฒด์์ ํน์ ์ํ๊ฐ์ ์ ์ฅํ ์, Memento ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๐ 03. Memento ํจํด ์ฅ๋จ์
-
์บก์ํ๋ฅผ ์งํค๋ฉด์ ์ํ ๊ฐ์ฒด์ ์ํ ์ค๋
์ท์ ๋ง๋ค ์ ์๋ค.
-
๊ฐ์ฒด ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋๋ ๋ณต์ํ๋ ์ญํ ์ CareTaker(๋ณต์์ Memento ์ํ๋ฅผ ์ ์งํด์ฃผ๋ ๊ฐ์ฒด - ์์ ์์๋ ๊ตฌํํ์ง ์์)์๊ฒ ์์ํ ์ ์๋ค.
-
๊ฐ์ฒด ์ํ๊ฐ ๋ฐ๋์ด๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
-
Memento๋ฅผ ์์ฃผ ์์ฑํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ง์ ์ํฅ์ ์ค ์ ์๋ค.
-
๋ง์ฐฌ๊ฐ์ง๋ก, Origin ๊ฐ์ฒด์ ์ ์ฅํ ์ํ์ ๋ณด๊ฐ ์ปค์ Memento ๊ฐ์ฒด๊ฐ ์ปค์ง๋ฉด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน์ ์ ์๋ค.
๐ 04. Memento ์ฌ์ฉ ์์
-
Serializable
-> ๊ฐ์ฒด๋ฅผ byteStream์ผ๋ก ๋ณํ. (file๊ณผ ๊ฐ์ ํํ๋ก ์ ์ฅ ๊ฐ๋ฅ)
-> byteStream์ ๊ฐ์ฒด๋ก ๋ณํ. (file์ ๊ฐ์ฒด๋ก ๋ณํ ๊ฐ๋ฅ)
-
์ด๋ file์ด memento์ ๊ฐ์ ์ญํ ์ ํ๋ฉฐ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋์ง ์๊ณ ๋ memento ํจํด์ ๋ณด์ผ ์ ์๋ค.
-
์ ์ฝ์ฌํญ
- CareTaker์์ byteStream์ ์๊ณ ์์ด์ผ ํ๋ค.
- ์ง๋ ฌํ๋ฅผ Originator๊ฐ ์ง์ํด์ผ๋ง ๊ฐ๋ฅํ๋ค.
- ๋ณด์๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ์๋๋ฑ serialize์ ๊ด๋ จ๋ ๊ณต๋ถ๋ฅผ ๋ง์ด ํ๊ณ ์ฌ์ฉํ์.
์ฐธ๊ณ ์๋ฃ)
https://thalals.tistory.com/429 - ํ์ฐจ๊ฒ, ์ด์ฌํ ๊ณต๋์