Memento Pattern

Memento Pattern (λ©”λ©˜ν†  νŒ¨ν„΄)

μ–΄λ–€ ν”„λ‘œκ·Έλž¨λ“€μ—μ„œλŠ” 객체가 μƒνƒœλ₯Ό κ°€μ§€λ©°, ν”„λ‘œκ·Έλž¨μ΄ μˆ˜ν–‰λ˜λ©° 객체의 μƒνƒœκ°€ 계속 λ³€ν™”ν•˜κ³ , 이전 μƒνƒœλ‘œμ˜ 볡원을 μœ„ν•΄ 이 μƒνƒœ 정보λ₯Ό μ €μž₯ν•΄μ•Ό ν•  μˆ˜λ„ μžˆλ‹€. 주둜 κ²Œμž„ ν”„λ‘œκ·Έλž¨ 등이 κ·ΈλŸ¬ν•˜λ‹€.

이 λ•Œ μƒνƒœ 정보λ₯Ό λ‹€λ₯Έ 데이터와 ν•¨κ»˜ ν•œ ν΄λž˜μŠ€μ— μ €μž₯ν•œλ‹€λ©΄, λ‹€μŒμ˜ 문제점이 λ°œμƒν•œλ‹€.

  1. ν΄λž˜μŠ€κ°€ κ±°λŒ€ν•΄μ Έ SRPλ₯Ό μœ„λ°°ν•˜κ²Œ λœλ‹€.

  2. μƒνƒœ μ •λ³΄λŠ” 자주 λ³€ν™”ν•œλ‹€. μ΄λŠ” λ³€ν™”ν•˜μ§€ μ•ŠλŠ” 데이터에도 μ§€μ†μ μœΌλ‘œ 영ν–₯을 미치게 λœλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ νŒ¨ν„΄μ΄ λ°”λ‘œ λ©”λ©˜ν†  νŒ¨ν„΄μ΄λ‹€.

λ©”λ©˜ν†  νŒ¨ν„΄μ€ μƒνƒœ 정보λ₯Ό λ³„λ„μ˜ 클래슀둜 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€. 이 ν΄λž˜μŠ€λ‘œλΆ€ν„° μƒμ„±λœ 객체λ₯Ό Memento 객체라고 λΆ€λ₯΄λ©°, Memento 객체에 λŒ€ν•œ 생성 및 μ ‘κ·Ό κΆŒν•œμ€ μƒνƒœμ˜ 원 μ†Œμœ μž 클래슀만이 κ°€μ§„λ‹€. 즉, μ™ΈλΆ€μ—μ„œλŠ” 두 κ°€μ§€ ν΄λž˜μŠ€κ°€ 마치 ν•˜λ‚˜μ˜ 클래슀인 κ²ƒμ²˜λŸΌ λ™μž‘ν•œλ‹€.

ꡬ성

Untitled
  • Originator - Memento 객체λ₯Ό μƒμ„±ν•˜κ³ , νŠΉμ • μƒνƒœλ‘œ λ˜λŒμ•„κ°€κ³ μž ν•  λ•Œ 이λ₯Ό μ΄μš©ν•œλ‹€.

  • Memento - Originator 객체의 μƒνƒœ 정보λ₯Ό μ €μž₯ν•œλ‹€.

  • CareTaker - Memento 객체듀을 λ³΄κ΄€ν•˜κ±°λ‚˜ 관리할 수 μžˆλ‹€. 생성, λ‚΄λΆ€ 정보(μƒνƒœ) 접근은 λΆˆκ°€ν•˜λ‹€.

νŠΉμ§•

  • λ©”λ©˜ν† λ₯Ό 톡해 이루고자 ν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ 원칙은 SRP이닀. μ™ΈλΆ€μ—μ„œλŠ” 두 ν΄λž˜μŠ€κ°€ ν•˜λ‚˜μΈ κ²ƒμ²˜λŸΌ λ³΄μž„μ—λ„ μ΄λ ‡κ²Œ 클래슀λ₯Ό λΆ„λ¦¬ν•˜λŠ” μ΄μœ λŠ” μ±…μž„μ„ λΆ„λ¦¬ν•˜μ—¬ λΆˆν•„μš”ν•œ μ½”λ“œ 변경을 막고 μ½”λ“œ 가독성을 높이기 μœ„ν•¨μ΄λ‹€.

  • μ»€λ§¨λ“œ νŒ¨ν„΄(Command Pattern)μ—μ„œ 되돌리기 연산을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή νŒ¨ν„΄μ„ μ΄μš©ν•  수 μžˆλ‹€.

  • 반볡자 νŒ¨ν„΄(Iterator Pattern)μ—μ„œ Iterator의 μƒνƒœ 정보λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ ν•΄λ‹Ή νŒ¨ν„΄μ„ μ΄μš©ν•  수 μžˆλ‹€.

  • ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄κ³Ό 비ꡐ해보면 μ’‹λ‹€. ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄μ€ 곡톡적 뢀뢄을 κ΄€λ¦¬ν•˜λŠ” 클래슀λ₯Ό λ³„λ„λ‘œ λΆ„λ¦¬ν•˜μ—¬ μ€‘λ³΅λœ 데이터λ₯Ό 쀄여 λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 쀄이기 μœ„ν•¨μ΄λΌλ©΄, λ©”λ©˜ν†  νŒ¨ν„΄μ€ μƒνƒœ 정보λ₯Ό λ³„λ„λ‘œ λΆ„λ¦¬ν•˜μ—¬ λ„ˆλ¬΄ λ§Žμ€ μ±…μž„μ„ λΆ„λ¦¬ν•˜κ³  μƒνƒœλ₯Ό μ €μž₯, μΆ”μ ν•˜κΈ° μœ„ν•¨μ΄λ‹€.

Last updated