๐Ÿ“Œ[๋””์ž์ธ ํŒจํ„ด] ๋ฉ”๋ฉ˜ํ†  (Memento)

๋ชจ๊น…ยท2023๋…„ 11์›” 5์ผ
1

๐Ÿ“– 00. Memento๋ž€?

์‚ฌ๋žŒ, ์‚ฌ๊ฑด ๋˜๋Š” ๊ฒฝํ—˜์„ ์ƒ๊ธฐ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฌผ๊ฑด์„ ๋งํ•œ๋‹ค.

๐Ÿ“– 01. Memento ํŒจํ„ด์ด๋ž€?

์บก์Šํ™”๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐ์ฒด ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์™ธ๋ถ€์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•.

  • ๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์ด๋ž€, ๊ฐ์ฒด์˜ ์ƒํƒœ์ •๋ณด๋ฅผ ๊ฐ€์ง€๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์ƒํƒœ๋ฅผ ์™ธ๋ถ€์— ์ €์žฅํ•ด๋†“๊ณ  ์ €์žฅํ•ด๋†“์€ ์ •๋ณด๋ฅผ ๋ณต์›์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค.
  • "ํŠน์ • ์‹œ์ "์˜ "๊ฐ์ฒด์˜ ์ƒํƒœ" ๋ฅผ ์™ธ๋ถ€์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์ƒํƒœ๊ฐ€ ์™ธ๋ถ€์— ์˜จ์ „ํžˆ ๋…ธ์ถœ๋˜์–ด์•ผํ•˜์ง€๋งŒ ๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์บก์Šํ™” ์ƒํƒœ๋ฅผ ์ง€ํ‚ค๋ฉด์„œ ๋ณต์›์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์€ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์ „๋ถ€ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์™ธ๋ถ€์— ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ํ•ด๋‹น ์ƒํƒœ๋กœ ๋‹ค์‹œ ๋ณต๊ตฌ์‹œํ‚ค๋Š”๋ฐ ๋ชฉ์ ์„ ๊ฐ€์ง„๋‹ค.

<ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ>

  • Originator : ์›๋ž˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ฆ‰, ์›๋ž˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด

  • Memento : Originator์˜ ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์ถ”์ƒํ™” ํ•œ ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด

  • CareTaker : Originator์˜ ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ €์žฅํ•˜๊ณ  ์ด ์ •๋ณด๋กœ ๋‹ค์‹œ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค

-> CareTaker๋Š” Originator์˜ ๋””ํ…Œ์ผํ•œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Originator์˜ ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ Memento๋ผ๋Š” ํƒ€์ž…์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

-> ๋”ฐ๋ผ์„œ, Originator๋Š” ๋‘ ๊ฐ€์ง€ ์˜คํผ๋ ˆ์ด์…˜์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

  1. createMemento : Originator์˜ ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ Memento ํด๋ž˜์Šค๋กœ ์ถ”์ƒํ™”ํ•ด์„œ ์ƒ์„ฑ ๋ฐ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ

  2. restore : ํŠน์ •ํ•œ Memento ์ •๋ณด๋กœ ๋ณต์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ

  • Client๋ฅผ CareTaker๋ผ๊ณ  ๋ด๋„ ๋˜๊ณ  ๋”ฐ๋กœ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค. ์ด๋ฒˆ ์˜ˆ์ œ์—์„œ๋Š” Client๋ฅผ CareTaker๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

๐Ÿ“– 02. Memento ํŒจํ„ด ์˜ˆ์‹œ

01. Memento ํŒจํ„ด ์ ์šฉ ์ „

  • ๋จผ์ € ํŠน์ •ํ•œ ์ƒํƒœ๊ฐ’์„ ๊ฐ€์ง€๋Š” Game ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜์ž.
  • ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ’์€ ๊ณ„์† ๋ณ€๋™๋˜๊ณ , ํŠน์ •ํ•œ ์‹œ์ ์„ ์™ธ๋ถ€์— ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋ณต์›์‹œํ‚ค๊ณ ์ž ํ•œ๋‹ค.
  • ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ž๋ฉด ์ด๋ ‡๊ฒŒ ํŠน์ • ์‹œ์ ์˜ ์ƒํƒœ๊ฐ’์„ ์™ธ๋ถ€์— ์ €์žฅ์‹œ์ผฐ๋‹ค๊ฐ€ ๋ณต์›์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ํŠน์ • ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ’์ด ์–ด๋–ค๊ฑธ ๊ฐ€์ง€๊ณ ์žˆ๋Š”์ง€ ์˜จ์ „ํžˆ ์ „๋ถ€ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๊ณ  ์žˆ๋‹ค.
  • ๊ฐ์ฒด ์ƒํƒœ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๊ธฐ ์œ„ํ•ด ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ private ๋กœ ์‚ฌ์šฉํ•œ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค.

02. Memento ํŒจํ„ด ์ ์šฉ ํ›„

  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ’์„ ์•Œ๊ณ ์žˆ๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜์ž.
  • ๊ฒฐ๊ตญ ํ•ด๋‹น๊ฐ์ฒด(Memento) ๊ฐ€ ์ €์žฅํ•˜๊ณ ์žํ•˜๋Š” ๊ฐ์ฒด (Origintor)์˜ ์ƒํƒœ๋ฅผ ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ
  • ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ์ฒด์˜ privateํ•œ ์ƒํƒœ๊ฐ’์„ ๋ถ„๋ณ„ํ•˜๊ฒŒ ์•Œ๊ณ ์žˆ๋Š” ๋‹จ์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

Memento ๊ฐ์ฒด

  • ๋‹จ, ์ด๋Ÿฌํ•œ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋Š” ์˜จ์ „ํ•œ ๊ฐ’ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ์จ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

Origin ๊ฐ์ฒด

  • ์›๋ณธ ๊ฐ์ฒด์—์„œ ํŠน์ • ์ƒํƒœ๊ฐ’์„ ์ €์žฅํ•  ์‹œ, Memento ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


๐Ÿ“– 03. Memento ํŒจํ„ด ์žฅ๋‹จ์ 

  • ์žฅ์ 
  1. ์บก์Šํ™”๋ฅผ ์ง€ํ‚ค๋ฉด์„œ ์ƒํƒœ ๊ฐ์ฒด์˜ ์ƒํƒœ ์Šค๋ƒ…์ƒท์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  2. ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋˜๋Š” ๋ณต์›ํ•˜๋Š” ์—ญํ• ์„ CareTaker(๋ณต์ˆ˜์˜ Memento ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์ฃผ๋Š” ๊ฐ์ฒด - ์˜ˆ์ œ์—์„œ๋Š” ๊ตฌํ˜„ํ•˜์ง€ ์•Š์Œ)์—๊ฒŒ ์œ„์ž„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ๊ฐ์ฒด ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋‹จ์ 
  1. Memento๋ฅผ ์ž์ฃผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋งŽ์€ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

  2. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, Origin ๊ฐ์ฒด์˜ ์ €์žฅํ•  ์ƒํƒœ์ •๋ณด๊ฐ€ ์ปค์„œ Memento ๊ฐ์ฒด๊ฐ€ ์ปค์ง€๋ฉด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„๋จน์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– 04. Memento ์‚ฌ์šฉ ์˜ˆ์‹œ

  • Serializable
    -> ๊ฐ์ฒด๋ฅผ byteStream์œผ๋กœ ๋ณ€ํ™˜. (file๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ €์žฅ ๊ฐ€๋Šฅ)
    -> byteStream์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜. (file์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ)

  • ์ด๋•Œ file์ด memento์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋ฉฐ ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋‘์ง€ ์•Š๊ณ ๋„ memento ํŒจํ„ด์„ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์ œ์•ฝ์‚ฌํ•ญ

  1. CareTaker์—์„œ byteStream์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ์ง๋ ฌํ™”๋ฅผ Originator๊ฐ€ ์ง€์›ํ•ด์•ผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  3. ๋ณด์•ˆ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  4. ์†๋„๋“ฑ serialize์™€ ๊ด€๋ จ๋œ ๊ณต๋ถ€๋ฅผ ๋งŽ์ด ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ž.





์ฐธ๊ณ  ์ž๋ฃŒ)
https://thalals.tistory.com/429 - ํž˜์ฐจ๊ฒŒ, ์—ด์‹ฌํžˆ ๊ณต๋Œ€์ƒ

profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€