๐ ์ฐ์ํํ ํฌ์ฝ์ค 6๊ธฐ ์ง์ ๊ธฐ๋ก6 [ํ๋ฆฌ์ฝ์ค] ํ๋ฆฌ์ฝ์ค 4์ฃผ์ฐจ ํ๊ธฐ (ํฌ๋ฆฌ์ค๋ง์ค ํ๋ก๋ชจ์ ๐) ์ด๋๋ง ํ๋ฆฌ์ฝ์ค์ ๋ง์ง๋ง ๋ฏธ์ ์ด ์ฃผ์ด์ก์ต๋๋ค. ์ฝ์ํ (์ฝ์น์์ ์๋คํ์) ๋ ํฌ๋น ๋๊ณผ ์ฝ์น๋๋ค๊ป์ ๋ง์ํด ์ฃผ์ จ๋ฏ์ด ์ฝ๊ฒ ํ๋ฆฌ์ง๋ ์์์์ต๋๋ค. ๊ฐ์ฒด์งํฅ์ ์๋ฏธ๋ฅผ ๋ค์ ์๊ฐํ์. (ํ์ค ์ธ๊ณ ๋ฐ์ ์ฃผ์) ๊ทธ๋์ ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด ์ฑ ์ ์ฝ์ผ๋ฉฐ ๋ธ๋ก๊ทธ์๋ ๊ธฐ๋กํ์๋๋ฐ์, ์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ๋์ต๋๋ค. ๊ฐ์ฒด์งํฅ์ด ๋จ์ํ ํ์ค ์ธ๊ณ์ ๋ชจ๋ฐฉ์ด ์๋ ์ด์ ์ค ํ๋๋ ํ์ค ์์์ ์๋์ ์ธ ์กด์ฌ๊ฐ ๊ฐ์ฒด์งํฅ ์ธ๊ณ์์๋ ๋ฅ๋์ ์ธ ์กด์ฌ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฐ์ฒด๋ฅผ ์์ธํ (anthropomorphism) ํ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ์ง์ ํ ๊ฐ์ฒด์งํฅ์ ๊ตฌ์ถํ๊ธฐ ์ํด์ ์ฃผ์ํ ์ ์ ํ์ค ์ธ๊ณ๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธฐ๋ ํ์๋ ํ๋ฉด ์ ๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ ๋ ์ง (Day)์ ์ฃผ๋ฌธ (Orders)๋ฅผ ๋ง๋ ๋ค์, .. 2023. 11. 17. [ํ๋ฆฌ์ฝ์ค] ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ ํ๊ธฐ (๋ก๋ ๐ฑ) ์ด๋ฒ์๋ ์ฒ์ ํด ๋ณด๋ ๋ฌธ์ ์์ผ๋, ๋๋ฆ ์ถ์ธกํ๋ (?) ๋ฌธ์ ์๋ ๋ก๋ ๋ฌธ์ ์์ต๋๋ค. Enum์ ๋ํด ๋ ๊น์ ๊ด์ฐฐ๊ณผ ๊ณ ๋ฏผ์ ํ๊ฒ ๋จ 1์ฃผ ์ฐจ ๋ ์ดํํฐ๋ธ ์๋ฐ๋ฅผ ๋ณด๋ฉฐ ๊ณต์ฉ ์์๋ Enum์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค๋ ๊ธ์ ์ผ์๋๋ฐ์, ์ด๋ฒ ๋ฏธ์ ์์๋ ์์ ์๊ตฌ์ฌํญ์ผ๋ก Java Enum์ ์ ์ฉํ๋ ๊ฒ ์์์ต๋๋ค! ๊ทธ๋์ ์ดํํฐ๋ธ ์๋ฐ์์ Enum์ ๋ํด ๋ฏธ์ฒ ์์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ ์ฝ๊ฑฐ๋, ๋ค๋ฅธ ์๋ฃ๋ฅผ ๋ ์ฐพ์๋ณด๊ณค ํ์์ต๋๋ค. ์ธ์ Enum์ ์ฐ๊ณ ์ธ์ private static final์ ์จ์ผ ํ ๊น? (feat. ์์ง๋) 1์ฃผ ์ฐจ ๋ ์์ฑ๋ ๊ธ์ ๋ณด๋ฉด, ๊ฐ์ฒด์ private ํ๊ฒ ์ฌ์ฉ๋๋ ์์๋ ํ์ ๋ฐฉ์์ ์ฐ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด Enum์ ํตํด ๊ด๋ฆฌํ๋๋ก ํ๋ ๊ฒ ์ข๋ค๊ณ ํ์๋๋ฐ์. ์์ฌ์ด ์ ์ .. 2023. 11. 14. [ํ๋ฆฌ์ฝ์ค] ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ ํ๊ธฐ (์๋์ฐจ ๊ฒฝ์ฃผ ๐) ๋ค์ ๋ฆ์ ํ๋ฆฌ์ฝ์ค 2์ฃผ ์ฐจ ํ๊ธฐ๋ฅผ ์ฌ๋ฆฝ๋๋ค! ํ์ฌ ์งํ ์ค์ธ ๋ฏธ์ ์ด ๊ฝค ๊ฑธ๋ฆฌ๋์ง๋ผ ์ด์ ์ผ ์ฌ๋ฆฌ๊ฒ ๋๋ค์ ๐ฅฒ ์ด๋ฒ ๋ฏธ์ ์ ํ๊ต ์ ๋ฐฐ ๋ถ๊ป ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ผ๋ฉฐ ๋ฏธ๋ฆฌ ํด ๋ณธ ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ด์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ 1์ฃผ ์ฐจ ๋์ฒ๋ผ ํต์ฌ ๋ก์ง์ ์ฝ๊ฒ ์ดํด๋์์์ต๋๋ค. JUnit5์ ๋ํด ๊น๊ฒ ํ๋ณด๊ฒ ๋จ (ParameterResolutionException) ์ด๋ฒ ๋ฏธ์ ์์๋ ์๊ตฌ์ฌํญ์ผ๋ก ํ ์คํธ๋ฅผ ํด ๋ณด๋ผ๋ ๊ฒ์ด ์์ ์๊ตฌ์ฌํญ์ ์ ์๋์ด ์์์ต๋๋ค. ๊ทธ๋์ ์ฐ์ํ ํ ํฌ์ฝ์ค์ ๋จ์ ํ ์คํธ ํ ์ฝํก ์์์ ๋ณด๋ฉฐ ์ ๋๋ก ํ ์คํธ๋ฅผ ์ตํ๋ณด๊ณ ์ถ์๊ณ , ์ด ๊ณผ์ ์์ @ParameterizedTest๋ฅผ ์ฐ๋ฉด ๊ฐ์ ํ ์คํธ์ด๋ฉด์ ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ ๊ฒฝ์ฐ๋ฅผ ์ถ์ฝํ ์ ์์์ ๋ฐฐ์ ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ์ฐํ @Test์ @ParameterizedT.. 2023. 11. 6. [ํ๋ฆฌ์ฝ์ค] JDK16์์ ์ ์์ผ๋ก ๋์จ "๋ ์ฝ๋"์ ๋ํด ์์๋ณด์ ์ฐ์ํ ํ ํฌ์ฝ์ค 2์ฃผ ์ฐจ ํ๋ฆฌ์ฝ์ค ๋ฏธ์ ์ ํ๋ฉด์ JDK17์ ํน์ง์ ์ด๋ฆด ์ ์๋ ๋ ์ฝ๋ (record)์ ๋ํด ์ ํด๋ณผ ์ ์์์ต๋๋ค. ์ฌ์ฉํ๋ฉด์ ๋๋ ์ ์, ๊ธฐ์กด์ ์์ฑํ๋ DTO๋ฅผ ์ฝ๊ฒ ๋์ฒดํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด์์ต๋๋ค. (DTO๊ฐ ๋ฌด์์ธ์ง๋ฅผ ๋ณด์๋ ค๋ฉด ์ด ๊ธ์ ์ฐธ๊ณ ํด์ฃผ์ธ์!)๊ธฐ์กด์ DTO๋จผ์ , ๊ธฐ์กด์ ์ฌ์ฉํ๋ DTO ์ฝ๋์ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.public class CarResponse { private final String name; private final int position; private CarResponse(final String name, final int position) { this.name = name; this.position = .. 2023. 11. 5. [ํ๋ฆฌ์ฝ์ค] @Test์์ ์ธ์๋ฅผ ์ฌ์ฉํ ๋ ์ ParameterResolutionException์ด ๋ฐ์ํ ๊น? ์๋ก ์ฐ์ํ ํ ํฌ์ฝ์ค ํ๋ฆฌ์ฝ์ค ๋ฏธ์ ์ ํ๋ฉด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ค, ํ ์คํธ ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์์ต๋๋ค. (์ต์ข ์ฝ๋๋ ๊ฒ์ฆ ๋ก์ง์ ๋ค๋ฅด๊ฒ ํ๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ์ด ํ ์คํธ ์ฝ๋๊ฐ ์์ ์์ง ์์ต๋๋ค.)@Test@ParameterizedTest@ValueSource(strings = {"ๅดใฏะปู", "?-bob"})void ํ๊ธ๊ณผ_์ํ๋ฒณ_์ซ์๋ฅผ_์ ์ธํ_๋ชจ๋ _๋ฌธ์๋_์๋๋ค(final String value) { // given & when Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () -> { Name name = Name.from(value); }); // then .. 2023. 11. 5. [ํ๋ฆฌ์ฝ์ค] ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ ํ๊ธฐ (์ซ์ ์ผ๊ตฌ โพ๏ธ) ํฉ๊ฒฉ๋ ๋์ง ์์์ผ๋ฉด์ ์ฐ์ํํ ํฌ์ฝ์ค 6๊ธฐ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ ์กฐ๊ธ ์๊ธฐ์ง๋ง.. ํ๋ฆฌ์ฝ์ค๋ฅผ ํ๋ฉด์ ์ด๋ค ๊ฒ๋ค์ ๋ฐฐ์ ๊ณ ๊ณ ๋ฏผํ์๋์ง ๋จ๊ธฐ๊ธฐ ์ํด ๋ธ๋ก๊ทธ์ ์ ์ด๋ด ๋๋ค. ์ฌ์ค 1์ฃผ์ฐจ๋ ์ด๋ฏธ ๋ฒจ๋ก๊ทธ์ ์์ฑํ์ด์, ๊ทธ๋๋ก ๋ณต๋ถ์ด ๋ ๊ฒ ๊ฐ๋ค์. ํด๋ฆฐ ์ฝ๋ ์ฑ ๋ด์ฉ๋ง์ด ๋ฌด์กฐ๊ฑด ์ ๋ต์ด๋ผ๊ณ ์๊ฐํ์ง ๋ง์. ์ฝ๋๋ฅผ ๊ทธ๋ ๊ฒ ์๋ฒฝํ ์์ฑํ์ง ๋ชปํ๊ธฐ๋ ํด์ ๊ณผ๊ฐํ ๋ง์ผ ์๋ ์์ง๋ง, ํด๋ฆฐ ์ฝ๋์์๋ ์ด์ ๋น์ทํ ๋ด์ฉ์ด ์์ฑ๋์ด ์์ต๋๋ค. ์ค์ ๋ก๋ ์ด ์ฑ ์์ ์ฃผ์ฅํ๋ ๊ธฐ๋ฒ ๋ค์๋ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ค. ์ฌ๋ฌ๋ถ๋ ๋ชจ๋ ๊ธฐ๋ฒ์ ๋์ํ์ง ์์ผ๋ฆฌ๋ผ. ์ด๋ค ๊ธฐ๋ฒ์ ๊ฒฉ๋ ฌํ ๋ฐ๋ํ๋ฆฌ๋ผ. ๊ทธ๋๋ ๊ด์ฐฎ๋ค. ์ฐ๋ฆฌ ์๊ฐ์ด ๋ฌด์กฐ๊ฑด ์ณ๋ค๊ณ ์ฃผ์ฅํ ์๋๋ ์์ผ๋๊น. ํ์ง๋ง ๋ค๋ฅธ ํํธ์ผ๋ก ์ด ์ฑ ์ ์ฐ๋ฆฌ๊ฐ ์ค๋ซ๋์ ๊ณ ๋ฏผํ๊ณ ์๊ณ ํ ๊ตํ๊ณผ ๊ธฐ๋ฒ์ ๊ถ๊ณ ํ๋ค... 2023. 10. 31. ์ด์ 1 ๋ค์