4์ ์ด๋ถํฐ NEXTSTEP์์ ์งํํ๋ TDD, ํด๋ฆฐ ์ฝ๋ with Java ๊ณผ์ ์ ๋ฃ๊ณ ์์ต๋๋ค.
์๋ ๋ถํฐ ๊ณ์ ๋ค์ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค๊ฐ ์ฌํด ๋ฃ๊ฒ ๋์๋๋ฐ, ๋ง์นจ ๋น์ทํ ์๊ธฐ์ ๋ฒ์์์ด ์๋ฒ๋ ค์.. ๐ญ ์ฒซ ๋ฒ์งธ ๋ฏธ์ ๋ ๊ต์ฅํ ์ค๋ ๊ฑธ๋ ธ๋ค์. ๐ญ๐ญ
๊ต์ก์์ ์งํํ ๋ฏธ์ ๋ค์ ํ ๋๋ก ๋ฐฐ์ด ๋ด์ฉ ๋ฐ ํผ๋๋ฐฑ์ ๋ํด ์ ๋ฆฌํด ๋ณด๊ณ ์ ํฉ๋๋ค.
(ํน์ ๋ค๋ฅด๊ฒ ์๊ฐํ์๋ ํฌ์ธํธ๊ฐ ์กด์ฌํ๋ค๋ฉด, ๋ง์ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐)
์ฒซ ๋ฒ์งธ ๋ฏธ์ ์ธ ์๋์ฐจ ๊ฒฝ์ฃผ - ๋จ์ ํ ์คํธ์๋ ์ด 5๊ฐ์ ๋ฏธ์ ์ด ์กด์ฌํ๊ณ , ๊ฐ ๋ฏธ์ ๋ง๋ค ์ฝ๋๋ฅผ ์์ฑํ์ฌ PR์ ๋ณด๋ด๋ฉด ๋ฆฌ๋ทฐ์ด๊ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํด์ฃผ๋ ์์ผ๋ก ์งํ์ด ๋๋๋ฐ์, ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ ์ํํ๋ฉฐ ๋ฐ์๋ ๋ฆฌ๋ทฐ ๋ฐ ์๋ก ์๊ฒ ๋ ๋ด์ฉ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๋จ๊ณ - ํ์ต ํ ์คํธ ์ค์ต
1๋จ๊ณ ๋ฏธ์ ์ String, Collection(Set)์ ํด๋์ค์์ ํน์ ํจ์์ ๋ํด ๊ตฌํํ๊ณ ๋จ์ ํ ์คํธ๋ฅผ ํ์ตํ๋ ๋ฏธ์ ์ ๋๋ค.
JUnit - containsExactly()
ํ ์คํธ ์ฝ๋์์ 2๊ฐ์ ์์๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ฆํ ๋ size๋ ์ธ๋ฑ์ค์ ๊ฐ์ ์ฌ์ฉํ์๋๋ฐ,
containsExactly() ๋ฉ์๋๋ฅผ ํตํด ์ ํํ ๊ฐ์ ๊ฐ๋จํ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
(ํด๋น ๋ฉ์๋๋ ์์์ ์์๋ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค.)
2๋จ๊ณ - ๋ฌธ์์ด ๋ง์ ๊ณ์ฐ๊ธฐ
2๋จ๊ณ ๋ฏธ์ ์ ์ผํ(,) ๋๋ ์ฝ๋ก (:)์ ๊ตฌ๋ถ์๋ก ๊ฐ์ง๋ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ๊ณ , ๊ตฌ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ ์ซ์์ ํฉ์ ๊ตฌํํฉ๋๋ค.
๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ๋ง์
์ ์ฝ๋์ 41๋ฒ ๋ผ์ธ์์ Pattern ๊ฐ์ฒด๋ ๋ฌด์ํ ๊ฐ์ฒด์ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ธฐ์ ๋งค๋ฒ ์๋ก์ด Pattern์ ์์ฑํ ํ์๋ ์์ ๊ฒ ๊ฐ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค.
JUnit - @NullAndEmptySource
์ ๋ ํ ์คํธ๋ ๊ฐ๊ฐ null, empty๋ฅผ ํ ์คํธํ๋ ์ฝ๋๋ก @NullAndEmptySource ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ํ๋์ ๋ฉ์๋๋ก ๊ฐ์ด ํ ์คํธ๋ฅผ ๊ฒ์ฆํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฉ์๋์ ๋ค์ด๋ฐ์ ๊ดํ์ฌ
๋ฉ์๋์ ๋ค์ด๋ฐ์ ๊ณ ๋ คํ ๋ ํญ์ ๋์ฌ๋ก ์์ํ๋ ๋ค์ด๋ฐ์ ์ ํธํ์๋๋ฐ, ์์ผ๋ก๋ ๋ฉ์๋์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ ์ง์ด์ผ๊ฒ ์ต๋๋ค.
- ๋น๋: ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ณ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํ
- ์กฐ์ ์: ๊ฐ์ฒด๋ก ์ถ์ํํ ์ค์ธ๊ณ ์ํฐํฐ๋ฅผ ์์ ํ๋ ๋ฉ์๋๋ก ๋ฐํ ํ์ ์ด void
๋น๋(builder) ๋ฉ์๋ ์์
- int pow(int base, int power);
- float speed();
- Employee employee(String name);
์กฐ์ ์(manipulator) ๋ฉ์๋ ์์
- void save(String content);
- void put(String key, int value);
- void remove(int index);
3๋จ๊ณ - ์๋์ฐจ ๊ฒฝ์ฃผ
3๋จ๊ณ๋ถํฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ์๋์ฐจ ๊ฒฝ์ฃผ๋ฅผ ๊ตฌํํ๋ ๋ฏธ์ ์ ๋๋ค.
์๊ตฌ์ฌํญ์ ๋๋ต์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋์ฐจ ๋์์ ์๋ ํ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ ์๋์ฐจ๋ ์ ์ง ๋ฐ ๋ฉ์ถ ์ ์๊ณ , ์๋์ฐจ์ ์ํ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. (Console)
ํด๋์ค ๋ค์ด๋ฐ๊ณผ ์๋
InputCar ํด๋์ค๋ช ์ด ์๋๋ฅผ ํ์ ํ๊ธฐ ํ๋ค๋ค๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋๋ฐ, ์ ๋ ์์ฑํ ๋ ํ์ ํ๊ธฐ ํ๋ค๋ค๋ ๋๋์ ๋ฐ์์์ต๋๋ค.
์กฐ๊ธ ๋ ๋ช ํํ ์๋๋ฅผ ๊ฐ์ง UserInput ๋ฑ์ผ๋ก ์์ฑํ๋ฉด ๋ ์ข์ง ์์๊น ์๊ฐํฉ๋๋ค.
๊ฒฝ๊ณ๊ฐ์ ๋ํ ๊ผผ๊ผผํ ํ ์คํธ
ํ ์คํธ๋ฅผ ์ด๋ป๊ฒ, ๋ฌด์์ ์ ์์ฑํด์ผ ํ๋์ง ์์ง๊น์ง ๋ต์ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฌ๊ธฐ์ ๋ฐฐ์ด ๊ฒ ์ค ํ๋๋ ๊ฒฝ๊ณ๊ฐ์ ๋ํ ํ ์คํธ์ ๋๋ค.
์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์์๋ ๋๋ค ๊ฐ์ด 4 ์ด์์ด๋ฉด ์ ์ง์, 4 ๋ฏธ๋ง์ด๋ฉด ๋ฉ์ถฐ์๋ ์ํ๋ฅผ ๊ฐ์ง๋๋ฐ ์ฌ๊ธฐ์ ๊ฒฝ๊ณ๊ฐ์ 4์ ๋๋ค.
๋ณดํต ๊ฒฝ๊ณ๊ฐ์ ๋ํด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋๊ธฐ์ ๊ฒฝ๊ณ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํฉ๋๋ค.
๋ํ ์ ํ ์คํธ๋ 4 ์ด์์ธ ๊ฒฝ์ฐ๋ง ํ ์คํธ๊ฐ ์กด์ฌํ๊ธฐ์ 4 ๋ฏธ๋ง์ธ ์ผ์ด์ค์ ๋ํด์๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ๋์ฑ ๊ผผ๊ผผํ ํ ์คํธ๊ฐ ๋ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌด์๋ฏธํ ๊ฐ์ฒด
์ ์ฝ๋์์ ๋๋ค ๊ฐ์ ์์ฑํ๋ ์ฑ ์์ ThreadLocalRandom์ด ์ด๋ฏธ ๊ฐ์ง๊ณ ์๊ณ , RandomValue๋ ์ด๋ ํ ์กฐ์์ด๋ ๋ก์ง ์์ด ๋๋ค ๊ฐ๋ง ์์ฑํด์ ์ ๋ฌํ๊ณ ์์ต๋๋ค.
ThreadLocalRandom ํด๋์ค๋ฅผ ํ ๋ฒ ๊ฐ์ผ ๊ฒ์ ์ ์ธํ๋ฉด ๋ฑํ ํด๋์ค์ ํ์์ฑ์ด ๋ถ๋ถ๋ช ํด ๋ณด์ ๋๋ค.
์ด๊ฒ๊ณผ๋ ๋ณ๊ฐ๋ก ์ ์ฝ๋๋ nextInt() ๋ฉ์๋๊ฐ ๋๋ค ๊ฐ์ ๋ฐํํ๊ธฐ์ ํ ์คํธํ๊ธฐ๋ ์ฝ์ง ์์ ๋ณด์ด๋๋ฐ์,
์ ์ฝ๋๋ฅผ ํ ์คํธ๊ฐ ์ฉ์ดํ ์ฝ๋๋ก์ ์์ ์ ์ดํ ๋จ๊ณ์์ ์งํํด ๋ณด๊ฒ ์ต๋๋ค. ๐
4๋จ๊ณ - ์๋์ฐจ ๊ฒฝ์ฃผ(์ฐ์น์)
4๋จ๊ณ ๋ฏธ์ ์ 3๋จ๊ณ ๋ฏธ์ ์์ ์๋์ ์๊ตฌ ์ฌํญ์ด ์ถ๊ฐ๋ ๋ฏธ์ ์ ๋๋ค.
- ์๋์ฐจ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค.
- ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ์๋ฃ ํ ์ฐ์น์๋ฅผ ์ถ๋ ฅํ๋ค. (์ฐ์น์๋ ํ ๋ช ์ด์์ผ ์ ์๋ค.)
๋ชจ๋ ์์๊ฐ๊ณผ ๋ฌธ์์ด์ ํฌ์ฅํ๋ผ (Car - Position, Name)
๋ฏธ์ 4๋จ๊ณ๋ถํฐ๋ ์ํธ์์ค ์ค์๋ฌ์ง ์ฑ ์์ ๋ค๋ฃจ๊ณ ์๋ ๊ฐ์ฒด์งํฅ ์ํ ์ฒด์กฐ ์์น ์ค ํ๋์ธ ๋ชจ๋ ์์ ๊ฐ๊ณผ ๋ฌธ์์ด์ ํฌ์ฅํ์ฌ ์ฌ์ฉํด ๋ณด๋ ค๊ณ ํ์ต๋๋ค.
๊ทธ์ ๋ฐ๋ผ Car ๊ฐ์ฒด์๋ ์๋์ฐจ์ ์ด๋ฆ์ ๋ํ๋ด๋ Name, ์๋์ฐจ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ Position์ primitive ๋ณ์๊ฐ ์๋ ํฌ์ฅํ ๊ฐ์ฒด๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ก ์ธํด ๊ธฐ์กด์ ์ฝ๋๋ผ๋ฉด ์ ๋ถ Car ๊ฐ์ฒด์ ์ถ๊ฐํด์ผ ํ ๋ก์ง์ด๋ ์ ํจ์ฑ ๊ฒ์ฆ ๋ฑ์ด ๊ฐ๊ฐ Name, Position ๊ฐ์ฒด์๊ฒ ์ญํ ์ด ๋ถ๋ฆฌ๋์๊ณ , ๋ฉ์์ง๋ฅผ ์ ๋ฌํ์ฌ ์กฐ๊ธ ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๊ฒฝํ์ ํ ์ ์์์ต๋๋ค.
public์ผ๋ก ์ ๊ณต๋๋ API์ ๋ํด์๋ ๊ฐ๋ฅํ ์ ๋ถ ํ ์คํธ๋ฅผ ์์ฑํ์.
์ Car ๊ฐ์ฒด์ ์ฐ๊ด๋๋ ๋ถ๋ถ์ผ๋ก ์๋์ฐจ ๊ฒฝ์ฃผ์ ๊ด๋ จ๋ ๋ก์ง์ ๋๋ถ๋ถ Position, Name ๊ฐ์ฒด์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Car ๊ฐ์ฒด์ ๋ฉ์๋๋ค์ ๋ํ ํ
์คํธ๋ ํ์ํ๊ฐ?์ ๋ํ ๋๋ต์ด public ๋ฉ์๋๋ ๊ฐ๋ฅํ ํ
์คํธ๋ฅผ ์งํํด๋ผ ์์ต๋๋ค. (์ฌ์ค์ ๊ท์ฐฎ์์...)
๋จ์ํ Name, Position ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ public ๋ฉ์๋๋ณด๋ค๋ winner์ธ์ง ํ์ธํ๋ isWinner ๋ฉ์๋ ์ ๋๋ ํ ์คํธ๊ฐ ํ์ํ์ง ์์๊น ์ถ์ต๋๋ค.
ํ ์คํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก publicํ๊ฒ ์ ๊ณต๋๋ API๋ ๋ชจ๋ ์ต๋ํ์ ํ ์คํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ ์ข์ต๋๋ค.
publicํ ๋ฉ์๋๊ฐ ์ธ๋ถ์ ๊ณต๊ฐ๋๋ค๋ ๊ฒ์ ๊ทธ ์ดํ๋ก๋ deprecated ์ํค๊ธฐ ์ด๋ ต๊ณ ๊ณ์ํด์ ํธํ์ด ๋์ด์ผ ํ๊ณ ์์ ์ฑ์ ์ ๊ณตํด์ผ ํ๋ค๋ ๋ป์ด๊ธฐ๋ ํ๊ฑฐ๋ ์
Test Fixture ์์ฑ
ํ์ฌ ๋ก์ง์์๋ ์๋์ฐจ์ ๊ธฐ๋ณธ ๊ฑฐ๋ฆฌ๋ 0์ด๊ณ , ์๋์ฐจ๊ฐ ์ ์งํ๋ ค๋ฉด ๋ฐ๋์ ๋ฉ์๋๋ฅผ ์คํํ ํ ์ ์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ์น์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด forward() ๋ฉ์๋๊ฐ ์ ํ์ด ๋์ด์ผ ํ๋ ์กฐ๊ฑด์ด ์กด์ฌํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Fixture๋ฅผ ๊ณ ๋ คํ ์ ์๋๋ฐ, Fixture๋ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ ์ฝ๋์์ forward() ๋ฉ์๋๋ฅผ Fixture๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์์์๋ Test Fixture๋ฅผ ์ํด Position์์ distance๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ํด ํ๋ฌ๋์ ์ฝ๋๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ ์ฝ๋์ฒ๋ผ ์์ฑ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋๊ฒ์ ๊ด์ฐฎ์ง ์์๊น? ํ๋ ์๊ฐ๋ ์์ต๋๋ค. ๐ง
2์ฃผ ์ฐจ ๋ผ์ด๋ธ ๊ฐ์์์๋ ํฌ๋น๊ฐ ์ ๋ด์ฉ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ์ธ๊ธํ๊ณ ์์ต๋๋ค.
ํ ์คํธ๋ฅผ ์ํ ์ฝ๋(๋ฉ์๋)๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ์ ํ์ด๋ค.(์ค๊ณ๊ฐ ์๋ชป๋ ๊ฒ)
ํ์ง๋ง ํ ์คํธ๋ฅผ ์ํ ์์ฑ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ค. (์๋ฌด๋๋ ์์ฑ์๋ฅผ ํตํ ๊ฐ์ฒด ์์ฑ์ ์ดํ ์ํ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ฉ์๋๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ์ ๊ทธ๋ฐ ๊ฒ์ด ์๋๊น ์๊ฐํฉ๋๋ค. ๐ง
๋ฌผ๋ก ์์ฒ๋ผ ํ ์คํธ๋ฅผ ์ํ ์์ฑ์๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ๋ชฉ์ ๊ณผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋์ด ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํ๋ ์กด์ฌํฉ๋๋ค.
(์๋์ฐจ์ ์ต์ด ๊ฑฐ๋ฆฌ๋ 0์ธ๋ฐ, ๋๊ตฐ๊ฐ ์์ฑ์๋ฅผ ์๋ชป ์ฌ์ฉํ์ฌ ์ต์ด ์๋์ฐจ ๊ฑฐ๋ฆฌ๋ฅผ ์์๋ก ์ง์ ํ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.)
๊ฒฐ๊ตญ ๊ฐ ์ ํ์๋ ์ฅ๋จ์ ์ด ์กด์ฌํ๊ณ , ํ์ฌ ์ํฉ์ ๋ ์ ํฉํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ข์ ๋ฏ ํฉ๋๋ค.
๋ฌธ์ํ์ ์ธ๋ถํ
// Before
- ์๋์ฐจ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค. (์ด๋ฆ์ 5๊ธ์๋ฅผ ์ด๊ณผํ ์ ์๋ค.)
// After
- ์๋์ฐจ์ ์ด๋ฆ์ ๋ถ์ฌํ ์ ์๋ค.
- 5๊ธ์ ์ด๋ด์ ์ด๋ฆ์ผ๋ก ์์ฑํ ๊ฒฝ์ฐ ์ ์์ ์ผ๋ก ์์ฑ๋๋ค.
- 5๊ธ์ ์ด์์ ์ด๋ฆ์ผ๋ก ์์ฑํ ๊ฒฝ์ฐ IllegalArgumentException ์์ธ๋ฅผ ๋์ง๋ค.
๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ํด ๋ฌธ์ํ๋ฅผ ํ๋ฉด ๋์ฑ ๋ช ํํด์ง๊ณ ํ ์คํธ ์ฝ๋ ์์ฑ์๋ ์ฐ์ต์ด ๋ ๋ฏ ํฉ๋๋ค.
์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ํตํด ๊ฐ์ฒด ์์ฑ์ ๋ช ํํ๊ฒ, ๋ด์ฉ์ ์๋ํ๊ธฐ
https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/
๋ชจ๋๊ฐ 0์ธ Position์ ์ด๊ธฐ๊ฐ์ผ๋ก ๋ฐ๋๋ค๋ฉด ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด์ ํ์ฉํด์ ํด๋น ๋ด์ฉ์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ก ์ฌ๋ฆฌ๊ณ ๋ด์ฉ์ ์๋ํด๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
5๋จ๊ณ - ์๋์ฐจ ๊ฒฝ์ฃผ(๋ฆฌํฉํฐ๋ง)
5๋จ๊ณ ์๊ตฌ์ฌํญ์ 3~4๋จ๊ณ์ ์๋์ฐจ ๊ฒฝ์ฃผ์ ๋ํด ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ domain ํจํค์ง, UI๋ฅผ view ํจํค์ง ๋ฑ์ผ๋ก ๊ตฌํํ๋ ๊ณผ์ ์ ๋๋ค.
์ ๋จ๊ณ์์ ์กฐ๊ธ์ฉ ๋ถ๋ฆฌ๋ฅผ ํด๋์ ๋ฐ๋ก ๋ง์ ๋ถ๋ถ์ ๋ํด ์์ ์ ํ์ง๋ ์์์ต๋๋ค.
์๋์ฐจ์ ์ ์ง ์กฐ๊ฑด์ ์ ์ดํ๋ ์ ๋ต ํจํด์ ๊ตฌํํ์.
๊ธฐ์กด As-Is ์ฝ๋์์๋ ๋๋ค ๊ฐ์ด playing() ๋ฉ์๋์์ ์์ฑ๋์ด ํ ์คํธ๋ ์ด๋ ต๊ณ , Position ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ์กฐ๊ฑด์ ํ๋ณํด ์ ์ง์ ํ๋ ์ด์ํ ์ํฉ์ด ์กด์ฌํฉ๋๋ค.
๋ํ ํ์ฌ ์๊ตฌ ์ฌํญ์ ์ ์ง ์กฐ๊ฑด๋ง ์กด์ฌํ์ง๋ง, ์ถํ ์๊ตฌ ์ฌํญ์ด ๋ณ๊ฒฝํ์ฌ ํ์ง ์กฐ๊ฑด ๋ฑ์ด ์ถ๊ฐ๋๋ค๋ฉด ๋น์ฆ๋์ค ๋ด์ฉ(์กฐ๊ฑด)์ด ์ถ์ํ๊ฐ ๋์ด ์์ง ์๊ธฐ์ ์ ์ง ๋ณด์์ฑ์ด ๋จ์ด์ง ์ ์๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์์ต๋๋ค.
๋๋ค ๊ฐ์ ์์ฑํ๋ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ๋ถ๋ถ์ ํ ์คํธ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๊ฐ์ ํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ์ถ์ํ ํ๋ ๋ฆฌํฉํฐ๋ง์ ์งํํด ๋ณด์์ต๋๋ค.
๋ฐ๋ผ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ๋ต ํจํด์ ํตํ ์ถ์ํ๋ฅผ ์ ์ฉํ์๊ณ , ๋๋ค ๊ฐ์ ์์ฑํ๋ ๋ก์ง ๋ํ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํ์ฌ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋์๋ Fake ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํ ์คํธ์ ์ฉ์ดํ๋๋ก ๋ฆฌํฉํฐ๋ง์ ์ ์ฉํ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ForwardStrategy ์ธํฐํ์ด์ค์ isMovable() ๋ฉ์๋์ ๋ฐํ ํ์ ์ boolean์ด ์๋ intํ์ผ๋ก ์ ์ธํ๊ณ , ๊ตฌํ์ฒด์์ ๋ฆฌํด ๊ฐ์ 0์ด๋ 1๋ก ๋ฐํํ๋ค๋ฉด forward() ๋ฉ์๋์์ if ์กฐ๊ฑด๋ฌธ๋ ์ ๊ฑฐํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ด ๋๋ฌด๋ ๋ฆ๊ฒ ๋๋ ๋ฒ๋ ค์ ๋ ๋ฒ์งธ ๋ฏธ์ ๋ถํฐ๋ ์กฐ๊ธ ๋ ํ์ ๋ด์ด ๋น ๋ฅด๊ฒ ์งํํ๊ณ , ํผ๋๋ฐฑ์ ๋ฐ๊ณ , ํฌ์คํ ์ ์์ฑํ ์ ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค ๐
'๊ฐ์ ์ ๋ฆฌ > TDD, ํด๋ฆฐ ์ฝ๋ with Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TDD, ํด๋ฆฐ ์ฝ๋ with Java (๋ฏธ์ 3, 4 - FP, OOP, ๋ฆฌํฉํฐ๋ง) (0) | 2023.08.07 |
---|---|
TDD, ํด๋ฆฐ ์ฝ๋ with Java (๋ฏธ์ 2. ๋ก๋ - TDD) (1) | 2023.05.13 |
๋๊ธ