Java

[JAVA] λ””μžμΈνŒ¨ν„΄ - State νŒ¨ν„΄

HHRR 2024. 1. 18. 18:11

State νŒ¨ν„΄

State νŒ¨ν„΄ μ†Œκ°œ

  • State νŒ¨ν„΄μ€ 객체의 μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κ³  ν•΄λ‹Ή μƒνƒœμ— 따라 객체의 행동을 λ³€κ²½ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€.
  • 이 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ 객체의 μƒνƒœ 전이λ₯Ό μΊ‘μŠν™”ν•˜κ³ , μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯이 μ‰¬μš΄ ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš© 이유

  • 객체가 μ—¬λŸ¬ μƒνƒœμ— 따라 λ‹€λ₯Έ 행동을 ν•΄μ•Ό ν•  λ•Œ State νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ μ½”λ“œ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ©° 가독성이 λ†’μ•„μ§‘λ‹ˆλ‹€.

μž₯점

  • μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ©λ‹ˆλ‹€.
  • 객체의 μƒνƒœ 전이λ₯Ό λͺ…ν™•ν•˜κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  • μƒνƒœ ν΄λž˜μŠ€κ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ 클래슀의 μˆ˜κ°€ λŠ˜μ–΄λ‚  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€ν† λ¦¬ : 은행 κ³„μ’Œ μƒνƒœ 관리

이 μ˜ˆμ œλŠ” 은행 κ³„μ’Œμ˜ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” νŒ¨ν„΄μ„ κ΅¬ν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€. κ³„μ’ŒλŠ” 두 가지 μƒνƒœλ₯Ό κ°€μ§‘λ‹ˆλ‹€.

  1. μ—΄λ¦° μƒνƒœ (Open State): μž…κΈˆκ³Ό 좜금이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  2. λ™κ²°λœ μƒνƒœ (Frozen State): μž…κΈˆκ³Ό 좜금이 λΆˆκ°€λŠ₯ν•˜λ©°, κ³„μ’Œ 확인과 μƒνƒœ λ³€κ²½λ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

State νŒ¨ν„΄ UML λ‹€μ΄μ–΄κ·Έλž¨

  • Context μΈν„°νŽ˜μ΄μŠ€: κ³„μ’Œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
    • setBalance(): κ³„μ’Œ μž”μ•‘ μ„€μ •
    • getBalance(): κ³„μ’Œ μž”μ•‘ 쑰회
    • checkBalance(): κ³„μ’Œ 확인
    • changeState(): κ³„μ’Œ μƒνƒœ λ³€κ²½
  • BankAccount 클래슀: Context μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ—¬ 은행 κ³„μ’Œλ₯Ό ν‘œν˜„ν•˜κ³  GUI둜 μƒνƒœ 관리λ₯Ό ν•©λ‹ˆλ‹€.
  • AccountStatus μΈν„°νŽ˜μ΄μŠ€: κ³„μ’Œμ˜ λ™μž‘μ„ μ •μ˜ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€.
    • deposit(): μž…κΈˆ
    • withdraw(): 좜금
    • verifyAccount(): κ³„μ’Œ 확인
    • freezeAccount(): κ³„μ’Œ 동결
  • OpenState 클래슀: "μ—΄λ¦° μƒνƒœ"λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μž…κΈˆ, 좜금, κ³„μ’Œ 확인, κ³„μ’Œ 동결 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.
  • FrozenState 클래슀: "λ™κ²°λœ μƒνƒœ"λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μž…κΈˆκ³Ό 좜금 λ©”μ†Œλ“œλŠ” λ™μž‘ν•˜μ§€ μ•ŠμœΌλ©°, κ³„μ’Œ 확인과 κ³„μ’Œ 동결 λ©”μ†Œλ“œλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

μ‹€ν–‰ κ²°κ³Ό

Frozen State

  • κ³„μ’Œκ°€ λ™κ²°λœ μƒνƒœμž…λ‹ˆλ‹€. Deposit와 Withdrawκ°€ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
  • VerifyAccount: κ³„μ’Œ μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • OpenAccount: κ³„μ’Œλ₯Ό μ—΄λ¦° μƒνƒœλ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Open State

  • κ³„μ’Œκ°€ μ—΄λ¦° μƒνƒœμž…λ‹ˆλ‹€. Deposit와 Withdrawκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • VerifyAccount: κ³„μ’Œ μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • FreezeAccount: κ³„μ’Œλ₯Ό 동결 μƒνƒœλ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

'Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JAVA] λ””μžμΈ νŒ¨ν„΄ - Visitor νŒ¨ν„΄  (0) 2024.01.18
[JAVA] λ””μžμΈνŒ¨ν„΄ - Proxy νŒ¨ν„΄  (0) 2024.01.18