๐ 1์ฃผ์ฐจ ์์ ์
์ทจ์ค ๊ธฐ๊ฐ ์ค 1๋ฌ์ด๋ ์๊ฐ์ ํ๋ฆฌ์ฝ์ค์ ํฌ์ํ๋ ๋งํผ ๊ผญ ์ฑ์ฅํ๊ณ ์ถ์๊ธฐ์ ์ด๋ป๊ฒ ํ๋ฉด ํ๋ฆฌ์ฝ์ค์ ์ ๋ณด๋ค ์ฑ์ฅํ ์ ์์์ง ๊ณ ๋ฏผํ๊ณ ์ด๋ฒ ์ฃผ์๋ 2๊ฐ์ ๋ชฉํ๋ฅผ ์ธ์ ๋ค.
โ ๋ชฉํ
์ฒซ ๋ฒ์งธ๋ ํ๋ฆฌ์ฝ์ค๋ฅผ ์งํํ๋ฉฐ ๋ชจ๋ฅด๋ ์ฉ์ด๋ค์ ๋ค ์ฐพ์๋ณด๊ณ ์ดํด ํ๊ธฐ.
๋ ๋ฒ์งธ๋ ์ต๊ทผ์ ํ์ตํ ๋๋ค์๊ณผ ๊ฐ์ฒด์งํฅ์ ํ์ฉํด์ 1์ฃผ์ฐจ ๋ณด๋ด๊ธฐ.
์ต์ ์ด 2๊ฐ๋ฅผ ์ทจ์ค์์ด์ด์ ํ๋ฆฌ์ฝ์ค์๋ง ์ง์คํ ์ ์๋ ์๊ฐ๊ณผ ๋ ํ์ด๋ ๊ธธ์ ๊ฑธ์ด์จ ๋ ธ๋ ฅ๊ณผ ๊ทผ์ฑ์ ๊ฐ์ง๊ณ ์ด๋ฃจ๊ณ ์ ํ๋ค.
๋ถ๋ช ํ ์ฑ์ฅํด์๊ฒ ์ง!?
๐ ์ซ์ ์ผ๊ตฌ ๊ฒ์ ๊ตฌํ
โ ๊ตฌํ ์ค์ ๋ง๋ ์ค๋ฅ ํด๊ฒฐ๊ณผ ์์ฌ์
๋๋ ์ด์ ๊ธฐ์ ํ๋ฆฌ์ฝ์ค ๋ฌธ์ ๋ค ์ค ์ ์ผํ๊ฒ ๋ฑ ํ ๋ฌธ์ ๋ฅผ ํ๋ฃจ๋์ ํ์ด๋ดค์๋๋ฐ, ๊ทธ๊ฒ ์ซ์ ์ผ๊ตฌ ๊ฒ์์ด์๋ค.
๊ทธ๋ฌ๋, ๊ตฌํํ๋ฉด์ ๊ณ์ ์๋ฌ๋ฅผ ๋ง์ฃผํ์์ง๋ง ํด๊ฒฐํ์ง ๋ชปํ๊ณ , ํ๋ฆฌ์ฝ์ค๋ฅผ ์์ํ์๋ค.
๋คํํ(?)๋ 6๊ธฐ ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ๋ ์ซ์ ์ผ๊ตฌ ๊ฒ์์ด์๋ค. ์ด๋ฒ์๋ ์๋ฌ๋ฅผ ๊ผญ ํด๊ฒฐํด์ผ ํ๋ค๋ ๋ง์์ ๋์ปฅ ๊ฒ์ด๋ฌ์ง๋ง ์ด๋ฒ์๋ ๊ตฌํํ๋ฉด์ ์ค๋ฅ๋ฅผ ๋ง์ฃผํ์ง ์์์ ๊ธฐ์ ๋ง์์ ์ฑ๊ธ๋ฒ๊ธ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋๋ ค๋ดค๋ค! ๊ทธ๋ฌ๋ ์ค๋ฅ๊ฐ ๋๋ฉฐ ์คํจํ๋ค...
์ค๋ฅ๋ [๊ฒ์์ ์์ํ ์ง ๋ง์ง ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๋ก์ง์์ ์๋ชป ์ ๋ ฅํ ๊ฒฝ์ฐ ์์ธ๋ฅผ ํฐ๋จ๋ ค์ค ๊ณณ]์์ ๋ฐ์ํ๋ค. ๋๋ "์์ธ๋ฅผ ํฐ๋จ๋ ค์ ์ข ๋ฃ์ํค๋ผ๋ ์๊ตฌ์ฌํญ์ ๋ง์ท์ ๋ฟ์ธ๋ฐ ์ ํ๋ฆฐ๊ฑฐ์ผ!!" ํ๋ค.
๋ค์ ๋ , ์ฐํ ์ฝ์์ ์ ๊ณตํ ํ ์คํธ ์ฝ๋์ ๋ฉ์๋๋ค์ ๋ด๋ถ์ ์ผ๋ก ํ๋์ฉ ์ดํด๋ณด์๊ณ , ์ด๊ฑฐ๋ค!! ์ถ์ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ๋ฏ๋ค๋ณด๋ฉด thenReturn์ด๋ผ๋ ๋ฉ์๋๊ฐ ๋์จ๋ค.
thenReturn ๋ฉ์๋์ ์ค๋ช ์ checked exception (๋นจ๊ฐ ์ค)์ ๋ฐ๊ฒฌํ์๊ณ , ์ด๋ ธํ ์ด์ ์๋ unchecked๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์๋ค.
@SuppressWarning์ unchecked๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ๊ณ ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ถ๋ถ์ ๊ฒฝ๊ณ ํ์ง ๋ง๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ์ด๊ณ ,
๋นจ๊ฐ ์ค์ checked exception์ผ๋ก ๋ฌด์กฐ๊ฑด ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ค์ผ ํ๋ ์์ธ์ด๋ค.
๊ทธ๋์ ๋๋ "๊ฒ์์ ์๋ก ์์ํ๊ฑฐ๋ ์ข ๋ฃํ ๋ ์ฌ์ฉ์๊ฐ ์๋ชป ์ ๋ ฅ์ ํ๋ฉด ์์ธ๋ฅผ ํฐ๋จ๋ฆฌ์ง๋ง๊ณ ์ก์์ผ ํ๋๊ตฌ๋!! ์์ธ๋ฅผ ์์ก์ผ๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์๋ตํ๋ผ!!" ๋ผ๊ณ ์๊ฐํ๋ค.
๊ทธ๋์, ์๋์ ์๋ [๊ฒ์์ ์๋ก ์์ํ ์ง ๋ง์ง์ ๋ฉ์๋]๋ฅผ try-catch๋ฌธ์ผ๋ก ๊ฐ์ธ์ฃผ์ด ์์ธ๋ฅผ ์ก์์ฃผ์๋ค.
์ด์ ๋ ํ ์คํธ์ผ์ด์ค ํต๊ณผํ๊ฒ ์ง? ํ๋ฉด์ ์ฑ๊ธ๋ฒ๊ธํ๊ฒ ๋๋ ธ์ง๋ง ์คํจํ๋ค. ์ด๋ฒ์ "1๋ณผ 1์คํธ๋ผ์ดํฌ"๋ผ๋ ํ ์คํธ๊ฐ ํต๊ณผํ์ง ๋ชปํ๋ ๊ฒ์ด์๋ค.
๊ทธ๋์, System.out.println์ ๋ชจ๋ ๋ณ์๋ง๋ค ๋ฃ์ผ๋ฉด์ ๋๋ฒ๊น ํ๊ธฐ ์์ํ๊ณ , ์์ธ์ ์ฐพ์ ์ ์์๋ค.
๋ค์์ ์ปดํจํฐ๊ฐ ์์ฑํ ๋๋ค ์ซ์๋ฅผ ๋ฐ๋ List<Integer>ํ์ ์ด๋ค.
createRandomComputerNumber ๋ฉ์๋๋ ์ซ์ 1๊ฐ์ฉ ๋ง๋ค์ด์ List์ ๋ฃ์๊ธฐ ๋๋ฌธ์ List๋ [1, 3, 4]์ ๊ฐ์ด ์ซ์๊ฐ ํ ๊ฐ์ฉ ๋ค์ด๊ฐ ์์๊ฒ์ด๋ค.
๊ทธ๋ฌ๋, ์๋ ์ฌ์ง์ฒ๋ผ List ์์ ๊ฐ์ ๊บผ๋ผ ๋, ๋ฐ๋ณด๊ฐ์ด get(0)ํ๋ฉด 134๊ฐ ํ ๊บผ๋ฒ์ ๋์ฌ ์๊ฐ์ ํ๋ ๊ฒ์ด์๋ค..
๊ทธ๋์, ๋ก์ง์ 1,3,4๊ฐ ๋์ฌ ์ ์๋๋ก ๋ฐ๊ฟ์ฃผ์๊ณ , ์ ์์ ์ผ๋ก ๋์ํ ์ ์์๋ค.
์ฌ๊ธฐ์ ์ปดํจํฐ ๋๋ค ์ซ์๋ฅผ ๋ง๋๋ ๋ก์ง ์์ฒด๊ฐ ํ๋ ธ๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ์์ํ ์ง ๋ง์ง ์ ํ๋ ๋ฉ์๋์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํจํ์ ์๋ ์๊ฒ ๋ค๋ผ๋ ์๊ฐ์ด ๋ค์ด ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ค์ ๋๋ ค๋ณด์๋ค.
์ค๋ฅ๊ฐ ๋ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ทธ๋ ๋ค. [๊ฒ์์ ์์ํ ์ง ๋ง์ง] ๋ฉ์๋๋ ์ ๊ตฌํํ ๊ฒ์ด์๊ณ , ์์ธ์ [1,3,4] ์ค ํ๋์ ์ซ์๋ง ๊บผ๋ด์ ๋ฌธ์ ์๋ ๊ฒ์ด์๋ค๐
๊ทธ๋ฌ๋, ๋ฌธ์ ๋ ํด๊ฒฐ๋์์ง๋ง List ์์ ์๋ชป๋ ๊ฐ์ ๊บผ๋๋๋ฐ List์๋ ์๊ด์๋ [๊ฒ์์ ์์ํ ์ง ๋ง์ง]์ ๋ฉ์๋์์ ์ ์ค๋ฅ๊ฐ ๋ฌ๋์ง ํ์ธ์ ๋ชปํ๋ค.๐ฅ
์ฝ๋๋ฅผ ๋ณต๊ธฐํด์ ์ ์ ์ฝ๋๋ก ๋์๊ฐ๋ด๋ ์ฒ์์ ๋ง๋ ์ค๋ฅ๋ฅผ ๋ค์ ๋ง์ฃผํ ์ ์์๋ค..
๊ถ๊ธ์ฆ์ด ๋จ์์ฑ๋ก ์ด๋ ๊ฒ 1์ฃผ์ฐจ๊ฐ ๋ง๋ฌด๋ฆฌ๋์ด ์์ฝ๋ค. ๋ ๋ค๋ฅธ ๋ฐฐ์์ ์ป์ ์ ์์์ํ ๋ฐ!
์ค๋ฅ๋ฅผ ๋ง๋๋ฉด ๋นํฉํ์ง ๋ง๊ณ ๋ฐฐ์ธ ๊ฒ์ด ์๊ฒผ๋ค๊ณ ๊ธฐ๋ปํด๋ณด์!
โ ํ ์คํธ ์ฝ๋์ ํ์์ฑ
์ด๋ ๋ก์ง์์ ์ค๋ฅ๊ฐ ์๊ธด์ง๋ ๋ชฐ๋๊ธฐ์ ๋ชจ๋ ๋ณ์์ ๊ฐ์ print๋ฌธ์ผ๋ก ์ถ๋ ฅํ๋ฉฐ ๋๋ฒ๊น ํด์ ์์ธ์ ์ฐพ์ ์ ์์๋ค.
์ด ๊ณผ์ ์ด ๋๋ฌด ๊ท์ฐฎ์๋ค. print๋ฌธ ์์ฑํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ฆฌ๊ณ ์ ๋ ฅ๊ฐ ๋ฃ๊ณ ํ๋ ๊ณผ์ ์ด ๋ฐ๋ณต์ ๋ฐ๋ณต์ ๊ฑฐ๋ญํ๋ค.
์ด๋ก ์ธํด ์ผํ ์๊ณ ๋ง ์๋ ๋ก์ง์ ๊ตฌํํ๊ธฐ ์ ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑํ๋ TDD๊ฐ ์๊ฐ๋ฌ๋ค.
๋ง์ฝ, ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค๋ฉด ์ด๋ ๋ก์ง์์ ์ค๋ฅ๊ฐ ๋ฌ๋์ง ๋ฐ๋ก ์์์ํ ๋ฐ ๋ง์ด๋ค.
์์ผ๋ก ์์ ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ ์ธ๊ฐ 3์ฃผ์ฐจ์ ํ ์คํธ ์ผ์ด์ค๋ ๊ฐ์ด ๋ง๋ค๋ผ๋ ์๊ตฌ์ฌํญ์ด ์ ์๋์ง ์๊ฒ ๋์๊ณ , ๊ธฐ๋ฅ์ ํ๋ ๋ง๋ค ๋ ๋ง๋ค ๊ธฐ๋ฅ์ด ์์ํ๋๋ก ์ ๋์ํ๋์ง ํ์ธํด์ผ์ง!
โ Javadoc๋ฌธ์๋ ์๋ก ์ฝ๊ธฐ
๋ง์ง๋ง์ผ๋ก, ๋ด๊ฐ ์ฐฉ๊ฐํ์๋ ์ด ๋ฉ์๋๋ฅผ ์ง๊ณ ๋์ด๊ฐ์.
@SuppressWarning์ unchecked๋ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ๊ณ ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ถ๋ถ์ ๊ฒฝ๊ณ ํ์ง ๋ง๋ผ๊ณ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ง๋ค. ์ฆ, ์์ธ ์ฒ๋ฆฌ์ ์๊ด์ด ์์๋ค.
๋ด๊ฐ ์คํดํ ๋นจ๊ฐ ์ค์ thenReturn์ด ์๋ ๋ฐ์ ์๋ thenThrow์ ๋ํ ์ค๋ช ์ด์๋ค!
์ฆ, JavaDoc์ ์ค๋ช ์ ๋ณด๊ณ ์ถ์ ๋ฉ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์ค๋ช ๋์ด ์๋ ๊ฒ๋ ์๊ฒ ๋์๊ณ , thenReturn๋ฉ์๋๋ ์์ธ ์ฒ๋ฆฌ์ ๋ํ ๋ด์ฉ์ด ์์์ ํ์ธํ๋ค!!๐
๐ ์ซ์ ์ผ๊ตฌ ๊ฒ์ ๋ฆฌํฉํ ๋ง
๋๋ ์ง๊ธ๊ป ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค๋ง ํ๋ฉด์ ํ ํด๋์ค์์๋ง ์ฝ๋๋ฅผ ์์ฑํด์๋ค. ์ต๊ทผ์ ํ์ตํ '๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด'๋ฅผ ์ฝ๊ณ , ์ฒ์์ผ๋ก ์ฝ๋์ ์ ์ฉํ ๊ฒ์ด ์ซ์ ์ผ๊ตฌ ๊ฒ์์ด๋ค. ๋คํํ dfs์ ์ํ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ต์ํ๊ธฐ์ ๋ฉ์๋ ๋ถ๋ฆฌ๋ ์ด๋ ต์ง ์์๋ค.
โ ์ซ์๋ฅผ ์์ํ ํ๊ธฐ
์ซ์ ์ผ๊ตฌ ๊ฒ์์๋ ์ฌ์ฉ์๊ฐ 1์ ์ ๋ ฅํ๋ฉด ์ฌ์์, 2๋ฅผ ์ ๋ ฅํ๋ฉด ์ข ๋ฃ๋ฅผ ํ๋๋ก ํ๋ ์๊ตฌ์ฌํญ์ด ์๋ค.
๊ตฌํ์ ํ๋ฉด์ ์ฌ๋ฌ ํด๋์ค์ 1๊ณผ 2๊ฐ ์ค๋ณต๋ ๊ฒ์ด ์ ๊ฒฝ์ฐ์๊ณ , 1๊ณผ 2๊ฐ 100๊ณผ 1000์ผ๋ก ๋ณ๊ฒฝ์ด ๋๋๋ผ๋ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ค. ๊ทธ๋์, 1๊ณผ 2๋ฅผ ์์ํ ํ์๋ค.
์์๋ ๋ณํ์ง ์๊ณ ๊ณ ์ ๋ ๊ฐ์ ๋ด๋ ๋ณ์์ด๋ค.
์์ํ ํ๋ ๋ฐฉ๋ฒ์ ์๋ ์์์ ๊ฐ์ด static ๊ณผ final์ ๋ถ์ด๊ณ , ๊ฐ(1๊ณผ 2)์ ์ด๋ฆ์ ๋ถ์ฌ ๋๋ฌธ์๋ก ์์ฑํด์ฃผ๋ฉด ๋๋ค.
* final : ํ ๋ฒ ๊ฐ์ ํ ๋นํ๋ฉด ์ฌํ ๋น์ด ๋ถ๊ฐํด์ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ์ด๋ค.
โ public static ๊ณผ private static ์ ์์
์์ํ๋ฅผ ํ๋ค๋ณด๋ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด public์ธ ์์์ private์ธ ์์๊ฐ ๊ฐ์ด ์์๋ค.
์ด๋ค ๊ฐ์ ์์๋ ์๊ด ์๋์ง ๊ถ๊ธํด์ ์ฐพ์๋ณด์๊ณ , ํ์ค ์๋ฐ ์ปจ๋ฒค์ ์์ ๊ถ๊ธ์ฆ์ ํด๊ฒฐํ ์ ์์๋ค.
๊ทธ๋ฌ๋, ํ๋ฆฌ์ฝ์ค์ ์๊ตฌ์ฌํญ ์ค ํ๋๋ ๊ตฌ๊ธ ์๋ฐ ์ปจ๋ฒค์ ์ ์งํค๋ ๊ฒ์ด๋ค.
๊ทธ๋์, ๊ณต๋ถํ๋ ์๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์ 3.4.2 ํด๋์ค ๋ด์ฉ ์์๋ฅผ ๋ค์ ์ฝ์ด๋ณด์๋ค.
3.4.2 ๋ด์ฉ์๋ ํด๋์ค ๋ด๋ถ ์์๋ ์๊ด ์์ง๋ง ๋จ์ง "์ค๋ช ํ ์ ์์ ์ ๋์ ์์๋ฅผ ์ง์ผ์ผ ํ๋ค"๋ผ๊ณ ๋ช ์ ํ๋ค. ์ฆ, ์ค๋ช ํ ์ ์์ ์ ๋๋ฉด ๋๋ ๊ฒ์ด๋ผ๊ณ ์ดํดํ๋ค.
๊ทธ๋์, ๋๋ ์ฝ๋ ์ปจ๋ฒค์ ์ด๋ผ๋ ์๋ฏธ๋ฅผ ํ ๋ฒ ๋ ์๊ฐํด์ ํด๋์ค ๋ด๋ถ ์์๋ฅผ ํ์ค ์๋ฐ ์ปจ๋ฒค์ ์ ์ฌ์ฉํ๋ค๋ฉด ์์๋ฅผ ์ค๋ช ํ ์ ์์ ๋ฟ์๋๋ผ ์ปจ๋ฒค์ ์ ํ๋ ์๋ฏธ๋ ์งํฌ ์ ์์ง ์์๊น๋ผ ์๊ฐํ๋ค.
ํ์ค ์๋ฐ ์ปจ๋ฒค์ ์ ํด๋์ค ๋ด๋ถ ์์๋ ๋ค์๊ณผ ๊ฐ๊ณ , ์ด๋ ๊ฒ ์งํค๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
1. public static ์์
2. private static ๋ณ์
3. private instance ๋ณ์
4. public method → private method(์์ ์ ํธ์ถํ๋ public ํจ์ ์งํ)
โ ๊ฐ์ฒด์ static ๋ฉ์๋๋ ๋ง๊ณ , ๋ฉค๋ฒ ๋ณ์๋ ์๋ค?
ํ ์คํธ ์ฝ๋๊ฐ ์ฑ๊ณตํ๋ ๋ด ์ฝ๋์ ๊ฐ์ฒด์๋ ๋ฉค๋ฒ๋ณ์(์ํ)๊ฐ ์์ด์ static ๋ฉ์๋๊ฐ ๋ง์๋ค.
์๋ฅผ ๋ค์ด, Computer ๊ฐ์ฒด๊ฐ ๋๋ค ์ซ์๋ฅผ ๋ง๋๋ ๋ฉ์๋ (createRandomComputerNumber) ์ด๋ค.
์ด ๋ฉ์๋๋ฅผ ๋ง๋ ์ด์ ๋ Game ๊ฐ์ฒด๊ฐ Computer ๊ฐ์ฒด์๊ฒ "๋๋ค์ซ์๋ฅผ ๋ง๋ค์ด์ค"๋ผ๊ณ ์ฑ ์ ๋ถ์ฌ๋ฅผ ํ๊ณ ์ถ์๋ค.
๊ทธ๋ฌ๋, static ๋ฉ์๋๋ก ์ ์ํ๋ User ๊ฐ์ฒด๋ Computer ๊ฐ์ฒด์๊ฒ "๋๋ค์ซ์๋ฅผ ๋ง๋ค์ด์ค"๋ผ๊ณ ์ฑ ์ ๋ถ์ฌ๋ฅผ ํ ์ ์๋ ๊ฒ์ด์๋ค.
์ด๋ ๋ด ์ค๊ณ์ ์๋์๋ ๋ง์ง ์์๊ณ , ๋๊ตฐ๊ฐ ๋ด ์ฝ๋๋ฅผ ์์ ํ๊ฒ ๋๋ค๋ฉด ๋์ ์ค๊ณ์๋๋ฅผ ํ์ ํ์ง ๋ชปํ ๊ฒ์ด๋ผ ํ๋จํ๋ค.
์๋ ์ฌ์ง์ ๋ฉ์๋๋ฅผ static์ผ๋ก ์ ์ํ์ ๋์ ์ฝ๋์ด๋ค. ์ฝ๋ ์ ๋ฌธ์ ํด๋ฆญ
public class Computer {
...
// ๋ฉค๋ฒ๋ณ์๋์ ์ง์ญ๋ณ์๋ก List์ ๋ง๋ ๋ชจ์ต
public static List<Integer> createRandomComputerNumber() {
List<Integer> computerNumber = new ArrayList<>();
}
}
public class User {
...
// ๋ฉค๋ฒ๋ณ์๋์ ์ง์ญ๋ณ์๋ก List์ ๋ง๋ ๋ชจ์ต
public static List<Integer> createUserNumber() {
List<Integer> userNumber = new ArrayList<>();
}
}
๊ทธ๋์, ๋ฆฌํฉํ ๋ง์ ํ๋ฉด์ '๋ฌด์์ ๊ฑด๋๋ ค์ผ static ๋ฉ์๋๋ฅผ ์ค์ด๊ณ , ๊ฐ์ฒด๋ง๋ค ๋ฉค๋ฒ๋ณ์๋ฅผ ์์ฑํ ์ ์์๊น?'๋ฅผ ๊ณ ๋ฏผํ๊ณ , "๋ฌด์๋ถํฐ ์์ ํด์ผ ํ ์ง? ์ด๋ ๊ฒ ๋ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ๋ฌด์์ธ์ง?"์ ๋ํ ๋ต์ ์ฐพ๊ณ ์ ํ์๋ค.
์ฒซ ๋ฒ์งธ๋ก ํ ์๋๋ ๊ตฌ๊ธ๋ง์ ํ๊ณ , ์๋ฐ์ ์ ์์ ๊ณต๋ถํ๋ฉฐ ๋ ธํธ์ ์ ๋ฆฌํ๋ static ๋ถ๋ถ์ ๋ค์ ์ฝ์๋ค. ๊ทธ๋ฌ๋, ๋ด๊ฐ ์๊ณ ์๋ ์ ๋ณด๋ง์ ๋ค์ ์ต๋ํ ๋ฟ์ด์๋ค.
๋ ๋ฒ์งธ๋ ๋์ค์ฝ๋์ ์ฌ๋ผ์จ ๊ธ๋ค์ ๋ค ์ฝ์ด๋ณด์๋ค. ์ด ๊ณผ์ ์์ ์ผ๊ธ ์ปฌ๋ ์ ์ ์๊ฒ๋์ด List๋ฅผ Wrapping ํ๋ ๊ณผ์ ์์ ๋ฉค๋ฒ ๋ณ์๊ฐ ์๊ธฐ๋ ๊ฑด์ค ์๊ณ ์ผ๊ธ ์ปฌ๋ ์ ์ ๊ณ์ ์ฝ๊ณ ์ดํดํ์ง๋ง ๋ด ์ํฉ๊ณผ๋ ๋ง์ง ์์๋ค.
์ธ ๋ฒ์งธ๋ ํ๊ต ๋์๊ด์์ 'ํด๋ฆฐ ์ฝ๋'์ '์ข์ ์ฝ๋, ๋์ ์ฝ๋'์ ๋ชฉ์ฐจ๋ฅผ ๋ณด๋ฉฐ ํด๊ฒฐํ ์ ์์ ๊ฑฐ ๊ฐ์ ๋ชฉ์ฐจ๋ค์ ์ถ๋ ค๋ด ๋ด์ฉ์ ์ฝ์ด๋ณด์์ง๋ง, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ์๋ ๋์์ด ๋์ง ์์๋ค.
๋ค ๋ฒ์งธ๋ก ์๊ตฌ์ฌํญ์ ์ฒ์ฒํ ๋ค์ ์ฝ๊ณ ์ค๊ณ๋ฅผ ๋ค์ ์ง๋ณด์๋ค. ๊ทธ๋ฌ๋, ๋๊ฐ์ ์ค๊ณ๋ฅผ ํ ๋ฟ ์ค๊ณ๊ฐ ๋์์ง์ง ์์๋ค. ์ค๊ณ๋ฅผ ์ํ๋ ๋ฒ๋ ๊ตฌ๊ธ๋ง์ ์ฐพ๊ธฐ๋ ํ๊ณ , ๊ฐ์ฌ์ค์ ์์ฝ๋ณธ์ ์ฝ์ผ๋ฉฐ ์ค๊ณ๋ ๋ฐ๋ผ ํด๋ณด์์ง๋ง ๋์์ง์ง ์์๋ค.
๋ค์ฏ ๋ฒ์งธ๋ก SOLID 5์์น์ ์ค๋ช ํ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ณ , ์ธํ๋ฐ ๊ฐ์๋ ๋ณด์์ง๋ง ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ์ ์ ์์๋ค.
์ฌ์ฏ ๋ฒ์งธ๋ก ๊ฐ์ฒด์งํฅ์ ์ ์ดํดํ๊ฒ ์๋๊ฐ ์ถ์ด '๊ฐ์ฌ์ค' 2ํ๋ ํ์ ๋์ ์ด ๊ธ์ ๋ค์ ์ฝ์ด๋ณด์๊ณ , ๋๋์ด ํด๊ฒฐ์ ์ค๋ง๋ฆฌ๋ฅผ ์ฐพ๊ฒ ๋์๋ค.
๋๋ ๋ฉค๋ฒ๋ณ์๋ก int๋ Stringํ ๊ฐ์ ์์ํ์ ์ ์ํ๋ก ๊ฐ๋ ๊ฐ์ฒด๋ ๋ง๋ค ์ ์์ง๋ง, ์ซ์์ผ๊ตฌ์ Computer, User ๊ฐ์ ๊ฐ์ฒด์ ๊ฐ์ฌ์ค ์์ฝ๋ณธ์ ์๋ Coffee, Barista ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ํ๋ก ๊ฐ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ด๋ ต๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ด ์ํ๋ก ์ซ์์ผ๊ตฌ๊ฒ์์ ๊ตฌํํ๋ค ๋ณด๋ ๊ฐ์ฒด๋ ์ํ(๋ฉค๋ฒ๋ณ์)๋ฅผ ๊ฐ์ง์ง ๋ชปํ๊ณ ์์ฐ์ค๋ฝ๊ฒ ํ์ํ ๋ณ์๋ค์ ์ง์ญ๋ณ์๊ฐ ๋๊ณ , ๋ฉ์๋๋ค์ด static ์ด ๋๋ ๊ฒ์ด์๋ค.
๊ทธ๋ ๋ค. ๋ถ๋ช ํ '๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด'๋ฅผ 2ํ๋ ํ ๋๋, ๊ฐ์ฒด์งํฅ์ ์ถฉ๋ถํ ์ดํดํ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ง์ ์ดํดํ ๊ฒ์ ๋ฐํ์ผ๋ก ์ฝ๋์ ์ ์ฉํ๋ ๊ฒ์ ์ด๋ ค์ ๋ ๊ฒ์ด์๋ค.
๊ทธ๋์, ์ผ๊ณฑ ๋ฒ์งธ๋ก ๊ฐ์ฒด์งํฅ์ ์ค๋ช ํ๋ฉด์ ์ฝ๋๊ฐ ๊ฐ์ด ์๋ '์ค๋ธ์ ํธ'๋ฅผ ์ฝ์๋ค.
์ค๋ธ์ ํธ์ ์ ์ฅ ํฐ์ผ๊ณผ ์ํ ์์ ์์ ์ฝ๋๋ฅผ ๊ฐ์ฒด์งํฅ์ ์๊ฐํ๋ฉฐ ๋ฐ๋ผ ์น๋ ์ด๋ ค์์ ๋ฉ์ถ๊ณ , ์๊ฐํ๊ณ ์ ๋ฐ๋ณต์ด์๋ค. ์ถ๊ฐ๋ก ๋ฉ์์ง ํํธ๋ฅผ ์ ์ดํดํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ๋ด๊ฐ ์ด ๊ฐ์ฌ์ค ๋ฆฌ๋ทฐ ๊ธ์์๋ ๋ฉ์์ง์ ๊ดํ ์ค๋ช ์ ์๋ ๊ฒ์ด์๋ค!!(์ด์ ๋ ์ถ๊ฐํ๋ค!)
๋ฉ์์ง๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ๊ฐ์ฒด๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ ์ ์์๊ณ , ์ด๋ ์์กด ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ ์ง์ ๋ํ ๊ถ๊ธ์ฆ์ผ๋ก ์ด์ด์ก๋ค. ์ด ๊ถ๊ธ์ฆ์ ๊ฐ๊ณ ์ฑ ์ ์ฝ์ด ๋๊ฐ๊ณ , p.85์์ ๋๋์ด ๋ด๊ฐ ํ์ตํ ๋ชจ๋ ๊ฒ๋ค์ด ์ค๋ก ์ฐ๊ฒฐ๋์๋ค.
p.85 - ํ๋ ฅ ๊ด๊ณ ์์์ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฌด์์ ์ ๊ณตํด์ผ ํ๊ณ ๋ค๋ฅธ ๊ฐ์ฒด๋ก๋ถํฐ ๋ฌด์์ ์ป์ด์ผ ํ๋์ง๋ฅผ ๊ณ ๋ฏผํด์ผ๋ง ํ๋ฅญํ ์ฑ ์์ ์ํํ ์ ์๋ค.
๋๋ ๊ฐ์ฒด์๊ฒ ๋ฌด์์ ์ ๊ณตํด์ผ ํ ์ง๋ง์ ๊ณ ๋ฏผํด์๊ธฐ ๋๋ฌธ์ ํ๋ฅญํ ์ค๊ณ๋ฅผ ํ์ง ๋ชปํ๊ณ , ํ๋ฅญํ ์ฑ ์์ ์ํํ์ง ๋ชปํ๋ค.
ํ๋ฅญํ ์ฑ ์์ ๋ฐํ์ผ๋ก ๊ฐ์ฒด๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์ค์ ํ๊ณ , ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์๋ค.
๊ณง๋ฐ๋ก ์ซ์ ์ผ๊ตฌ ๊ฒ์์ ์ค๊ณ๋ฅผ ๋ค์ ํ์๊ณ , ์ด์ ์ค๊ณ์๋ ํ์ฐํ ์ฐจ์ด๊ฐ ๋ฌ๋ค!!
์๋์ ํ๋ ๋ฌ๋ผ์ง ์ค๊ณ์ด๋ค.
์ด์ ์ค๊ณ | ๋ฐ๋ ์ค๊ณ |
๋๋ค ์ซ์๋ฅผ ์์ฑํ๋ผ → Computer ์ซ์๋ฅผ ์ ๋ ฅํ๋ผ → User ์ซ์๋ฅผ ๋น๊ตํ๋ผ → Game ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ผ → Game |
App → ๊ฒ์์ ์คํํ๋ผ → BaseballGame BaseballGame → ๋๋ค ์ซ์๋ฅผ ์์ฑํ๋ผ → Computer BaseballGame → ์ซ์๋ฅผ ์ ๋ ฅํ๋ผ → User BaseballGame → ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ผ → Result User → ์ซ์๋ฅผ ๊ฒ์ฆํ๋ผ → Validator |
๋ฐ๋ ์ค๊ณ๋ฅผ ๊ฐ์ง๊ณ ๋ฌธ์ ๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ์ ์ฑ ์์๋ง ๋ด์ค๋ ์ํ์ ํ๋์ด ์๋ ์์ ์ฝ๋๋ค์ฒ๋ผ ๋ด ์ฝ๋๊ฐ ์์ฑ๋์ด๊ฐ๋ค!
์ด ๋์ ์ง๋ฆฟํจ๊ณผ ๋ฟ๋ฏํจ, ๊นจ๋ฌ์์ ๋์ ์๋ฆ๊ณผ ์ฆ๊ฑฐ์์ด ๋๋ฌด ์ข๋ค. ๋๋๋ด ํด๊ฒฐํ์ ๋ ์ค๋ ์ด ๊ฐ์ ๋ค์ด ์ต๊ณ ๋ค๐
ํ์ง๋ง, ์ ์ผ ์ค์ํ ๊ฒ์ฆ์ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๋ด๊ฐ ์ํ๊ฑด์ง, ์ข์ ๊นจ๋ฌ์์ ์ป์๊ฑด์ง๋ฅผ ํ์คํ๊ฒ ์์ง ๋ชปํ๋ ๊ฒ์ ์์ฝ๋ค.
๋จ์ 3์ฃผ ๋์ ๊พธ์คํ ๊ณ ๋ฏผํด๋ด์ผ์ง!
๐1์ฃผ์ฐจ๋ฅผ ๋ง์น๋ฉฐ
๊ตฌํํ ๋์ ์๋ฐ๋ ์ ๋ฌธ์์ ์ผ๋ถ๋ถ๋ง ์ฝ๊ณ ํ๋จํ ์ ๊ณผ '๊ฐ์ฌ์ค'์ ๋ฉ์์ง ํํธ๋ฅผ ํ์คํ ์ดํดํ์ง ์์ ์ ์ผ๋ก ๋ฏธ๋ฃจ์ด ๋ณผ ๋, ๋๋ ์ฑ๊ธํ ๊ฒ ๊ฐ๋ค.
์ฑ๊ธํ๋ค๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ณด์ํ ์ง๋ฅผ ๊ณ ๋ฏผํ๊ณ ๊ฒฐ๋ก ์ ๋ด๋ ธ๋ค.
1. ๊ธ์ ์ฒ์ฒํ ์ฝ๊ณ , ๋์ถฉ ์ฝ์ง ์๊ธฐ!
2. ์ดํดํ ๊ฒ์์ ๋๋์ง ์๊ณ ์ด๋ค ๊ฒ์ ๋จผ์ ์ ์ฉํด๋ณด๊ธฐ!
์ด 2๊ฐ์ง๋ฅผ ์ด์ฉํด ๋ณด์ํด์ผ๊ฒ ๋ค.
๋ฌด์๋ณด๋ค ์ดํดํ ๊ฒ์์ ๋๋์ง ์๊ณ ์ ์ฉ์ ํ ์ ์์ด์ผ ์ฑ์ฅ์ ์ด๋ฃฐ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
๊ฐ์ฒด์งํฅ์ ์ถฉ๋ถํ ์ดํดํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ ์ฉํ ๋๋ ๋ค๋ฅธ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค.
๋ฌด์ธ๊ฐ๋ฅผ ํ์ตํ๋ฉด ๊ผญ ์ ์ฉ์ ํด๋ณด๊ฒ ๋ค๋ ๋ง์์ผ๋ก ์์ผ๋ก ํ์ตํ ๊ฒ๋ค์ ๊ผญ ์ฝ๋์ ์ ์ฉํด์ ์ง์์ ์ผ๋ก ์ฑ์ฅํ์!
๊ทธ๋ฆฌ๊ณ , ์ฝ๋๋ฅผ ์์ฑํ ๋, "์?"๋ฅผ ํญ์ ์๊ฐํด์ผ ๊ฒ ๋ค.
์ static ๋ฉ์๋๋ก ์ ์ธํ๋ ค๋์ง ๊ณ ๋ฏผ์ ํ๋ค๋ฉด ์ฝ๋๋ฅผ ์์ฑํ ํ๊ฐ ์๋๋ผ ํ์ต ๋์ค์ ์์ธ์ ์ฐพ์์ ๊ฒ์ด๋ผ ์๊ฐ์ด ๋ ๋ค.
๊ทธ ๋์, ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ํ๋ฉด์ ๋๋ผ์ง ๋ชปํ์ง๋ง ์ด ๊ฒฝํ์ ํตํด Java์ธ์ด์ ์ฌ์ํ ํค์๋๋ค์ด ์ฝ๋์ ํฐ ๋ณํ๋ฅผ ๋ง๋ค์ด ๋์ ์ ์ ์์๋ค.
์ static์ผ๋ก ์ ์ธํ๋ ค๊ณ ? , ์ ์์๋ก ์ ์ธํ๋ ค๊ณ ?, ์ List ๋ก ์ ์ธํ๋ ค๊ณ ? ๋ฑ๋ฑ ๋ด ์ฝ๋ ํ์ค ํ์ค์ ๋์ ์๊ฐ์ ๋ด์ ๊ณ ๋ฏผ์ ๋ด์ ์์ฑํ์ง ์์ผ๋ฉด ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํ๊ฒ ๊ตฌ๋๋ฅผ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ๋ค.
์์ผ๋ก ์์ ํ๋ฆฌ์ฝ์ค์ ๋ค์ํ๊ณ ์ฌ๋ ์๋ ๊ณต๋ถ๋ฅผ ํด์ ๋ด ์ฝ๋์ ํ์ฉ์ํค๊ธฐ ๋ณด๋ค๋ ์ฝ๋ ํ ์ค ํ ์ค ์์ฑํ ๋๋ง๋ค ์๊ฐ๊ณผ ๊ณ ๋ฏผ์ ํ๊ณ , ์ด ๊ณผ์ ์์ ์๊ธฐ๋ ๊ถ๊ธํ ๊ฒ๋ค์ ํ์ตํด ๋๊ฐ์ผ ๊ฒ ๋ค.
'๊ธฐํ > ์ฐ์ํํ ํฌ์ฝ์ค > ํ๋ฆฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ] - ์ข์ ๋ค์ด๋ฐ์ ์ํ ๊ท์น (0) | 2023.11.09 |
---|---|
[ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ํ์ต (0) | 2023.11.02 |
[ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ํ๊ณ (0) | 2023.11.01 |
[ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ (ํด์ค) (1) | 2023.10.26 |
[ํ๋ฆฌ์ฝ์ค ํ๋ฆฌ๋ทฐ] ํ๋ฆฌ์ฝ์ค๋ฅผ ์์ํ๋ ๋น์ ๊ณต์๋ฅผ ์ํ ๊ฐ์ด๋ (2) | 2023.10.18 |