์ ์ ์ ๋ชป ์๊ณ ์๋ฏผํด์ ธ ์์ด์, ์ง๊ธ ๋ด๊ฐ ์ด๋ค ์๊ฐ์ ํ๊ณ ์๋์ง ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.์ฐ์ ๋ช ๊ฐ์ง ์๊ฐ์ ์ ์ด๋ณด์๋ค.๋ด๊ฐ ํ๋ ์ผ์ด ์ก์ผ์ ๋ถ๊ณผํ๋ค๋ ์๊ฐ.ํต์ฌ ์ธ๋ ฅ์ด ๋์ง ๋ชปํ๊ณ ์๋ค๋ ๋ถ์๊ฐ.ํจ๊ป ์ด์ฌํ ์ผํ๊ณ ์ธ์ ๋ฐ๊ณ , ์์๋ฐ๊ณ ์ถ์ ๋ง์.๋ ์ด์ฌํ, ๋ ์ํ์ง ๋ชปํ๊ณ ์๋ค๋ ์์ฑ
๊ฐ.์ด์ฑ์ ์ผ๋ก ์๊ฐํด๋ณธ๋ค๋ฉด, ํ์ฌ ์
์ฅ์์ ๋ด๊ฐ ํ๋ ์ผ์ ๊ผญ ํ์ํ ์ผ์ด๋ค. ํ์ฌ์๋ ๋ฅ๋ ฅ ์๋ ์ธ์ฌ๋ค์ด ๋ชจ์ฌ ๋น ๋ฅด๊ฒ ์ ํ์ ๊ฐ๋ฐํ๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ์ค์๊ฐ ์๊ธฐ๊ฑฐ๋ ๊ณ ๋ คํ์ง ๋ชปํ ๋ถ๋ถ์ด ์์ ์ ์๋ค. ๊ทธ๋ฐ ๋ถ๋ถ๋ค์ ์ํฌํธํด์ฃผ๋ ๊ฒ์ด ๋์ ์ญํ ์ธ๋ฐ, ๋ค๋ฅธ ๊ณณ๋ ๋ง์ฐฌ๊ฐ์ง์ผ๊น? ์ฌ๊ธฐ์๋ ๊ทธ ์ผ์ด ๋์๊ฒ ๋๋ฌด ๊ณ ๋
ํ ์ผ์ฒ๋ผ ๋๊ปด์ง๋ค. ๋ด๊ฐ ๋ ์ํ๋๋ผ๋ฉด, ๋ด๊ฐ ๋ ๋๋ํ๋๋ผ๋ฉด ์ํฉ์ด ๋ฌ๋ผ์ก์๊น? ๋ด๊ฐ ํ์ค์ ์ง์ํ๊ณ ๊ณต..
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
Service์ ์๋ ๋ฉ์๋๋ฅผ ํ
์คํธํ๊ณ ์ถ์๋ฐ public์ผ๋ก ๋์ด์๋ ์ ์ฒด ๋ก์ง์ด ์๋ private์ผ๋ก ๋ ๊ธฐ๋ฅ์ด ๋๋์ด์ง ๋ฉ์๋์ ๊ธฐ๋ฅ๊ฒ์ฆ์ ํ๊ณ ์ถ๋ค. ๊ทธ๋์ public์ผ๋ก ๋ณ๊ฒฝํด์ ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์ฐพ์๋ณด๋ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ServiceImpl ํด๋์ค ๋ด์ ์ธํฐํ์ด์ค์ ์ ์๋์ง ์์ public ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ํผํด์ผ ํ ์ฌํญ์
๋๋ค. ์ธํฐํ์ด์ค๋ ํน์ ๊ณ์ฝ(Contract)์ ์ ์ํ๊ณ , ์ด๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ค์ ํด๋น ๊ณ์ฝ์ ์ง์ผ์ผ ํฉ๋๋ค. ๋ง์ฝ ์ธํฐํ์ด์ค์ ์ ์๋์ง ์์ ๋ฉ์๋๋ฅผ ํด๋์ค ๋ด์์ ์ถ๊ฐํ๋ค๋ฉด, ์ฝ๋์ ์ผ๊ด์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค. ๋ผ๊ณ ํ๋ค. ๋ง๋ ๋ง์ธ๋ฐ ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํ
์คํธํ๋ ๊ฒ ์ข์๊น? Reflection ๋ฆฌํ๋ ์
์ถ์ฒํ๋ ..
ํ์ฌ ๋๋ฉ์ธ์ ๋ ์ง์ ์๋ก์ด ๋ ์ง๋ฅผ ์
๋ ฅํ๋ ๊ณผ์ ์์ java.time.LoclaDate ์์ equals() ๋ฅผ ์ฌ์ฉํ๋๋ฐ isEquals() ๋ ์์ด์ ํ์ธํด ๋ดค๋ค. equals ๋ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋๋ฑํ๋ฉด ๋๋ค -> ๋ด์ฉ์ด ๊ฐ์๊ฐ? isEqula ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ๋๋ฑํด์ผ ํ๋ค -> ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ณ ์๋๊ฐ? ํ์ง๋ง ๋ด๊ฐ ์ํ๋๊ฑด ๋๋ค ์๋์์ ๋๋ฉ์ธ์ ์๋ ๋ ์ง ์์ฒด๊ฐ null ์ผ ์ ์๋ค. equals ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฃผ์ฒด๊ฐ ๋๋ object ๋ null์ด๋ฉด ์๋๋ค. ์์ ํ ๋น๊ต๋ฅผ ์ํด java.util.Obejcts ์ ์๋ equals๋ฅผ ์ฌ์ฉํ๋ค. ๊ทผ๋ฐ ๋๋ค null ์ด๋ฉด true ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ null์ด ๋์ด์ค๋ฉด return ํด๋ฒ๋ฆฌ๋ ๋ก์ง์ ์ถ๊ฐํ๋ค. public void updat..
๋ณํฉํ๋ ๋ฐฉ๋ฒ ๊ธฐ๋ก CellRangeAddress region1 = new CellRangeAddress(0,0,1,2); sheet.addMergedRegion(region1); CellRangeAddress region2 = new CellRangeAddress(0,0,3,4); sheet.addMergedRegion(region2); CellRangeAddress region3 = new CellRangeAddress(0,0,5,6); sheet.addMergedRegion(region3); CellRangeAddress region4 = new CellRangeAddress(0,1,0,0); sheet.addMergedRegion(region4); Row row = sheet.createRow(0..
json ์ผ๋ก ๊ฐ์ ๋ฐ์ผ๋ฉด ํค์ ๊ฐ ์ ๋งคํํด์ ์ด๋ฉ์ผ์ ์ ์กํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๊ณ ์์๋๋ฐ ํค๋ฅผ ๊ณ์ ๋ชป์ฐพ๋๊ฒ ์ด์ํด์ ํ์ธํด๋ณด๋ null ๊ฐ์ ๊ฐ์ง ํ๋๋ ์ ์ธํ๊ณ ์ง๋ ฌํ๋ฅผ ํ๊ณ ์์๋ค. https://github.com/google/gson/blob/main/UserGuide.md#null-object-support ๊ธฐ๋ณธ์ ์ผ๋ก Gson ์ null ๊ฐ์ ๊ฐ์ง ํ๋๋ฅผ ์ ์ธํ๊ณ ์ง๋ ฌํ ํ๊ณ ์์ด์,, serializeNulls() ๋ฅผ ํธ์ถํ์ฌ null ๊ฐ์ ํฌํจํ๋ Gson ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํ๋ค. Gson gson = new GsonBuilder().serializeNulls().create(); String json = gson.toJson(exampleObject); ์ ๊ธฐ๋ณธ๊ฐ์ด null ๊ฐ์ ์ ..
ํ์ฌ์์ ๋ฐฅ์ ๋จน๋๋ฐ ์กฐ์ ์จ ์ํํธ์จ์ด ์๊ธฐ๊ฐ ๋์์ ๋ค ์ฝ์ง ๋ชปํ ์ด ์ฑ
์ ๋ค์ ํ๋ฒ ํผ์ณ ๋ณด์๋ค ํ
์คํธ์ ๋ํ ๊ธ์ ์ฝ์ด๋ณด๊ณ ์์๋๋ฐ ๋ฐ๋ก ๋ค์์ฅ์ ์ ๋์ฝ๋์ ๋ฌธ์ ์งํฉ์ ๋ํ ์ด์ผ๊ธฐ๊ฐ ๋์์ ์ฒ์ ๋ณด๋ ๊ฒ ๋ง๋ฅ ํฅ๋ฏธ๋กญ๊ฒ ์ฝ์๋ค. ์ ์๋ ์ ๋์ฝ๋๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ๋งน์ธ์ฝ ์ ์ํจ์์ 6๊ฐ์ ๋์ ์ํ ๊ป์ง์ ๊น๋ ๋ฒ์น์ ์ค๋ค๊ณ ํด์ ์ด์ฌํ ์ฝ์๋ค... ์ ์ก๋๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ง์ ํ ์ ์๋๋ฐ ์ง๊ธ์ Unicode๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ด์ ์๋ ASCII ์ ๊ฐ์ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ํ์ง๋ง ASCII๋ 7๋นํธ๋ก ๊ตฌ์ฑ๋์ด ์์ด์ 0~127๊น์ง์ ์ซ์๋ฅผ ์ด์ฉํด ์๋ฌธ ์ํ๋ฒณ, ์ซ์, ํน์ ๋ฌธ์ ๋ฑ์ ํํํ ์ ์์๋ค. (๋งจ ์ผ์ชฝ 1๋นํธ๋ ํต์ ์ฅ๋น์์ ์ฌ์ฉ๋๋ ์ ์ด ๋นํธ๋ฅผ ์ํด ์์ฝ๋ ๊ณต๊ฐ์ด์๊ณ ์ค์ ๋ก๋ 7๋นํธ..
1์ 1์ผ์ ์๋์ฐ ๊ฐ์ ์งํค์ง ๋ชปํ ์ฌ๋ฌ ๋ชฉํ๋ค์ ๋ค์งํ๋๊ฒ ์ต๊ทผ์ผ ๊ฐ์๋ฐ ๋ฒ์จ 3๋ถ๊ธฐ๋ค. ํ๊ณ ์ฐ๋ ์ผ์ ์ ๋ง ๊ท์ฐฎ์ง๋ง ๋ญํ๋์ง ํ์ธํ๊ธฐ ์ข๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์๋ฌ์ ์ด๋ค๊ฑธ ํ ์ง๋ ์๊ฐํ ์ ์๋ค. ํ์์๋ ์๊ฐ์ ํด๋ ๊ธ๋ฐฉ ์๊ธฐ ๋๋ฌธ์... ๋ค์ ๋ฌ์๋ ์ด๋ค ๊ฒ์๋ฌผ์ ์ฝ์๋์ง, ์ด๋ค ์๊ฐ์ ํ๋์ง๋ ์จ์ผ๊ฒ ๋ค. 7์์ ๋๋ ๋ญ ํ์๊น? ํ์ฅ๋๊ณผ์ ์ฝ๋ ๋ฆฌ๋ทฐ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ํด๋น ์ ๋ณด๋ฅผ ๊ฐ๊ณตํด์ ์ด๋ฉ์ผ, ์๋ฆผํก์ ๋ณด๋ด๋ ๋ถ๋ถ์ ๊ตฌํํ๊ฒ ๋์๋๋ฐ ๋ง์นจ. ํ์ฅ๋์ด ์๋ฆผํต์ง์๋ฒ ๊ฑด์ค์ ์งํ์ค์ด์
จ๋ค. ์์ง ์์ฝ๋ฐ์ก ๊ธฐ๋ฅ์ด ์์๊ธฐ ๋๋ฌธ์ ์ด์ง์ฟต ์น์ด์ PR ํ๋๋ฐ ์๋ง์ ๊ด์ฌ๊ณผ ๋๊ธ๋ก ์ผ์ง ์๋ฐ ๊ธฐ๊ฐ ๋์๋ค. ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ต๋ํ '๋ผ์ด๋ธ๋ฌ๋ฆฌ' ์ฒ๋ผ ๋ง๋๋ ค๊ณ ..
ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ฐํ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ํ
์คํธํด์ผํ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ค. ์ด ๋ฉ์๋๋ Message๋ฅผ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ณ , ๋ก๊ทธ ์ ์ฅ ํ ๋ฐํํ๋ ๊ฐ์ด ์๋ค. ๋๋ ์ด ๋ด๋ถ์์ ๋ฐ์ดํฐ ์ ์ ๊ฐ ๋๋ ํ ๋ง์ง๋ง์ private send(RequestDto request) ์ ์ ๋ฌ๋๋ RequestDto ๋ฅผ ์๊ณ ์ถ์๋ค. private sendMessageList(){ // ๋ฐ์ดํฐ ์ ์ send(reqeust); } private send(RequestDto request){ // ์ค์ ๋ก ์ ์ก } ์ด๋, ArgumentCaptor ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. @Test void sendMessageTest() { sendService.sendMessageList(new Oth..
๊ธ์ต ์น๋ฃ๋ ๋๋ง๋ค ํ๊ณ ๋ฅผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋๋ฐ ์ด๋ฐ์ ๋ฐ ์
๋ฌด ํ๊ณ๋ก ๋ฏธ๋ฃจ๋ค๊ฐ ์๊ฐ์ด ์กฐ๊ธ ๋น์ด์ ์์ฑํ๊ฒ ๋์๋ค. ์ต๊ทผ ๋ช๊ฐ์๋์ ์ปค๋ฆฌ์ด๋ฆฌ ์๋์ผ๋ก ์ค๋ ์ถ์ฒ ๊ฒ์๋ฌผ์ ์ด์ฌํ ์ฝ์๋ ๊ฒ ๊ฐ๋ค. ๋ช๊ฐ๋ ๋๋ฌด ์ข์์ ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ ๊ธ์ ์์ฑ ํ๊ณ ๋ช๊ฐ๋ ์ฝ๋ค๊ฐ ๋ถ๋งํฌ์์ ์ฉ๋์ค์ด๋ค... ์ด๋ฐ ๊ธ์ ์๋์ผ๋ก ๋ฐ์์ ๋ณด๋ค๋ณด๋ฉด ์๋๊ฒ๋ ํญ์ ์๋กญ๊ณ ์ข๋ ๊น์ ๋ด์ฉ์ ๋ณด๊ฒ๋๋ฉด ์์ฑ์์ ์ ๋ฌธ์ฑ๊ณผ ๋ง์ธ๋์ ์ค๋ ์ธ๋ค. 4์์ ํ์ฌ์์ ๋ชฉํ์ค์ ๊ณผ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ์ด๋ฒ ๋ถ๊ธฐ ๋ชฉํ์ ๋ํด ๊ณ ๋ฏผ์ ๋ง์ด ํ๋๋ฐ ๊ธฐ์กด์๋น์ค ๊ณ ๋ํ๋ฅผ ์ด์ ๋์๊ณ ์ถ๊ฐ์ ์ผ๋ก ํ
์คํธ ๋์
์ ๋ํ ๊ธฐ๋ฐ์ ๋ง๋ค์ด๋ณด๋๊ฒ ์ด๋ป๋๋ ์ ์์ ๋ฐ์๋ค! ์๋น์ค ๊ฐ๋ฐ์ด ์๋ ์ฝ๋ ํ์ง์ ๋ํ ๋ชฉํ๋ผ๋!!! ๐คฉ๐คฉ ๐คฉ ๊ทํ๋ค ๊ทํด ๐คฉ ๋๋ฌด ์ฌ๋ฏธ์์๊ฒ ๊ฐ์๊ณ (๋ด๊ฐ ..
Java ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ค ํ๋๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ผ๋ก ์ธํด ์ฑ๋ฅ, ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค. ์ต์ ํ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์ 1. Primitive type(์์ํ์
) ์ ์ฌ์ฉํ์. ์ฐธ์กฐํ์
๋ณด๋ค ์์ํ์
์ ์ฌ์ฉํ๋ค. ์์ํ์
์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์์ฑ ์ค๋ฒํค๋๋ฅผ ๋ฐฉ์งํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์๋ค. + ๋ํ ์์ํ์
์ ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ๋ก ์ฝ๊ณ , ์ฐธ์กฐํ์
์ ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ๊ตฌํด์จ ๋ค์์ ๋ค์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๊ฐ์ ์ฝ์ด์์ผ ํด์ ์ฑ๋ฅ์ ์ ๋ฆฌํ๋ค. 2. ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ ํ์ง๋ง์. String s = "์ ์ ์ฐ"+" ์
๋๋ค"; ํด๋น ์ฝ๋ ํ์ค์ "์ ์ ์ฐ ์
๋๋ค" ์ ๋ํ ์ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค. ๋์ StringBuilder ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ..
1๊ฐ์ ์ปฌ๋ผ์ ๋ํ ์ค๋ณต ๊ฐ ํ์ธ select u.name, count(u.name) from users u group by u.name having count(u.name) > 1; 2๊ฐ ์ด์ ์ปฌ๋ผ์ ๋ํ ์ค๋ณต ๊ฐ ํ์ธ select u.cell_phone, u.name, count(*) from users u group by u.cell_phone, u.name having count(*) > 1;
๋๊ตฌ ์ฌ์ฉ๋ฒ ์ค์ฌ์ด ์๋๋ผ ํ
์คํธ ๋์
์ ํ์์ฑ, ๋น์ฉ ์ธก๋ฉด์ ์ฌ๋ก์ ํจ๊ป ํ์ด๊ฐ๊ณ ์๋ค. ํ
์คํธ ๋๊ตฌ๋ ์ฌ์ฉ๋ฒ์ ์ตํ๋ฉด ๋๋ค. ํ์ง๋ง ์ ์ฌ์ฉํด์ผ ํ๋์ง ์ด๋ค ์ผ์ด์ค์์ ์ฌ์ฉํด์ผ ํ๋์ง๋ฅผ ๊นจ๋ฌ์์ผ ์ ๋ง ํ์ํ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ์ ์๊ณ ์ง์์ ํ
์คํธ๋ฅผ ์ ์งํ ์ ์๋ค. ์ฌ๋ฏธ์จ,,ใ