๐ ์ฝ๋ & ์ค๊ณ
[์๋์ฐจ ๊ฒฝ์ฃผ] ๊น์คํ ๋ฏธ์ ์ ์ถํฉ๋๋ค. by JHZLO · Pull Request #304 · woowacourse-precourse/java-racingcar-7
๐๐ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ <<โ๏ธ ์ฝ๋ ์ค๋ช >> ๐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ โโโsrc โโโโmain โ โโโโjava โ โโโโracingcar โ โ Application.java โ โ ...
github.com
[์ฐํ ์ฝ ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] java-racingcar ์ฝ๋ ์ค๋ช [๐ ๏ธ์ค๊ณ] (์ผ๊ธ ์ปฌ๋ ์ , ์์๊ฐ ํฌ์ฅ, validate์
โ๏ธ์ฝ๋ [์๋์ฐจ ๊ฒฝ์ฃผ] ๊น์คํ ๋ฏธ์ ์ ์ถํฉ๋๋ค. by JHZLO · Pull Request #304 · woowacourse-precourse/java-racingcar-7๐๐ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ๐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ โโโsrc โโโโmain โ โโโโjava โ โ
jhzlo.tistory.com
๐ข ๊ณตํต ํผ๋๋ฐฑ
๐ README.md๋ฅผ ์์ธํ ์์ฑํ๋ค.
๐ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์ฌ๊ฒํ ํ๋ค.
์ ์์ ์ธ ๊ฒฝ์ฐ๋ฟ๋ง ์๋๋ผ ์์ธ ์ํฉ๋ ํจ๊ป ์ ๋ฆฌํ๋ค
๐ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์ ๋ฐ์ดํธํ๋ค.
๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ๋ฌธ์๋ฅผ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
→ ์ด์์๋ ๋ฌธ์๋ก ์ ์ง๋ ์ ์๋๋ก ๋ ธ๋ ฅํ์.
๐ ๊ฐ์ ํ๋ ์ฝ๋ฉํ์ง ์๋๋ค.
๐ ๊ตฌํ ์์๋ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ด๋ค.
ํด๋์ค๋ ์์, ๋ฉค๋ฒ ๋ณ์, ์์ฑ์, ๋ฉ์๋ ์์๋ก ์์ฑํ๋ค.
๐ ๋ณ์ ์ด๋ฆ์ ์๋ฃํ์ ์ฌ์ฉํ์ง ์๋๋ค.
ex) CarNameList
๐ ํ ๋ฉ์๋๊ฐ ํ ๊ฐ์ง ๊ธฐ๋ฅ๋ง ๋ด๋นํ๊ฒ ํ๋ค.
๐ ๋ฉ์๋๊ฐ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ํ๋์ง ํ์ธํ๋ ๊ธฐ์ค์ ์ธ์ด๋ค.
15๋ผ์ธ์ด ๋์ง ์๋๋ก ๊ตฌํํ๋ฉด ์์์ ์ผ๋ก ๋ฉ์๋๋ก ๋ถ๋ฆฌํ๋ ์ฐ์ต์ ํ ์ ์๋ค.
๐ ํ ์คํธ๋ฅผ ์์ฑํ๋ ์ด์ ์ ๋ํด ๋ณธ์ธ์ ๊ฒฝํ์ ํ ๋๋ก ์ ๋ฆฌํ๋ค.
ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ๊ธฐ๋ฅ์ ์ ํ์ฑ์ ์ ๊ฒํจ์ ๋์ด ์ฝ๋์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๋ค.
ํ ์คํธ ์์ฑ ๊ณผ์ ์ ํตํด ๊ตฌํํ ๊ธฐ๋ฅ์ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌํ ์ ์์ ๋ฟ๋ง ์๋๋ผ,
์ฝ๋์ ๊ตฌ์กฐ์ ์๋๋ฅผ ๋ช ํํ ์ดํดํ๋ ๋ฐ๋ ๋์์ ๋ฐ์ ์ ์๋ค
๐ ์ฒ์๋ถํฐ ํฐ ๋จ์์ ํ ์คํธ๋ฅผ ๋ง๋ค์ง ์๋๋ค.
๋ฌธ์ ๋ฅผ ์๊ฒ ๋๋์ด ํต์ฌ ๊ธฐ๋ฅ๋ถํฐ ์๊ฒ ํ ์คํธ๋ฅผ ๋ง๋ค์ด ๊ฐ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ค.
→ ์์ธ ์ฒ๋ฆฌ ํ ์คํธ๋ถํฐ ์งํํ๋ค.
โ ๊ฐ์ฒด์ ์บก์ํ ์ ๋๋ก ํ๊ณ ์๋๊ฐ?
๊ฐ์ฒด ์งํฅ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๋ฉด์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ๋ ๋ถ๋ถ์ ์บก์ํ์ด๋ค.
์ด๋ฒ ๋ฏธ์ ์ ์งํํ๋ฉด์ ์บก์ํ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง ๋ถ๋ถ์ด ์์๋ค.
โ๏ธ Movable()์ ์ด๋์ ์๋ ๊ฒ ์ข์๊น?
Random์๋ฅผ ์ถ์ถํ๋ generator๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ํ๋จํ์๊ณ ,
random๊ฐ์ ์ถ์ถํ๋ Generator๋ฅผ ์์ ๊ฐ์ด ๋ฐ๋ก util ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์๋ค.
๊ทธ๋ฆฌ๊ณ Random์๋ฅผ ์ถ์ถํจ๊ณผ ๋์์ Movable()์ ์กฐ๊ฑด์ด random ์์ ๋ฐ์ ํ๊ธฐ์, Movable๋ ๊ฐ์ด ์ ์ํ์๋ค.
๊ทธ๋ฌ๊ณ ๋์ Movable() ๋ฉ์๋๋ฅผ ์์ ๊ฐ์ด Cars ๊ฐ์ฒด์์ ์ฌ์ฉํ์๋ค.
๊ทธ๋ฐ๋ฐ, ์ด๋ ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์๊ธฐ๊ฒ ๋๋ค.
๐ค Movable()์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ด๊ธฐ์ util ํด๋์ค๋ก ๋นผ๋ฒ๋ฆฌ๊ฒ ๋๋ฉด ์บก์ํ๊ฐ ๊นจ์ง๊ฒ ๋๋ค.
Movable()์ ์๋์ฐจ์ ์ ์ง์กฐ๊ฑด์ ๊ฒฐ์ ํ๋ ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ด๋ค.
๋ฐ๋ผ์, ํด๋น ์กฐ๊ฑด์ด util ํด๋์ค๋ก static์ผ๋ก ์ ์๋๋ค๋ฉด,
๋ด๋ถ ๋น์ฆ๋์ค ๋ก์ง์ด ์ธ๋ถ๋ก ๋น ์ ธ๋์ค๊ฒ ๋๊ณ , ์บก์ํ๊ฐ ๊นจ์ง๊ฒ ๋๋ค.
๋ฐ๋ผ์ Movable()์ Cars ๊ฐ์ฒด ๋ด๋ถ์์ ์ ์ํ๊ณ Random ์๋ฅผ ์ถ์ถํ๋ ๋ฉ์๋๋ฅผ static์ผ๋ก ์ ์ํ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค.
โญ๋น์ฆ๋์ค ๋ก์ง์ด ์ธ๋ถ๋ก ์ ์ถ๋์ง ์๊ฒ ํ์!โญ
๐ค ์์ ๊ฐ์ด ์ ์ํ๊ฒ ๋๋ ๊ฒฝ์ฐ ์ ์งํ๋ค๋ ์กฐ๊ฑด์ ๋ํ ํ ์คํธ ์ฝ๋๋ ์ด๋ป๊ฒ ์์ฑํ ๊ฒ์ธ๊ฐ.
๋ง์ฝ ์์ ๊ฐ์ด RandomGenerator ํด๋์ค๋ฅผ ์ ์ํ๊ฒ ๋๋ค๋ฉด ํ ์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
class RandomGeneratorTest {
@Test
void testMovableTrue() {
// generateRandomNumber๊ฐ 4 ์ด์์ผ ๋ true๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
RandomGenerator generator = mock(RandomGenerator.class);
when(generator.generateRandomNumber()).thenReturn(5); // 5๋ MOVABLE_MIN_NUMBER ์ด์์
๋๋ค.
assertThat(generator.Movable()).isTrue();
}
@Test
void testMovableFalse() {
// generateRandomNumber๊ฐ 4 ๋ฏธ๋ง์ผ ๋ false๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
RandomGenerator generator = mock(RandomGenerator.class);
when(generator.generateRandomNumber()).thenReturn(3); // 3์ MOVABLE_MIN_NUMBER ๋ฏธ๋ง์
๋๋ค.
assertThat(generator.Movable()).isFalse();
}
}
์์ ๊ฐ์ด RandomGenerator๋ฅผ Mocking ํ์ฌ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ thenReturn์ ํ์ฉํ์ฌ
Movable์ ์กฐ๊ฑด์ด ์ ๋๋ก ์ํ๋๋์ง ํ์ธํ ์ ์๋ค.
๊ทธ๋ฌ๋ RandomGenerator์ ์ฝ๋๊ฐ
์์ ๊ฐ์ด ์์ ๋๋ค๋ฉด, Cars์ ๋ํ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ค๋ฉด ํ ์คํธ ์ฝ๋์์ RandomGenerator๋ฅผ Mocking ํ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ RandomGenerator๋ static ๋ฉ์๋๋ง์ ๊ฐ์ง๊ณ ์๋ util ํด๋์ค์ด๊ธฐ์ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋ ๊ฑด ์์ด๋ณด์ธ๋ค.
๋ฐ๋ผ์ ํ ์คํธ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ ์ ์๋ค.
class CarsTest {
private Cars cars;
@BeforeEach
void init() {
cars = new Cars("CarA,CarB,CarC");
}
@Test
void ์ด๋๊ฐ๋ฅ_์ฐจ๋_์ ์ง() {
RandomGenerator generator = mock(RandomGenerator.class);
when(generator.generateRandomNumber()).thenReturn(5);
cars.moveCars();
cars.getCars().forEach(car -> assertThat(car.getDistance()).isEqualTo(1));
}
@Test
void ์ด๋๋ถ๊ฐ_์ฐจ๋_์ ์ง() {
RandomGenerator generator = mock(RandomGenerator.class);
when(generator.generateRandomNumber()).thenReturn(3);
cars.moveCars();
cars.getCars().forEach(car -> assertThat(car.getDistance()).isEqualTo(0));
}
}
์ด์ธ์๋ ์ด๋ฌํ ๊ณ ๋ฏผ์ ๋ํด ์์ธํ๊ฒ ๋ค๋ฃฌ ๊ธ์ด ์์ด์ ์ฐธ๊ณ ์ฉ์ผ๋ก ๋จ๊ฒจ๋๊ณ ์ ํ๋ค.
โ๏ธ ๋น์ฆ๋์ค ๋ก์ง์ด controller์ ์๋ ๊ฒ์ ์๋์ง ํ์ธํด ๋ณด์.
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋งค ๋ผ์ด๋๋ง๋ค ๊ฒฐ๊ณผ๋ฅผ view์๊ฒ ๋๊ฒจ์ค์ผ ํ๊ธฐ์
(์ปจํธ๋กค๋ฌ -> ๋ชจ๋ธ๋ก๋ถํฐ ๋ผ์ด๋ ๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ -> view)
์์ ๋ก์ง์ ๋ฐ๋ณตํด์ผ ํ์๊ณ , ์ด๋ for ๋ฌธ์ ํตํด์ ์ ์ํด์ผ์ง ๊ทธ๋๊ทธ๋ view์๊ฒ ๋๊ฒจ์ค ์ ์์๋ค.
view์๊ฒ ๋ชจ๋ธ์ ๋๊ฒจ์ฃผ์ง ์๊ณ controller์์ view์๊ฒ ์ถ๋ ฅํ ๊ฐ๋ง ์ ๋ฌํ๊ธฐ ์ํ ์ ํ์ด์๋ค.
๊ทธ๋ฌ๋, ์ด๋ ํ๋ถ์ด ์์ ๊ฐ์ ์๊ฒฌ์ ์ฃผ์ จ๋ค.
"๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ค์ ๋ํ ๋ก์ง์ ์ง์ ์ํํ๊ฒ ํ์ฌ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ์์จ์ฑ์ ๊ฐ์ง๊ฒ ํ๋ผ"
์ด ๋ถ์ ๋ง์๋๋ก gameRound.getRound๋ก ๊ฐ์ ๊ฐ์ ธ์์ ์์ ๊ฐ์ ๋ก์ง์ ์ํํ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ
GameRound ๊ฐ์ฒด์ ํ๋๊ฐ์ ์ด์ฉํด ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
ํด๋น ๋ฉ์๋๋ ๊ฒฐ๊ตญ ๊ฐ์ฒด์งํฅ์ ์ธ ๊ด์ ์์ ๋ฒ์ด๋๋ ๊ฒ์ด๊ณ ๊ฐ์ฒด์ ํ๋ ฅํ๋ ๊ฒ์ ์ ๋๋ก ๊ตฌํํ์ง ๋ชปํ ๊ฒ์ด๋ค.
์ฐจ๋ผ๋ฆฌ GameRound ๋ด์์ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ์ฌ, ๊ฐ๊ฐ์ SnapShot์ ๊ฐ์ง๊ณ ์๋ค๊ฐ ์ต์ข String ๊ฐ์ผ๋ก return ํ๋ ๊ฒ์ด ์ข์ ๋ณด์ธ๋ค..!
โญ์ถ๊ฐ๋ก ๊ฐ์ฒด์ ํ๋ ฅํ์ง ์์์ ํ๋จํ๋ ๊ธฐ์ค์ Getter๋ฅผ ์ฌ์ฉํ ๋ ์๊ฐํด ๋ณด๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
ํด๋น ๋ฉ์๋๋ฅผ ๊ฐ์ฒด๊ฐ ํ ์ ์๋์ง ํ๋จํ์!!!โญ
(์ฐธ๊ณ :https://tecoble.techcourse.co.kr/post/2020-04-28-ask-instead-of-getter/)
๋ฒ์ธ) getter๋ก ๊ฐ์ ธ์ฌ ๋ ๋ณ์๋ก ๋ณํ ํ ์ง์ด๋ฃ์.
โ view์ ๋ชจ๋ธ์ ์ ๋ฌํด๋ ๋ ๊น?
์ฝ๋๋ฅผ ์ค๊ณํ๋ฉด์ ์์ ๊ฐ์ ๊ณ ๋ฏผ์ด ์์๋ค.
์ผ๋จ View์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
(์ถ์ฒ:https://velog.io/@dlguswl936/)
1. Model๊ฐ์ View์๊ฒ ๋ณด๋ธ๋ค.
์ฅ์ :
- ์์๊ฐ์ด ์ค๊ณ ๊ฐ๋ฏ๋ก ๋ฐ์ดํฐ์ ๋ํ ์์ ์ฑ์ด ์๊ธด๋ค.
๋จ์ :
- View๊ฐ Model์ ์์กดํ๋ค?
2. ์ปจํธ๋กค๋ฌ์์ ๊ฐ์ ํ์ด์ View์๊ฒ ๋ณด๋ธ๋ค.
์ฅ์ :
-View๊ฐ Model์ ์์กดํ์ง ์๋๋ค.
๋จ์ :
- View์ ์ธ์๊ฐ์ ์๋ฌด ๊ฐ์ด๋ ๋ฃ์ ์ ์์ผ๋ฏ๋ก ์์ ์ฑ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- ์ปจํธ๋กค๋ฌ๊ฐ Model์ ์ ๊ทผํ๊ฒ ๋๋ฏ๋ก ์ปจํธ๋กค๋ฌ์ Model ๊ฐ์ ๊น์ ๊ด์ฌ๊ฐ ์๊ธด๋ค?
3. dto๋ฅผ view์๊ฒ ๋๊ฒจ์ค๋ค.
์ฅ์ :
- ์์๊ฐ์ ๋ณด๋ด๋ฏ๋ก ๋ฐ์ดํฐ ์์ ์ฑ์ด ์๊ธด๋ค.
- ๋ณต์ก๋๋ฅผ ์ค์ฌ์ค ์ ์๋ค.
>> ์ด๋ ๊ฒ ๋ง์ ๋ฐฉ๋ฒ ์ค ์ด๋ค ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ์ข์๊น..?
์ด๋ ํ ๋ถ์ด ๋ค์๊ณผ ๊ฐ์ ๊ทผ๊ฑฐ๋ฅผ ๋ค์ด ์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ จ๋ค..!
view์ ๋ชจ๋ธ์ ๋ฐ๋ก ์ ๋ฌํ์์ ๋์ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค.
- ์บก์ํ ์์น์ด ์๋ฐฐ๋ ์ ์๋ค.
- ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋ค.
model์ ๋ฐ๋ก ๋๊ธฐ๊ฒ ๋๋ค๋ฉด, ์ ์ฐ์ฑ์ด ๋จ์ด์ง ๋ฟ๋ง ์๋๋ผ view์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ ์๊ณ ,
๊ทน๋จ์ ์ผ๋ก view์์ ๋ชจ๋ธ์ ๊ฐ์ ์กฐ์ ํ ์ ์๋ ์ผ์ด ์๊ธธ ์ ์๋ค.
์ด๋ ์บก์ํ ์์น์ ์๋ฐฐ๋๋ ๊ฒ์ด๋ค..!!
๋ฐ๋ผ์ ๋ณ์๋ก ๋ฐ๊ฑฐ๋ ์์ฒ๋ผ String์ผ๋ก ๋ฐํํ๋ getWinner()๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ ์ข์ ๋ณด์ธ๋ค.
โญview์ ๋ชจ๋ธ์ ๋๊ฒจ์ฃผ์ง ๋ง๊ณ , ํ์ํ ์ ๋ณด๋ง ๋๊ฒจ์ฃผ์โญ
๊ทธ๋ฌ๋!!!!!!!!!!!
โ๏ธ MVC ํจํด - View๊ฐ ๋๋ฉ์ธ์ ์์กดํด๋ ๋๋ค?
๋ด๊ฐ ๊ณต๋ถํ๋ MVC ํจํด์์ View๋ ์๊ธฐ ์์ ์ด์ธ์ ์๋ฌด๋ ์์์๋ ์๋๋ค.
๊ทธ๋ฐ๋ฐ View๊ฐ ๋๋ฉ์ธ์ ์์กดํด๋ ๋๋ค๊ณ ..?
์ด๋ View๊ฐ ๋๋ฉ์ธ์ ์์์ผ ํ๋ค๋ ๊ฒ ์๋๊ฐ?
์ถ์ฒ: [10๋ถ ํ ์ฝํก] ์ ๋ฆฌ์ MVC ํจํด https://www.youtube.com/watch?v=ogaXW6KPc8I
์์์ ๋ค๋ฃฌ MVC ํจํด์ ๋ฒ์น์ ์ด์ ๊ฐ์ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์๋ค.
์์ ๊ฐ์ ๋ด์ฉ์ด๋ผ๋ฉด,
๊ฒฐ๊ตญ Model์์๋ View์ ๊ด๋ จ๋ ์ฝ๋๋ ๋ค๋ฃจ์ง ์๊ณ ,
Model์ View์ ์ ๋ฌํจ์ผ๋ก์จ View์์ ์ฒ๋ฆฌํ๋๋ก ํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ View๊ฐ Model์ ์์กดํด์ผ ํ๋ ์ด์ ์ ๋ํด ๋ค์ ๊ณต๋ถํด ๋ณด์๋ค.
โญView๊ฐ Model์ ์์กดํด์ผ ํ๋ ์ด์ ๋ ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ์ ์์ฒ์ด Model์ด๊ธฐ ๋๋ฌธ์ด๋ค!โญ
๊ทธ๋ฌ๋ฉด ๋ค์ View์ Model์ ์ ๋ฌํ์์ ๋์ ๋จ์ ์ ๋ํด ๋ค๋ฃจ์ด๋ณด์.
๐ค ์ ์ฐ์ฑ์ด ๋จ์ด์ง๋ค?
๊ฒฐ๊ตญ ๊ฐ์ฒด๋ฅผ View์ ์ง์ ์ ๋ฌํ๊ฒ ๋๋ฉด ๊ฒฐํฉ๋๊ฐ ์๊ธฐ๊ฒ ๋๊ณ ,
์ด๋ ๊ฐ์ฒด์ ๋ณํ๊ฐ ์์ ๋ View์์๋ ์์ ์ด ํ์ํ ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, Model์ ์ ๋ฌํ๋ ๋์ , Model์ด ๋ณ๊ฒฝ๋์์ ๋ View์์๋ ์์ ์ ํ ํ์๊ฐ ์์ด ๊ตฌํ๋ค๋ฉด?
๋ง์ฝ getter์ ๊ฐ์ ๋ฉ์๋๋ฅผ View์์ ํ์ฉํ๋ค๊ณ ํ๋ฉด, ์ด๋ ์คํ๋ ค Model์ด ์์ ๋จ์ ๋ฐ๋ผ View๋ ๋ฐ์๋๋ ๊ฒ์ด๋ค
์ฆ ์ด๋ Model์ด ๋ณ๊ฒฝ๋์ด๋ View๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ด๋ค!!
๐ค ์บก์ํ ์์น์ด ์๋ฐฐ๋ ์ ์๋ค & ๋ถํ์ํ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋ค?
๊ณผ์ฐ Model๊ฐ์ ๋๊ฒจ์ค๋ค๊ณ ํด์ ์บก์ํ์ ์์น์ ์๋ฐฐ๋๋ ๊ฒ์ผ๊น?
๋ด๊ฐ ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค.
์ด๋ ๊ฒ ๊ตฌ์ฑํ ๊ฒ์ด ๊ณผ์ฐ View๊ฐ Cars์ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ์๋ ๊ฒ์ผ๊น?
=> "๊ทธ๋ ์ง ์๋ค"
๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ ธ์ถ๋์ง ์๋ ์ด์
- ์ ๊ณตํ๋ ๋ฐ์ดํฐ๊ฐ ์ถ์ํ๋์ด ์์:
getWinner()๋ Cars ๊ฐ์ฒด ๋ด๋ถ์ ๋ณต์กํ ๋ก์ง์ด๋ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๊ณ , ์ค์ง ํ์ํ ๋ฐ์ดํฐ(์ฐ์น์ ์ด๋ฆ)๋ฅผ ์ธ๋ถ์ ์ ๊ณตํ๋๋ก ์ถ์ํ๋์ด ์๋ค.
getWinner()๋ ์ฐ์น์ ์ด๋ฆ์ ๋ฐํํ ๋ฟ, Cars ๊ฐ์ฒด์ ๋ด๋ถ ์ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ View์ ์ง์ ์ ์ผ๋ก ๋ ธ์ถํ์ง ์๋๋ค.
View๋ getWinner()๊ฐ ์ด๋ป๊ฒ ์ฐ์น์๋ฅผ ๊ฒฐ์ ํ๋์ง์ ๋ํด ์ ํ์๊ฐ ์๊ณ , ๋จ์ง ๊ฒฐ๊ณผ๋ง ์ฌ์ฉํ๋ค.
์ฆ ๋ด๋ถ ๊ตฌํ์ ๋ณ๊ฒฝ์ด View์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ,
์คํ๋ ค ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ๋ณ๊ฒฝํ์ง ์๊ธฐ ๋๋ฌธ์ MVC์ ์ญํ ๋ถ๋ฆฌ์ ์บก์ํ๊ฐ ์ ์ ์ง๋๋ ๊ฒ์ด๋ค!
๋ํ ์ด๋ฅผ ๋ฐฉ์งํ์ฌ ๊ตฌํํ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๋ค!
- DTO๋ฅผ ํ์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ง ๋๊ฒจ์ค๋ค.
- Observer ํจํด์ ์ด์ฉํ์ฌ ๊ฐ์ ์ ์ธ ์์กด์ฑ์ผ๋ก ๊ตฌํํ์.
- ISP ์์น์ ์ ์ฉํ์ฌ Model์ด View์๊ฒ ํ์ํ ์ต์ํ์ ์ ๋ณด๋ง ์ ๊ณตํ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ ์ ์๋๋ก ํ์.
์ด๋ ๊ฒ ์งํํ๋ค๋ฉด ๊ฒฐ๊ตญ View๋ Model์๋ง ์์กดํ์ ๋ ์ด์ ์ ๊ทน๋ํ๋๋ค!
- ๋ฐ์ดํฐ ์ ๊ณต์ ์ผ๊ด์ฑ:
- Model์ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค.
View๋ ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ Model์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. - ์ด๋ฅผ ํตํด View๋ ํญ์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ , Model๊ณผ View ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ด ๋ช ํํด์ง๋ค.
- Model์ ์ ํ๋ฆฌ์ผ์ด์
์ ํต์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ๊ด๋ฆฌํ๋ค.
- ์ญํ ์ ๋ถ๋ฆฌ:
- Model์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํ๊ณ , View๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
View๊ฐ Model์ ์์กดํ๋ ๊ตฌ์กฐ๋ฅผ ํตํด, View๋ ์ค์ง ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐ๋ง ์ง์คํ๊ณ , ๋ฐ์ดํฐ ์์ฒด๋ ๋ก์ง์ ์ํ ๋ณ๊ฒฝ์ Model์ด ์ฒ๋ฆฌํ๋๋ก ์ญํ ์ด ๋ถ๋ฆฌ๋๋ค. - ์ด๋ก ์ธํด View๋ ๋ถํ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ง์ง ์๊ณ , ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ ํํ์๋ง ์ง์คํ ์ ์๋ค.
- Model์ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํ๊ณ , View๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
- ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ฐ์:
- Model์ ์์กดํ๋ View๋ Model์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์๋์ผ๋ก ํ๋ฉด์ ๊ฐฑ์ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, Model์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ View์์ ์ฆ์ ๋ฐ์ํ์ฌ ์ฌ์ฉ์์๊ฒ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค. - ์ด๋ฅผ ํตํด View๋ ์ง์ํด์ ์ฌ์ฉ์์๊ฒ ์ต์ ์ํ๋ฅผ ํ์ํ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ค.
- Model์ ์์กดํ๋ View๋ Model์์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์๋์ผ๋ก ํ๋ฉด์ ๊ฐฑ์ ํ ์ ์๋ค.
- ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์:
- View๊ฐ Model์ ์์กดํ๋๋ก ์ค๊ณํ๋ฉด, View๋ Model์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํ๋ ๋ฐ๋ง ๊ด์ฌํ๊ฒ ๋๋ฏ๋ก, Model์ ๋ด๋ถ ๊ตฌํ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ View๋ ํด๋น ๋ฐ์ดํฐ ์ธํฐํ์ด์ค์๋ง ์์กดํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ ์ํฅ์ ๋ ๋ฐ๋๋ค.
โญView๊ฐ Model์ ์์กดํ๋๋ก ๊ตฌํํ์! ๋จ, Model๊ณผ View ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ช ํํ๊ฒ ํ์.โญ
โ ๋ฌด๋ถ๋ณํ ์์ ์ฒ๋ฆฌ..
์ด๋ฒ์ ์์์ ๋ํ ์ง์ ์ ์ ๋ง ๋ง์ด ๋ฐ์๋ค..
์ด๋ ๊ฒ ์ง์ ์ ๋ฐ๊ณ ๋์ ์์์ ์ฌ์ฉ์ ๋ํ ๊ธฐ์ค์ ๋ช ํํ๊ฒ ์ธ์ฐ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฌ๊ณ ๋์ ์์ํ๋ฅผ ํ๋ ์ด์ ๋ฅผ ๋ค์ ๊ณฐ๊ณฐ์ด ์๊ฐํด ๋ณด์๋ค.
๋งค์ง ๋ฆฌํฐ๋ด์ ์์ํ ํ๋ ๋ด๊ฐ ๋ด๋ฆฐ ๊ฒฐ๋ก ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋งค์ง ๋ฆฌํฐ๋ด ๊ทธ ์์ฒด๋ก ์ฐ์ด๋ฉด ํด๋น ๋ฆฌํฐ๋ด์ด ์ด๋ป๊ฒ ์ฐ์ด๋์ง ์ ์ ์๋ค.
์ฆ ๋งค์ง ๋ฆฌํฐ๋ด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ์์๋ก ์ฒ๋ฆฌํ์ฌ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ ์ง ๋ณด์์ฑ์ ๋์ด์!
๊ทธ๋ฌ๋ฉด ๊ณผ์ฐ ๋๋ ์๋ฏธ ๋ถ์ฌ๋ฅผ ๋ชฉ์ ์ผ๋ก ์์ํ๋ฅผ ํ์๋๊ฐ?
โ๏ธ ๋ฌด๋ถ๋ณํ ์์์ ์ฌ์ฉ, ์ด๋ป๊ฒ ๊ธฐ์ค์ ์ธ์ธ ๊ฒ์ธ๊ฐ?
์์ ์ฝ๋๋ ๋ด๊ฐ ์ด๋ฒ ๋ฏธ์ ๋์ ๋ํ์ ์ธ symbol์ ํด๋์ค๋ก ๊ด๋ฆฌํ ๋ชฉ๋ก์ด๋ค
์ฝ๋ก , ์ฝค๋ง, ์คํ์ด์ค ๋ฑ๋ฑ..
๋จ์ํ ๊ตฌ๋ถ์๋ง ๋ณด๊ณ ๋ ์ ์ ์๋ symbol์ธ๋ฐ ์ด๋ฅผ ๋งค์ง ๋ฆฌํฐ๋ด์ด๋ผ๊ณ ํ ์ ์๋๊ฐ?
๊ณฐ๊ณฐ์ด ์๊ฐํด ๋ณด๋ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ฌด ๋ฌด๋ถ๋ณํ๊ฒ ์์๋ฅผ ์ฒ๋ฆฌํ ๊ฒ ๊ฐ๋ค..
์ค์ ๋ก ์์ ๊ฐ์ด ๋๋ฌด ๋ฌด๋ถ๋ณํ๊ฒ ์์๋ฅผ ์ฌ์ฉํด์ ์คํ๋ ค ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๊ฒ์ด๋ค.
์ด์ ๋ํด์๋ ๋ค์ํ ๋ฆฌ๋ทฐ๊ฐ ๋ฌ๋ ธ๋๋ฐ
์์ ๊ฐ์ด ์ค์ ๋ก Junit5์์ ์ฐ์ด๋ ๋ฉ์๋์กฐ์ฐจ ์ฝ๋ก ๊ณผ ์คํ์ด์ค์ ๋ํด์๋ ์์์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์, ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๋ ๋ฆฌํฐ๋ด์๋ง ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋ ์ข์ ๋ณด์ธ๋ค!
โ๏ธ ๊ฐ์ ์์ฑ์ ๊ฐ์ด๋ผ๋ ์๋ฏธ๊ฐ ๋ค๋ฅด๋ค๋ฉด ์์๋ฅผ ๊ฐ๊ฐ ์ ์ธํ์.
๋ํ ์ด๋ฒ์ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ๋ ZERO์ ๋ํด์ ์๋ฏธ๋ ๋ค๋ฅธ๋ฐ ๊ฐ์ ์์ฑ์ ๊ฐ์ด๋ผ๊ณ ๊ฐ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ๊ฐ ์์๋ค..
ํ์ง๋ง ์์์๋ ๋ค๋ฃจ์๋ฏ์ด ์์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฒฐ๊ตญ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋, ๊ฐ์ ์์ฑ์ ๊ฐ์ด๋ผ๊ณ ๋จ์ ZERO๋ผ๋ ์์๋ฅผ ์ฌ์ฉํ๊ฒ ๋ผ๋ฒ๋ฆฌ๋ฉด ์์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ ๋ณธ๋์ ๋ชฉ์ ์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, ๊ฐ์ ์์ฑ ๊ฐ 0์ด๋ผ๋ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฐ์ธ๋ค๋ฉด ๊ฐ๊ฐ์ ์๋ฏธ์ ๋ง๊ฒ ์์๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ์!
โ๏ธ ์์ ์ ์ธ์ ์์น?
๋ํ ์ด๋ฒ ๋ฏธ์ ์ ์ํํ๋ฉด์ errorMessage๋ฅผ ํ ๊ณณ์๋ค๊ฐ ๊ด๋ฆฌํ์๋๋ฐ,
์ค์ ๋ก ์ฌ์ฉ๋ ๊ฒ์ ํ์ธํด ๋ณด๋ฉด, ๊ฐ๊ฐ์ ํด๋์ค์์ static์ผ๋ก import ํ๋ ๊ณผ์ ์์ 1๋ฒ, ์ค์ ๋ก ์ฐ๋ ๊ณผ์ ์์ 1๋ฒ
์ด ๋ ๋ฒ ์ฌ์ฉ๋์๋ค.
์ฆ ํด๋์ค ๋ด์์ ์ ์ธํด๋ ์ถฉ๋ถํ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
์ด๋ ๊ฒ ํด๋์ค ๋ด์์ ์ ์ธํด๋ ์ถฉ๋ถํ๋ฐ, ๋ฐ๋ก ํด๋์ค๋ก ๋นผ๊ฒ ๋ผ๋ฒ๋ฆฐ๋ค๋ฉด ์ปจํ ์คํธ ์ดํด ๋น์ฉ์ด ํฌ๊ฒ ๋ฐ์ํ๋ค.
๊ฐ๊ฐ์ ์ฌ์ฉ์ ๋ํ ์ปจํ ์คํธ ์ดํด ๋น์ฉ์ ์ ๋ฆฌํด ๋ณด์.
๐ค ๋ฆฌํฐ๋ด ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉ
์ปจํ ์คํธ ์ดํด ๋น์ฉ : ํ ๋จ๊ณ
- ์ฅ์ : ์ดํด ๋น์ฉ์ด ํ ๋จ๊ณ์ด๋ค. ๋ฐ๋ก ๋ณด๋ฉด ๋๋๊ฐ
- ๋จ์ : ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์์ผ๋ฏ๋ก ์ด๋ค ์๋ฏธ์ธ์ง ํ์ธํ๊ธฐ ์ด๋ ต๋ค.
๐ค ํด๋์ค ๋ด์์ ์์์ฒ๋ฆฌ
์ปจํ ์คํธ ์ดํด ๋น์ฉ : ์์๊ฐ => ํ๋ ์ ์ธ ์์๊ฐ
- ์ฅ์ : ๋งค์ง ๋ฆฌํฐ๋ด์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๋ค.
- ๋จ์ : ๋ ๋จ๊ณ์ ์ดํด ๋น์ฉ (but ๊ฐ๋นํ ๋งํ๋ค.)
๐ค ๋ฐ๋ก ์์ ํด๋์ค๋ก ์ฒ๋ฆฌ
์ปจํ ์คํธ ์ดํด ๋น์ฉ : ์์๊ฐ => static import ํ ํด๋์ค => ํด๋์ค ๋ด๋ถ๋ก ๋ค์ด๊ฐ ํ์ธ
- ์ฅ์ : ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์ง๋ณด์์ฑ์ ์ฉ์ดํ๋ค.
- ๋จ์ : ์ด ์ธ ๋จ๊ณ์ ์ดํด ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
์ฆ ํด๋์ค ๋ด์์๋ง ์ฌ์ฉ๋๋ ๋งค์ง ๋ฆฌํฐ๋ด์ด๋ผ๋ฉด ํด๋์ค ๋ด์์ ์์์ฒ๋ฆฌ๋ฅผ ์งํํ๊ณ ,
์ฌ๋ฌ ๊ตฐ๋ฐ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ฐ๋ก ์์ ํด๋์ค ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํ์!
โญโญโญโญโญ
๐ ๋ฌด๋ถ๋ณํ ์์ ์ฌ์ฉ
์ฝ๋ก , ์คํ์ด์ค, ์ค ๋ฐ๊ฟ ๋ฑ๋ฑ ๊ตณ์ด ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ง ์์๋ ๋๋ ๋ฌธ์์ ๋ํด์ ํ๋ ์์์ฒ๋ฆฌ๋ ์คํ๋ ค ๊ฐ๋ ์ฑ์ ํด์น๊ณ ์ ์ง๋ณด์์ฑ์ ์ด๋ ต๊ฒ ํ๋ค.
=> ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๋ ๋งค์ง ๋ฆฌํฐ๋ด์๋ง ์์ ์ฒ๋ฆฌํ์!
๐ ๊ฐ์ ์์ฑ ๊ฐ = ๊ฐ์ ์์?
์์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ํ์์ด๋ค.
์ฆ, ๊ฐ์ ์์ฑ ๊ฐ์ด๋ผ๋ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๋ดํฌํ๊ณ ์๋ค๋ฉด ๊ฐ๊ฐ์ ์๋ฏธ์ ๋ง๊ฒ ์์๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ์!
๐ ์์ ์ ์ธ ์์น
ํด๋น ํด๋์ค ๋ด์์ ์ฐ์ด๋ ์์๋ค์ ํด๋น ํด๋์ค ๋ด์์ ์ ์ธํ์
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ค๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์์๊ฐ ์๋ค๋ฉด ํด๋์ค๋ enum์ ํ์ฉํ์ฌ ์์์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์.
โญโญโญโญโญ
โ int์ Integer์ ์ฐจ์ด
์ด๋ฒ์ ๋ฏธ์ ์ ์งํํ๋ฉด์ int์ Integer์ ์ฌ์ฉ์ ๋ํ ์ง์ ์ ๋ฐ์ ๋ถ๋ถ์ด ์๋ค.
์ด๋ฒ ๋ฏธ์ ์์ ๊ฐ๊ฐ์ ๋ฉ์๋์ ์ญํ ๊ณผ int์ integer์ ํ์์ฑ์ ๊ด๋ จ์ง์ด์ ๊น๋ํ๊ฒ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ฒจ์ฃผ์ จ๋ค!
๊ทธ๋ฆฌ๊ณ int์ integer์ ์ฐจ์ด์ ์ ๋ํด ํ ๋ฒ ๋ค์ ์ ๋ฆฌํด ๋ณด์๋ค.
int์ integer์ ์ฐจ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฆ int๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ์, ๋จ์ํ ์ซ์ ๊ฐ์ ์ ์ฅํ๊ณ ์ฐ์ฐํ ๋ ์ ๋ฆฌํ๋ค.
๋ฐ๋ฉด, Integer๋ ๊ฐ์ฒด๊ฐ ํ์ํ๊ฑฐ๋ ์ปฌ๋ ์ ๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ ๋, ๋๋ null ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ์ ๋ฆฌํ๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ ๊ธฐ์ค์ ๋ํด ์ ํด๋ณด์๋ค.
โญ
int : ๋จ์ํ ์ซ์ ๊ฐ์ ์ ์ฅํ๊ณ ์ฐ์ฐํ ๋ ์ฌ์ฉ
Integer : null ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ฑฐ๋ ์ปฌ๋ ์ ๊ณผ ํจ๊ป ์ฌ์ฉํด์ผ ํ ๋ ์ฌ์ฉ
โญ
โ ์์ฃผ ์ฌ์ฉ๋๋ ๋ก์ง, ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ์ด ์๋ค๋ฉด util๋ก ๋นผ์
์ด๋ฒ ๋ฏธ์ ์ ์งํํ๋ฉด์ ์๋ฌด๋๋ ๊ฐ์ฅ ์ค์ํ๊ฒ ์ฒ๋ฆฌํ๋ ์ ์
"๋ชจ๋ธ ๋ด์์ validate ์ฒ๋ฆฌ" ์๋ ๊ฒ ๊ฐ๋ค.
๋ฐ๋ผ์ valdiate ๊ฒ์ฆ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ์ ๋๋๊ธฐ๋ ํ์๋ค.
๊ทธ๋ฌ๋ ๊ณผ์ ์์ model์ parserInt๋ฅผ ์ง์ด๋ฃ์ด์ try -catch ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ์์ธ์ฒ๋ฆฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋๋ก ๊ตฌํํ์๋ค.
๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๋์, ์ด๋ฌํ ์๊ฐ์ด ๋ค์๋ค
"๊ณผ์ฐ parseInt๋ ๋น์ฆ๋์ค ๋ก์ง์ธ๊ฐ?
๋น์ฆ๋์ค ๋ก์ง์ด ์๋๋ผ๋ฉด ๋ฐ๋ก util ํด๋์ค๋ก ๋นผ์ด์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๋ ์ข์ง ์์๊น?"
ํด๋น ๊ฐ์ฒด์์ parseInt๋ ์ฃผ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋๋ค.
๋ฐ๋ผ์ util ๋ ์ด์ด์์ static์ผ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ด ์๋ค.
- 1๏ธโฃ ๋ชจ๋ธ์ ๋น์ฆ๋์ค๋ก์ง์ ๋ ์ง์คํ ์ ์์ด์ง๋ค!
- 2๏ธโฃ ๋ ๋ค๋ฅธ ๋ชจ๋ธ์ด๋ ์
๋ ฅ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์์ ์ ์๋ก ๋ณํํ๋ ๋ก์ง์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- 3๏ธโฃ ์ ์ ๋ณํ ๋ก์ง๊ณผ ์๋ฌ๋ฉ์์ง๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ฏ๋ก ์ ์ง๋ณด์์ฑ์๋ ์ฉ์ดํ๋ค.
๋ฐ๋ผ์ ์์ ๊ฐ์ด util ํด๋์ค๋ก ๋ฐ๋ก ๋นผ์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ ๋ณด์ธ๋ค..!
โญ์์ฃผ ์ฌ์ฉ๋๋ ๋ก์ง์ด๊ณ , ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ์ด ์๋ค๋ฉด util ํด๋์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์โญ
โ ์ค๋ณต๋๋ ๋ค์ด๋ฐ์ ํผํ์.
์ด๋ฒ์ ๋ค์ด๋ฐ๊ณผ ๊ด๋ จํด์ ์ง์ ๋ฐ์ ๋ถ๋ถ๋ค์ด ์๋ค.
์ด๋ฒ ๋ฏธ์ ์์ ์ค๋ณต๋๊ฒ ๋ค์ด๋ฐ์ ํ ๋ถ๋ถ์ด ๋ง์๋ค.
๋ํ์ ์ธ ์์๋ก Car ๊ฐ์ฒด์์ carName์ผ๋ก ์ ์ํ์๋ค.
1์ฃผ ์ฐจ ๊ณตํต ํผ๋๋ฐฑ์๋ ๋์๋ฏ์ด
"๋ฌธ๋งฅ์ ์ค๋ณตํ๋ ์ด๋ฆ์ ์์ ํ์"
์ด์ฒ๋ผ, ๋ฌธ๋งฅ์ด ์ค๋ณต๋๋ค๋ฉด CarName name์ผ๋ก ๋ค์ด๋ฐ์ ํ๋ ๊ฒ๋ ์๋ฏธ์ ๋ฌ์ ์์ด์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐ์ด ๋ ๋ค!
โญ๋ฌธ๋งฅ์ ์ค๋ณตํ๋ ๋ค์ด๋ฐ์ ์์ ํ์โญ