Memento Pattern

Memento Pattern (๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด)

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

์ด ๋•Œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ํ•œ ํด๋ž˜์Šค์— ์ €์žฅํ•œ๋‹ค๋ฉด, ๋‹ค์Œ์˜ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  1. ํด๋ž˜์Šค๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ ธ SRP๋ฅผ ์œ„๋ฐฐํ•˜๊ฒŒ ๋œ๋‹ค.

  2. ์ƒํƒœ ์ •๋ณด๋Š” ์ž์ฃผ ๋ณ€ํ™”ํ•œ๋‹ค. ์ด๋Š” ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์—๋„ ์ง€์†์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ด ๋ฐ”๋กœ ๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์ด๋‹ค.

๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์€ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. ์ด ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ Memento ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, Memento ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒ์„ฑ ๋ฐ ์ ‘๊ทผ ๊ถŒํ•œ์€ ์ƒํƒœ์˜ ์› ์†Œ์œ ์ž ํด๋ž˜์Šค๋งŒ์ด ๊ฐ€์ง„๋‹ค. ์ฆ‰, ์™ธ๋ถ€์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ํด๋ž˜์Šค๊ฐ€ ๋งˆ์น˜ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

๊ตฌ์„ฑ

Untitled
  • Originator - Memento ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํŠน์ • ์ƒํƒœ๋กœ ๋˜๋Œ์•„๊ฐ€๊ณ ์ž ํ•  ๋•Œ ์ด๋ฅผ ์ด์šฉํ•œ๋‹ค.

  • Memento - Originator ๊ฐ์ฒด์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • CareTaker - Memento ๊ฐ์ฒด๋“ค์„ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ, ๋‚ด๋ถ€ ์ •๋ณด(์ƒํƒœ) ์ ‘๊ทผ์€ ๋ถˆ๊ฐ€ํ•˜๋‹ค.

ํŠน์ง•

  • ๋ฉ”๋ฉ˜ํ† ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ๊ณ ์ž ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์€ SRP์ด๋‹ค. ์™ธ๋ถ€์—์„œ๋Š” ๋‘ ํด๋ž˜์Šค๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž„์—๋„ ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ด์œ ๋Š” ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋ง‰๊ณ  ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

  • ์ปค๋งจ๋“œ ํŒจํ„ด(Command Pattern)์—์„œ ๋˜๋Œ๋ฆฌ๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํŒจํ„ด์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐ˜๋ณต์ž ํŒจํ„ด(Iterator Pattern)์—์„œ Iterator์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํŒจํ„ด์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด๊ณผ ๋น„๊ตํ•ด๋ณด๋ฉด ์ข‹๋‹ค. ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด์€ ๊ณตํ†ต์  ๋ถ€๋ถ„์„ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋ผ๋ฉด, ๋ฉ”๋ฉ˜ํ†  ํŒจํ„ด์€ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ €์žฅ, ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

Last updated