μμ¦μ μλΈ νλ‘μ νΈλ₯Ό μ§ννλλΌ κ°λ°μΌμ§λ₯Ό μ μ¬λ¦¬μ§ λͺ»νμ΄.
μλΈ νλ‘μ νΈλ κΈ°νμ΄ μλ νλ‘μ νΈλΌ λ°λΉ μ μ¬κΈ° μ λ€μ΄μ€μ§ λͺ»νλλ°, μΌλ¨ μ¬μ κ° μκΈ°λ©΄ κ·Έκ±°μ λν κΈλ μ’ μ¨λ³Όκ».
μ€λ μμλ³Ό κ²μ μ ν μν λ¨Έμ μ΄μΌ.
λ΄κ° μ½ 1λ κ° μ½λ©μ νλ©΄μ μ¬μ©ν μ ν μν λ¨Έμ μ μ΄ 2κ°μ§ μ’ λ₯κ° μμλλ°, μ€λ λ μλ‘μ΄ λ°©λ²μ νλ μκ°νμ΄.
κ·Έλμ μ€λμ μ΄ 3κ°μ§ λͺ¨λΈμ λν΄ μκΈ°λ₯Ό μ’ νλ €κ³ ν΄.
λ¨Όμ λ΄κ° λ§λ€κ³ μΆμ νλ‘κ·Έλ¨μ μλμ κ°μ.
λ μ μΌλ‘ μ μ λ§λλ κ°λ¨ν νλ‘κ·Έλ¨μΈλ°, λ λ²μ§Έ μ μ λ§λ€ λ μ’ν΄λ¦μ νλ©΄ λ€μ 첫λ²μ§Έ μ μ μ ννλ λͺ¨λλ‘ λμκ°λ€λ κ² νΉμ§μ΄μΌ.
λ¨Όμ enumμ μ΄μ©ν FSM(μ ν μν λ¨Έμ , Finite State Machine)μ μ½λμΌ.
μλ§ λ§μ μ¬λλ€μ΄ FSMμ μ²μ 곡λΆν λ νλ²μ―€ λ³Έ μ μλ μ½λμΌ κ±°μΌ.
enumμ μ΄μ©ν FSMμ λ΄κ° μ΄λ€ μνμ μλμ§ enumμΌλ‘ μ ν΄ λ§€ κΈ°νλ§λ€ μνλ ν¨μλ₯Ό νΈμΆνλ λ°©μμ΄μΌ.
λλ μλλ μ΄λ° νμμ FSMμ μΌμ΄. κ·Έλ°λ° μ΄λ μκ°, κ΅³μ΄ ν¨μλ enum λ κ°λ₯Ό λ§λ€μ΄ κ΄λ¦¬ν μ΄μ°κ° μλ€κ³ λκΌμ΄.
enum νλκ° ν ν¨μμ λμλλ€λ©΄, κ΅³μ΄ enumμ μΈ μ΄μ κ° μλ κ±°μ§.
κ·Έλμ enumμ μμ κ³ λ§λ 2λ²μ§Έ FSMμ΄μΌ.
enumκ³Ό switchλ¬Έμ΄ μμ΄μ Έμ μ½λκ° ν¨μ¬ κΉ¨λν κ±Έ λ³Ό μ μμ΄.
μ΄ FSMμ switchλ¬Έμ ν΅ν΄ μ€νν ν¨μλ₯Ό μ νλ λμ , λͺ¨λ κΈ°νλ§λ€ λ리μλ₯Ό μ€ννκ³ κ° ν¨μλ λ€μμ μ€νν ν¨μλ₯Ό λ리μμ λ£λ νμμΌλ‘ μλν΄.
μ§λ 6κ°μκ° μ΄ FSMμ μ μ°κ³ μμμ΄.
κ·Έλ°λ° μκ°ν΄λ³΄λκΉ, μ΄ FSMμ μλ μ¬μ§κ³Ό κ°μ κ²½μ° λ€μ ν¨μλ₯Ό μ ν ν returnμΌλ‘ ν¨μ μ€νμ μ’ λ£μμΌ μ€μΌ μνλ λΆλΆμμ ν¨μλ₯Ό λλΌ μ μμ΄.
λ§μ½ μ returnλ¬Έμ λΉΌλ¨Ήμ΄λ²λ¦¬λ©΄ - μ μ½λμμλ λ¬Έμ κ° μμ§λ§ - μ½λκ° μνμ§ μλ λ°©ν₯μΌλ‘ νλ¬κ° μ μμ§.
λλ ν¨μλ₯Ό λλΌ λ μ΄ returnμ‘°μ°¨ μ°μ§ μκΈ°λ₯Ό λ°λ¬μ΄. μ¬μ€μ μ operation = Quit μ€κ³Ό return μ€μ΄ 'λ€μ μ€νν λ¬Έμ μ νκ³ ν¨μλ₯Ό μ’ λ£'νλ νλμ μν μ νκ³ μμ§λ§, μ½λλ λ μ€μ μ°¨μ§νκΈ° λλ¬Έμ 보기λ μ’μ§ μμ§.
κ·Έλμ λ§λ κ² μ΄ 3λ²μ§Έ FSMμ΄μΌ.
νλμ λ리μλ₯Ό κ³μ λλ €μ ν¨μλ₯Ό μ€ννλ ν° νμ λ²μ 2μ κ°μ§λ§, λ²μ 2κ° [λ€μμ μ€νν ν¨μλ₯Ό μ ν]νκ³ [ν¨μλ₯Ό μ’ λ£]νλ€λ©΄ λ²μ 3μ [λ€μμ μ€νν ν¨μλ₯Ό λ°ν]ν¨μΌλ‘μ¨ 2μ€μ΄μλ μ’ λ£ λ¬Έμ 1μ€λ‘ μ€μ΄λ λ° μ±κ³΅νμ΄.
μ΄λ κ² νλ©΄ λ€μμ μ€νν ν¨μλ₯Ό λͺ μνλ©° νλ¦μ λμμΌλ‘μ¨ ν¨μμ νλ¦μ λ³΄λ€ μ§κ΄μ μΌλ‘ μ μ΄ν μ μμ΄.
λ€μ κΈμ μλ§ μ²μμ λ§νλ μλΈ νλ‘μ νΈμ λν λ΄μ©μ΄ λ κ² κ°μ.
κ·ΈλΌ λ΄μ λ΄!
1λ μ½λ©νλλ° μ΄λ κ² μνλ€λ
μ¬κΈ° μ¬λλ€μ λΉνλ©΄ κ°μ΄λ³΄μ μ€...