Skip to content

Latest commit

Β 

History

History
31 lines (25 loc) Β· 1.86 KB

File metadata and controls

31 lines (25 loc) Β· 1.86 KB

State Pattern

state

  • 객체가 νŠΉμ • μƒνƒœμ— 따라 ν–‰μœ„λ₯Ό λ‹¬λ¦¬ν•˜λŠ” μƒν™©μ—μ„œ 객체 μžμ‹ μ΄ 직접 μƒνƒœλ₯Ό μ²΄ν¬ν•˜μ—¬ μƒνƒœμ— 따라 ν–‰μœ„λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•Šκ³  μƒνƒœλ₯Ό κ°μ²΄ν™”ν•˜μ—¬ μƒνƒœμ— λ§žλŠ” 행동을 ν•  수 μžˆλ„λ‘ μœ„μž„ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

κ΄€λ ¨ μš©μ–΄

state

  • μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.
  • 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹€μ²΄ν™”ν•œ μƒνƒœ 클래슀둜 κΈ°μ‘΄ μƒνƒœ 클래슀λ₯Ό λŒ€μ‹ ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλ‹€.

ConcreteState

  • Context 객체가 μš”μ²­ν•œ μž‘μ—…μ„ μžμ‹ μ˜ μƒνƒœμ— 맞게 κ΅¬ν˜„λœ λ°©μ‹λŒ€λ‘œ μ‹€ν–‰ν•œλ‹€.
  • 일반적으둜 λ‹€μŒ μƒνƒœλ₯Ό κ²°μ •ν•΄ μƒνƒœ 변경을 Context 객체에 μš”μ²­ν•˜λŠ” 역할도 μˆ˜ν–‰ν•œλ‹€.
  • 객체가 μ‹œμŠ€ν…œμ— μ‘΄μž¬ν•˜λŠ” λ™μ•ˆ 객체가 κ°€μ§ˆ 수 μžˆλŠ” μ–΄λ–€ μ‘°κ±΄μ΄λ‚˜ 상황을 μ˜λ―Έν•œλ‹€.

Context

  • μƒνƒœλ₯Ό μ΄μš©ν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€.
  • μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μƒνƒœ λ³€μˆ˜μ™€ μ‹€μ œ μ‹œμŠ€ν…œμ˜ μƒνƒœλ₯Ό κ΅¬μ„±ν•˜λŠ” μ—¬λŸ¬ κ°€μ§€ λ³€μˆ˜κ°€ μžˆλ‹€.
  • 각 μƒνƒœ ν΄λž˜μŠ€μ—μ„œ μƒνƒœ 변경을 μš”μ²­ν•΄ μƒνƒœλ₯Ό λ°”κΏ€ 수 μžˆλ„λ‘ ν•˜λŠ” ν•¨μˆ˜κ°€ μ œκ³΅λœλ‹€.
  • request ν•¨μˆ˜λŠ” μ‹€μ œ ν–‰μœ„λ₯Ό μ‹€ν–‰ν•˜λŠ” λŒ€μ‹  ν•΄λ‹Ή μƒνƒœ 객체에 ν–‰μœ„ 싀행을 μœ„μž„ν•œλ‹€.

νŠΉμ§•

  • 객체의 λ‚΄λΆ€ μƒνƒœμ— 따라 슀슀둜 행동을 λ³€κ²½ν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • μƒνƒœμ— λ§žλŠ” 행동듀이 μƒνƒœ 클래슀둜 λΆ„λ¦¬λ˜λ―€λ‘œ κ΅¬μ‘°ν™”λœ ν˜•νƒœλ‘œμ„œ 각 μƒνƒœλ“€μ„ 관리할 수 μžˆλ‹€.
  • μƒνƒœ νŒ¨ν„΄μ€ 주둜 쑰건문을 λŒ€μ²΄ν•˜λ €λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©λœλ‹€.
  • μƒνƒœ νŒ¨ν„΄λ„ κ΄€λ ¨ ν΄λž˜μŠ€κ°€ λ§Žμ•„μ§€λ©΄ λ³΅μž‘λ„κ°€ μ¦κ°€ν•œλ‹€.
  • μ½”λ“œκ°€ κ°„κ²°ν•΄μ§€κ³  가독성이 μ˜¬λΌκ°„λ‹€.
  • 각 μƒνƒœμ˜ 둜직 끝에 μƒνƒœ λ³€ν™˜μ„ μ§€μ‹œν•˜μ—¬ 슀슀둜 μƒνƒœλ₯Ό λ³€ν™˜ν•  수 μžˆλ‹€.

예제