μš”μ¦˜μ€ μ„œλΈŒ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠλΌ κ°œλ°œμΌμ§€λ₯Ό 잘 μ˜¬λ¦¬μ§€ λͺ»ν–ˆμ–΄.

μ„œλΈŒ ν”„λ‘œμ νŠΈλŠ” κΈ°ν•œμ΄ μžˆλŠ” ν”„λ‘œμ νŠΈλΌ λ°”λΉ μ„œ μ—¬κΈ° 잘 λ“€μ–΄μ˜€μ§ˆ λͺ»ν–ˆλŠ”λ°, 일단 μ—¬μœ κ°€ 생기면 그거에 λŒ€ν•œ 글도 μ’€ 써볼께.


였늘 μ•Œμ•„λ³Ό 것은 μœ ν•œ μƒνƒœ 머신이야.

λ‚΄κ°€ μ•½ 1λ…„κ°„ 코딩을 ν•˜λ©΄μ„œ μ‚¬μš©ν•œ μœ ν•œ μƒνƒœ 머신은 총 2κ°€μ§€ μ’…λ₯˜κ°€ μžˆμ—ˆλŠ”λ°, 였늘 또 μƒˆλ‘œμš΄ 방법을 ν•˜λ‚˜ μƒκ°ν–ˆμ–΄.

κ·Έλž˜μ„œ μ˜€λŠ˜μ€ 이 3κ°€μ§€ λͺ¨λΈμ— λŒ€ν•΄ μ–˜κΈ°λ₯Ό μ’€ ν•˜λ €κ³  ν•΄.


λ¨Όμ € λ‚΄κ°€ λ§Œλ“€κ³  싢은 ν”„λ‘œκ·Έλž¨μ€ μ•„λž˜μ™€ κ°™μ•„.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cbe012a98c29eb02b936cf83f1954dfd836914dd975bc38cdbb1ae1


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cfb57709dac9db020c1690427664c51e50d9af8f90250

두 점으둜 선을 λ§Œλ“œλŠ” κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μΈλ°, 두 번째 점을 λ§Œλ“€ λ•Œ μ’Œν΄λ¦­μ„ ν•˜λ©΄ λ‹€μ‹œ 첫번째 점을 μ„ νƒν•˜λŠ” λͺ¨λ“œλ‘œ λŒμ•„κ°„λ‹€λŠ” 게 νŠΉμ§•μ΄μ•Ό.



λ¨Όμ € enum을 μ΄μš©ν•œ FSM(μœ ν•œ μƒνƒœ λ¨Έμ‹ , Finite State Machine)의 μ½”λ“œμ•Ό.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cbe012a98c29eb02b936cf83f1954df836bc44a8522ef3bcd101100


μ•„λ§ˆ λ§Žμ€ μ‚¬λžŒλ“€μ΄ FSM을 처음 곡뢀할 λ•Œ ν•œλ²ˆμ―€ λ³Έ 적 μžˆλŠ” μ½”λ“œμΌ κ±°μ•Ό.

enum을 μ΄μš©ν•œ FSM은 λ‚΄κ°€ μ–΄λ–€ μƒνƒœμ— μžˆλŠ”μ§€ enum으둜 μ •ν•΄ λ§€ κΈ°νšŒλ§ˆλ‹€ μ›ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 방식이야.


λ‚˜λ„ μ›λž˜λŠ” 이런 ν˜•μ‹μ˜ FSM을 썼어. 그런데 μ–΄λŠ μˆœκ°„, ꡳ이 ν•¨μˆ˜λž‘ enum 두 개λ₯Ό λ§Œλ“€μ–΄ 관리할 μ΄μš°κ°€ μ—†λ‹€κ³  λŠκΌˆμ–΄.

enum ν•˜λ‚˜κ°€ ν•œ ν•¨μˆ˜μ— λŒ€μ‘λœλ‹€λ©΄, ꡳ이 enum을 μ“Έ μ΄μœ κ°€ μ—†λŠ” κ±°μ§€.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cbe012a98c29eb02b936cf83f1954df8662944cd425b76dcd994c12


κ·Έλž˜μ„œ enum을 μ—†μ• κ³  λ§Œλ“  2번째 FSM이야.

enumκ³Ό switch문이 μ—†μ–΄μ Έμ„œ μ½”λ“œκ°€ 훨씬 κΉ¨λ—ν•œ κ±Έ λ³Ό 수 μžˆμ–΄.

이 FSM은 switch문을 톡해 μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό μ •ν•˜λŠ” λŒ€μ‹ , λͺ¨λ“  κΈ°νšŒλ§ˆλ‹€ λŒ€λ¦¬μžλ₯Ό μ‹€ν–‰ν•˜κ³  각 ν•¨μˆ˜λŠ” λ‹€μŒμ— μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό λŒ€λ¦¬μžμ— λ„£λŠ” ν˜•μ‹μœΌλ‘œ μž‘λ™ν•΄.


μ§€λ‚œ 6κ°œμ›”κ°„ 이 FSM을 잘 μ“°κ³  μžˆμ—ˆμ–΄.

그런데 μƒκ°ν•΄λ³΄λ‹ˆκΉ, 이 FSM은 μ•„λž˜ 사진과 같은 경우 λ‹€μŒ ν•¨μˆ˜λ₯Ό μ •ν•œ ν›„ return으둜 ν•¨μˆ˜ 싀행을 μ’…λ£Œμ‹œμΌœ μ€˜μ•Ό μ›ν•˜λŠ” λΆ€λΆ„μ—μ„œ ν•¨μˆ˜λ₯Ό 끝낼 수 μžˆμ–΄.

λ§Œμ•½ μ € return문을 빼먹어버리면 - μœ„ μ½”λ“œμ—μ„œλŠ” λ¬Έμ œκ°€ μ—†μ§€λ§Œ - μ½”λ“œκ°€ μ›ν•˜μ§€ μ•ŠλŠ” λ°©ν–₯으둜 흘러갈 수 μžˆμ§€.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cbe012a98c29eb02b936cf83f1954df8262c518d774ea68cd3c7b6b


λ‚˜λŠ” ν•¨μˆ˜λ₯Ό 끝낼 λ•Œ 이 returnμ‘°μ°¨ μ“°μ§€ μ•ŠκΈ°λ₯Ό λ°”λž¬μ–΄. 사싀상 μ € operation = Quit 쀄과 return 쀄이 'λ‹€μŒ μ‹€ν–‰ν•  문을 μ •ν•˜κ³  ν•¨μˆ˜λ₯Ό μ’…λ£Œ'ν•˜λŠ” ν•˜λ‚˜μ˜ 역할을 ν•˜κ³  μžˆμ§€λ§Œ, μ½”λ“œλŠ” 두 쀄을 μ°¨μ§€ν•˜κΈ° λ•Œλ¬Έμ— 보기도 μ’‹μ§€ μ•Šμ§€.


κ·Έλž˜μ„œ λ§Œλ“  게 이 3번째 FSM이야.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb21930271cc4ce85ae38565d38d8a627083cbe012a98c29eb02b936cf83f1954df8367c31e8575bf3acd8ca3b4

ν•˜λ‚˜μ˜ λŒ€λ¦¬μžλ₯Ό 계속 λŒλ €μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 큰 틀은 버전 2와 κ°™μ§€λ§Œ, 버전 2κ°€ [λ‹€μŒμ— μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό 선택]ν•˜κ³  [ν•¨μˆ˜λ₯Ό μ’…λ£Œ]ν–ˆλ‹€λ©΄ 버전 3은 [λ‹€μŒμ— μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό λ°˜ν™˜]ν•¨μœΌλ‘œμ¨ 2μ€„μ΄μ—ˆλ˜ μ’…λ£Œ 문을 1μ€„λ‘œ μ€„μ΄λŠ” 데 μ„±κ³΅ν–ˆμ–΄.

μ΄λ ‡κ²Œ ν•˜λ©΄ λ‹€μŒμ— μ‹€ν–‰ν•  ν•¨μˆ˜λ₯Ό λͺ…μ‹œν•˜λ©° 흐름을 끊음으둜써 ν•¨μˆ˜μ˜ 흐름을 보닀 μ§κ΄€μ μœΌλ‘œ μ œμ–΄ν•  수 μžˆμ–΄.


λ‹€μŒ 글은 μ•„λ§ˆ μ²˜μŒμ— λ§ν–ˆλ˜ μ„œλΈŒ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ‚΄μš©μ΄ 될 것 κ°™μ•„.

그럼 담에 봐!