4์ฃผ ๋์ NextStep์ Effective Kotlin 1๊ธฐ ๊ณผ์ ์ ์ฐธ์ฌํ์ฌ
4๊ฐ์ง ๊ฒ์์ ๋๋ฉ์ธ ๋ก์ง์ ๊ตฌํํ์์ต๋๋ค.
์ฌ๊ธฐ์์๋ TDD๋ฅผ ํ์ฉํ์ฌ, ๋ธ๋์ญ ๊ฒ์ ๋๋ฉ์ธ ๋ก์ง์ ๊ตฌํํ์์ต๋๋ค.
์งํ ๋ฐฉ์:
next-step
์ ๋น์ด์๋๊ฒ์ Repository
๋ฅผFork
ํ๊ณ ,
์๊ฐ์ ๊ฐ์์ ๋ก์ปฌ์์ ๋ก์ง์ ๊ตฌํํ ํPull Request
->Review
->Merge
ํ๋ ๋ฐฉ์์ผ๋ก ๊ณผ์ ์ ์งํํ์์ต๋๋ค.
๋ธ๋์ญ ๊ฒ์์ ๊ฒฝ์ฐ, step4
๋ธ๋์น์์ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- Main Source Code: blackjack-mvc
- Test Code (JUnit 5): blackjack-test
- ์นด๋์ ์ซ์ ๊ณ์ฐ์ ์นด๋ ์ซ์๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ฉฐ, ์์ธ๋ก
Ace๋ 1 ๋๋ 11๋ก ๊ณ์ฐ
ํ ์ ์์ผ๋ฉฐ,King, Queen, Jack์ ๊ฐ๊ฐ 10์ผ๋ก ๊ณ์ฐ
ํ๋ค. - ๊ฒ์์ ์์ํ๋ฉด ์ฐธ๊ฐ์๋ ๋ ์ฅ์ ์นด๋๋ฅผ ์ง๊ธ ๋ฐ์ผ๋ฉฐ, ๋ ์ฅ์ ์นด๋ ์ซ์๋ฅผ ํฉ์ณ
21์ ์ด๊ณผํ์ง ์์ผ๋ฉด์ 21์ ๊ฐ๊น๊ฒ ๋ง๋ค๋ฉด ์ด๊ธด๋ค
- 21์ ๋์ง ์์ ๊ฒฝ์ฐ, ์ฐธ๊ฐ์๋ ์ผ๋ง๋ ์ง ์นด๋๋ฅผ ๊ณ์ ๋ฝ์ ์ ์๋ค
- ๋๋ฌ๋ ์ฒ์์ ๋ฐ์ 2์ฅ์ ํฉ๊ณ๊ฐ 16์ดํ์ด๋ฉด ๋ฐ๋์ 1์ฅ์ ์นด๋๋ฅผ ์ถ๊ฐ๋ก ๋ฐ์์ผ ํ๊ณ , 17์ ์ด์์ด๋ฉด ์ถ๊ฐ๋ก ๋ฐ์ ์ ์๋ค
Bust
๋ ์นด๋ ์ ์ ํฉ๊ณ๊ฐ21์ ๋์ ๊ฒฝ์ฐ
๋ฅผ ๋งํ๋คBlackJack
์์ฒ์ 2์ฅ
์ ์นด๋ ์ ์ํฉ๊ณ๊ฐ 21์ธ ๊ฒฝ์ฐ
๋ฅผ ๋งํ๋ค
- ์ฐธ๊ฐ์๋ค์ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ๋๋ค (์ผํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌ)
- ์ฐธ๊ฐ์๋ค์ ๋ฒ ํ ๊ธ์ก์ ์ ๋ ฅ๋ฐ๋๋ค
- ์ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ฒ์์ ์์ฑํ๋ค
-
๋๋ฌ๋ ์นด๋ 2์ฅ์ ๋ฝ๋๋ค
๋ ์ฅ ์ค ์นด๋ ํ ์ฅ์ ์ถ๋ ฅํ๋ค
๋ ์ฅ์ ํฉ๊ณ๊ฐ 21์ด๋ฉด ์ํ(Status)๋ฅผBlackJack
์ผ๋ก ํ๋ค (๊ทธ๋ ์ง ์์ผ๋ฉดHit
) -
์ฐธ๊ฐ์๋ค์ ์นด๋ 2์ฅ์ฉ ๋ฐ๋๋ค
๋ณด์ ์ค์ธ ์นด๋๋ฅผ ์ถ๋ ฅํ๋ค
์ ์๊ฐ 21์ด๋ฉด ์ํ(Status)๋ฅผBlackJack
์ผ๋ก ํ๋ค (๊ทธ๋ ์ง ์์ผ๋ฉดHit
)
-
๊ฐ ์ฐธ๊ฐ์์๊ฒ ์นด๋ ํ ์ฅ์ ๋ ๋ฐ์ ๊ฑด์ง ๋ฌป๊ณ , ๋๋ต์ ์ ๋ ฅ๋ฐ๋๋ค (์๋
y
, ์๋์ค๋n
)y
์ด๋ฉด ์นด๋ ํ ์ฅ์ ๋ฐ๋๋ค- ์ ์๊ฐ 21์ ๋์ผ๋ฉด ์ํ๋ฅผ
Bust
๋ก ํ๋ค - ์ ํํ 21์ด๋ฉด
Stay
๋ก ํ๋ค - 21๋ณด๋ค ๋ฎ์ผ๋ฉด
Hit
์ผ๋ก ํ๋ค - ๋ณด์ ์ค์ธ ์นด๋๋ฅผ ์ถ๋ ฅํ๋ค
- ์ ์๊ฐ 21์ ๋์ผ๋ฉด ์ํ๋ฅผ
n
์ด๋ฉด ์นด๋๋ฅผ ๋ฐ์ง ์๋๋ค- ํ์ฌ ์ํ๊ฐ
BlackJack
,Bust
๋ฉด ๊ทธ๋๋ก ์ ์งํ๊ณ ,Hit
์ด๋ฉดStay
๋ก ๋ฐ๊พผ๋ค - ์ฒ์ ๋๋ ์ค ์นด๋ 2์ฅ๋ง ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ, ๋ณด์ ์ค์ธ ์นด๋๋ฅผ ํ ๋ฒ ๋ ์ถ๋ ฅํ๋ค
- ํ์ฌ ์ํ๊ฐ
-
์ ์๊ฐ 17 ์ด์์ด ๋ ๋๊น์ง ์นด๋๋ฅผ ํ ์ฅ์ฉ ์๋ก ๋ฝ๋๋ค
์ ์๊ฐ 21์ ๋์ผ๋ฉด ์ํ๋ฅผ
Bust
๋ก ํ๋ค -
๋๋ฌ ์์ต ๊ณ์ฐ
-
์ฐธ๊ฐ์๊ฐ ๋๋ฌ ์ ์๋ณด๋ค ๋์ผ๋ฉด, ๋ฒ ํ ํ ๊ธ์ก๋งํผ ์ป๋๋ค
-
์ฐธ๊ฐ์๊ฐ
BlackJack
์ด๋ฉด ๋ฒ ํ ๊ธ์ก์ 1.5 ๋ฐฐ๋ฅผ ๋ฐ๋๋ค -
๋๋ฌ์ ์ฐธ๊ฐ์ ๋ชจ๋
BlackJack
์ด๋ฉด ์ฐธ๊ฐ์๋ ๋ฒ ํ ํ ๊ธ์ก์ ๋๋ ค๋ฐ๋๋ค -
์ฐธ๊ฐ์๊ฐ ๋๋ฌ ์ ์๋ณด๋ค ๋ฎ๊ฑฐ๋,
Bust
์ด๋ฉด ๋ฒ ํ ๊ธ์ก์ ๋ชจ๋ ์๋๋ค -
๋๋ฌ๊ฐ
Bust
์ด๋ฉด ๊ทธ ์์ ๊น์ง ๋จ์ ์๋ ์ฐธ๊ฐ์๋ค์ ๊ฐ์ง๊ณ ์๋ ํจ์ ์๊ด ์์ด ์น๋ฆฌํด ๋ฒ ํ ๊ธ์ก์ ๋ฐ๋๋ค
-
- ๋๋ฌ์ ์ฐธ๊ฐ์๋ค์ ์นด๋์ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค
- ๋๋ฌ์ ์ฐธ๊ฐ์๋ค์ ์ต์ข ์์ต์ ์ถ๋ ฅํ๋ค
๋ฐฐ์ด ๋ด์ฉ์ ๊ดํด์๋,
๋ฌด์๋ณด๋ค TDD, Clean Code, ๊ทธ๋ฆฌ๊ณ OOP ๋ด์ฉ์ด ๋ง์ด ์๊ฐ๋ฉ๋๋ค.
์ด ๋ถ๋ถ์ ์์
์ด๋ ๋ฆฌ๋ทฐ ๋๋ง๋ค ๊ณ์ ๊ฐ์กฐํ์
์
๋๋ฆ.. ๋ง์ด ์ ๊ฒฝ์ฐ๋ฉด์ ์์
ํ์ต๋๋ค.
4๋ฒ์ ์์
์ด ์ด๋ณด์์๊ฒ๋ ํฑ์์ด ๋ถ์กฑํ ์๊ฐ์ด์์ง๋ง,,
์ง์์ด ์ ๋ฌดํ์ ๋๋ณด๋ค๋ ์ฑ์ฅํ๋ค๊ณ ๋งํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ผ์๋,
TDD์ OOP๋ง ๋๊ณ ๋ณธ๋ค๋ฉด ์์งํ ์ฑ์ฅํ๋ค๊ณ ๋งํ๊ธฐ๋ ์ข ๊ทธ๋ ๋ค์ใ
ใ
ํนํ ๋ง์ง๋ง ์์
์์ ์ํ ํจํด์ ๋ฐฐ์ ์ ๋,
๋ด๊ฐ ์๋ OOP๊ฐ ์ผ๋ง๋ ์ด๋ณด์ ์ด์๋์ง ์์ผ ๊นจ๋ฌ์์ต๋๋ค,,
๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก ๊ธฐ์ต์ ๋จ๋ ๊ฑด
์๋ ์์น๋ค์
๋๋ค.
-
README ํ์ผ ์์ฑํ๊ธฐ (๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฑ ํ ์ด๋ฅผ ๊ตฌํํ๊ธฐ)
-
ํต์ฌ ๋ก์ง๊ณผ UI ๋ก์ง ๋ถ๋ฆฌํ๊ธฐ
-
TDD (Red-Green-Refactoring) / ๋จ์ ํ ์คํธ ๋ง๋ค๊ธฐ
-
๊ฐ๋ ์ฑ์ด ์ข์ ๋ณ์ ์ด๋ฆ, ํจ์ ์ด๋ฆ, ์ฝ๋ ์์ฑํ๊ธฐ
-
ํจ์์ ๋ค์ฌ์ฐ๊ธฐ ๊ท์น ์งํค๊ธฐ
-
if/else ์ค๋ณต ์ ๊ฑฐํ๊ธฐ
-
๊ฐ์ฒด์ ์ํ๋ฅผ ๊บผ๋ด์ง ๋ง๊ณ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ
-
ํ์ํ๋ค๋ฉด ์์ ๊ตฌํํ๊ธฐ
-
๋ถ๋ณ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
-
์ผ๊ธ ์ปฌ๋ ์ ๋ง๋ค๊ธฐ (์ด ๋ถ๋ถ์ ์์ง ์ข ์ด๋ ต๋ค์..)
-
๋ฑ๋ฑ ...
์ฌ๊ธฐ์ ๋ํ์๋ฉด,
์กฐ๊ธ ๋ Kotlin์ค๋ฌ์ด ์ฝ๋ฉ ์คํ์ผ
-
data class ์ด์ฉ
-
๋๋ค์๊ณผ ํ๋กํผํฐ ์ด์ฉ
-
์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ
-
null์ ์ด์ฉํ ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์ด ๋ ์ ์๊ฒ ๋ค์.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก
git, slack๊ณผ ๋ ์นํด์ง ๊ฒ๊น์ง!
์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๋ ์ ๊ฐ ์ด๊ฒ๋ค์ ์งํค๊ณ ํ์ฉํด๋ดค๋ค๋ฉด
๊ทธ๊ฒ ์์ฒด๋ก๋ ํ์ธต ๋ ์ฑ์ฅํ ๊ฒ ์๋๊น์!
๋ฌผ๋ก ์ด์ธ์๋ ์ ๋ง ์ป์ด๊ฐ๋ ๊ฒ ๋ง์ ์์
์ด์์ต๋๋ค.
์์ผ๋ก ์ฌํ ๊ณผ์ ์ด ์ด๋ฆฐ๋ค๋ฉด ๊ผญ ์ฐธ์ฌํ๊ณ ์ถ์ต๋๋ค!!
์ฒ์์๋ ๊ณผ์ ์ด ์ฌ์ง์ ๋์์ด์๊ณ , ๋ฏ์ ์ธ์ด์ธ ์ฝํ๋ฆฐ์ผ๋ก ์งํ๋์๊ธฐ ๋๋ฌธ์,
๋ ๊ฐ์ง ์กฐ๊ฑด์์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์๋ ์ ๋ ์๊ฐ์๋ค๊ณผ์ ๊ฒฉ์ฐจ๊ฐ ๊ฑฑ์ ๋์์ต๋๋ค.
ํ์ง๋ง ํ์ง์์ ํผ๋๋ฐฑ์ ๊ผญ ๋ฃ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ๊ฐ์๋ฅผ ํฌ๊ธฐํ๋ ๋์ ์ฝํ๋ฆฐ ์ ํํ์ต์ ์์ํ์ต๋๋ค.
์ด๊ธฐ์๋ ์ฑ
๊ณผ ์ ํ๋ธ๋ฅผ ๋ณด๋ฉฐ ๊ณ์ฐ๊ธฐ ์ดํ ๋ฑ์ ๋ง๋ค์ด๋ณด์๊ณ ,
์ฌ๊ธฐ์ ์ป์ ๋ง์กฑ๊ฐ์ผ๋ก ๊ณ์ ๋๊ธฐ ๋ถ์ฌ๋ฅผ ์ป์์ต๋๋ค.
์ดํ ๋์ฑ ํ์ต์ ๋ชฐ์
ํด 'Udacity' ๋ฑ ์จ๋ผ์ธ ๊ฐ์๋ฅผ ์๊ฐํ์ต๋๋ค.
์ฝํ๋ฆฐ์ ๋ฌธ๋ฒ์ ์ตํ๊ณ ์๋ฐ์ ๋น๊ตํ๋ ๊ณผ์ ์ด ์ฌ๋ฐ์๊ณ ,
์ด๋ฌํ ๊ฒฝํ์ ๋ณธ๊ฒฉ์ ์ธ ๊ณผ์ ์ ์์ํ๊ธฐ ์ ์์ ๊ฐ์ ๊ฐ๊ฒ ํด์ฃผ์์ต๋๋ค.
๊ณผ์ ์ ์์ํ ์ดํ์๋ ์ฑ
'Kotlin In Action'๋ ์กฐ๊ธ์ฉ ์ฐธ๊ณ ํ์ต๋๋ค.
data class๋ null-safety ๋ฑ ์ฝํ๋ฆฐ์ ๋ํ ์ง์์ ๋ํ๊ณ , ๊ตฌํํ ์ฝ๋์ ์ด๋ฅผ ์ ์ฉํ์ต๋๋ค.
ํ ๋ฒ์ ์ด๋ ๊ฒ ์ฑ
์ ์ฐธ๊ณ ํด ์ฝ๋๋ฅผ ์์ ํ๋๋ฐ, ๋ฆฌ๋ทฐ์ด๋์ด ๋ก์ง์ ์ ๋ฆฌํฉํ ๋งํ๋ค๋ ์นญ์ฐฌ์ ํด์ฃผ์์ต๋๋ค.
ํ์ง์๋ก๋ถํฐ ์นญ์ฐฌ์ ๋ค์์ ๋ ๋ค๋ฅธ ์ด๋ ๋๋ณด๋ค ๋ฟ๋ฏํ๊ณ , ํจ์ฌ ๊ฐ๋ ฅํ ์ฑ์ทจ๊ฐ์ ๋๋ ์ ์์์ต๋๋ค.
์ฒ์์๋ ๊ฒฝํ๊ณผ ์ค๋ ฅ์ด ํ์ฐธ ๋ถ์กฑํ๋ค๋ ์๊ฐ์, ์ฌ์ค ๋ง์ด ๋๋ ค์ ์ต๋๋ค.
ํ์ง๋ง ๊ณผ์ ์ ๊ผญ ์๋ฃํด์ผ๊ฒ ๋ค๋ ์์ง๊ฐ ์์๊ธฐ ๋๋ฌธ์,
์ด๋ค ์๋ฆฌ(๋ฒ์ค, ์งํ์ฒ )๊ฐ ๋์๋ , ์ด๋ค ์๊ฐ์ด ๋์๋ ์ฝ๋ฉ์ ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ ๋ชจ๋ ๋ฏธ์
์ ํต๊ณผํ์์ต๋๋ค.
๋ค ์ฌ๋์ด ํ๋ ์ผ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ ์ผ์ ์๋ค๋ ๊ฒ, ์ด๋ฒ์ ๊ณ๊ธฐ๋ก ๋ชธ์ ๋ฐฐ์ฐ๊ณ ๋๊ผ์ต๋๋ค.