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..
์ฐ๋ฆฌ์๊ฒ ๋จ์ ๋ชจ๋ ๊ฐ์ ์ ์ฐ๋ฆฌ๊ฐ ์ค์ค๋ก ์ ํํ ๊ฒ์ด๋ค. ์ค๋ ํ ์ผ ์์ง ๋๋์ง ์์ PR ์ฝ๋ ์์ ํ๊ธฐ NULL์ ๋ฐํํ์ง ๋ง๋ผ ์ค๋ฒ๋ก๋ํ ๋ ๋ค๋ฅธ ๊ณณ์์ ํ์ํ์ง ์์ ์ธ์๋ฅผ ์ ๋ฌํ๋๋ผ null ์ ์ ๋ฌํ๋๋ฐ ๋ค๋ฅธ ๊ณณ์์ ์๋ฌ ใ
null -> ๊ธฐ๋ณธ ์์ฑ์๋ก ๋น ๊ฐ์ฒด ์ ๋ฌ ํ๋ฃจ ์์ฝ ์ค๋ ๋ณธ ๊ธ https://post.naver.com/viewer/postView.nhn?volumeNo=24272458&memberNo=16714554
DFS ๋ง์ง๋ง ๋
ธ๋๊น์ง ํ์ ํ ๋ค๋ฅธ ๋
ธ๋ ํ์ : stack ์์ ๋
ธ๋ push ์์ ๋
ธ๋ pop popํ ๋
ธ๋์ ์์๋
ธ๋ ํ์ popํ ๋
ธ๋์ ์์ ๋
ธ๋๋ค push (๋์ด์ ์์ ๋
ธ๋๊ฐ ์๋) popํ ๋
ธ๋ ์ถ๋ ฅ ์คํ์ด ๋น์์ง๋ฉด ๋ * ์ฌ๊ท ์ฌ์ฉํ ์ ๊ฐ์ง๋จ BFS ์ฃผ์ ๋
ธ๋ ํ์ > ์์์ ์ฃผ์๋
ธ๋ ํ์ : queue ์์๋
ธ๋ add ์์ ๋
ธ๋ remove removeํ ๋
ธ๋์ ์์ ๋
ธ๋ ํ์ removeํ ๋
ธ๋์ ์์ ๋
ธ๋๋ค add (๋์ด์ ์์ ๋
ธ๋๊ฐ ์๋)removeํ ๋
ธ๋ ์ถ๋ ฅ queue stack ๊ณผ queue ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ๋จผ์ ๋ค์ด๊ฐ ๋
ธ๋๋ฅผ ํ์ํ ์ง (bfs) ๋์ค์ ๋ค์ด๊ฐ ๋
ธ๋์ ์์์ ํ์ํ ์ง (dfs) ์ค๋ ํ ์ผ bfs, dfs ๊ตฌ์กฐ๋ฅผ ๊ฐ๋จํ๊ฒ ๊ณต๋ถํ๋ค. ์์๋ ๊ฒฐ๊ณผ๋ฌผ์ด ..
๋ชธ ์ํ๊ฐ ๋ณ๋ก๋ค..๐ฏ ์ค๋ ํ ์ผ ์ด์... ํ๋ฃจ ์์ฝ ์ค ์ด๊ฑฐ ๊ฐ๋จํด ๋ณด์ด๋ค? ์์ ๊ฐ๋ฐ๊ธฐ๊ฐ +3์ผ ์ ์ด๊ฑฐ ์ข ๊น๋ค๋กญ๊ณ ์ด๋ ค์๋ณด์ด๋๋ฐ? 1์๊ฐ์ด๋ด ํ๋จ๋ ฅ ๋ญ์ผ ์ค๋ ๋ณธ ๊ธ
์ค๋ ํ ์ผ ์ฌ๋ด์์ ํ๋ ๊ฐ๋ฐ์ ํ์์์ ์ด์ ์ฐ์ ์์์ ๋ํด ์๊ธฐํ๋ค. ์ง๊ธ๊น์ง ์ค๋ฅ+๊ฐ์ ์์
์ ๊ฐ์ด ํด์๋๋ฐ. ์ด์ ๋ ์ค๋ฅ ์์ ํ ๊ฐ์ ์์
์ ์ผ์ ์ก๊ณ ํ๊ธฐ๋ก ํ๋ค. ์ถ๊ฐ๊ฐ๋ฐ๊ฑด์ด ์์ด ๋ฆฌ์กํธ๋ฅผ ๋ณด๋๋ฐ ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ฅด๋ ์์ฒญ ํค๋งธ๋ค. ๊ฒฐ๊ตญ ์ค๋ ๋ชปํจ ํ์ฅ๋์ด BFS์ ๋ํด ๋ฌผ์ด๋ดค๋ค. ์ ๋ชจ๋ฅด๋ ๋๋ต์ ๋ชป ํ๋๋ฐ ์ด์ ์์๊ฐ์ผํ ์ฐ์ฐจ๋ผ๊ณ ํ์
จ๋ค. ํ์ฌ์์ ๋๋ต์ ์ ๋ชปํ์ ๋ ํญ์ ์ฐ์ธํ๋๋ฐ ์ต๊ทผ๋ถํฐ ๊ตํต์๋จ์ ์ด์ฉํ ๋ ํํ์ด ์ฑ
์ ์ฝ์ด์ ๋ถ์ํ์ง ์์๋ค. ํ๋ฃจ ์์ฝ ๊ฐ๋ฐ์๋ฅผ ํ๋ฉด์ ๋ถ์ํ์ง ์๋ ๋ฐฉ๋ฒ : ๊ณ์ ๊ณต๋ถํ๋ฉด ๋ ์ค๋ ๋ณธ ๊ธ https://youtu.be/tvX9f8FqMFI?si=lyxi7bjRSWBUd6OL
ํ์ฌ์์ ์ด์์ ๋ด๋นํ๊ฒ ๋์ด์ ์กฐ๊ธ์ฉ ๋ฐฐ์๊ฐ๋ฉด์ ์ฒ๋ฆฌํ๊ณ ์๋ค. ์ฒ์์๋ ์ค๋ฅ๊ฐ ์์ผ๋ฉด ํด๋น ์ค๋ฅ๋ฅผ ์์ ํ๊ณ ๊ฐ์ ์์
์ ํด๋๊ฐ์ง๋ง... ์๊ฐ๋ณด๋ค ์๊ฐ์ด ๋๋ฌด ์๋ค๋ ๊ฑธ ๋๋๋ค. ์ค๋ฅ๋ฟ๋ง ์๋๋ผ ๊ธฐ์กด ์์
์ ๋ํ ์ถ๊ฐ ์์
๋ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ด ์๋ค ๐ฅฒ ๋ํ, ์ถ๊ฐ ์์
์ ๋ํด ๊ธฐ์กด ์ด์์์
์ด ์ธ์ ๋ค์ด์ฌ์ง, ์ผ๋ง๋ ๋ณต์กํ ์ง ๋ชจ๋ฅด๋ ๊ฐ๋ฐ๊ธฐ๊ฐ ์ค์ ์ ์ ์คํด์ ธ์ผ๊ฒ ๋ค. ์ค๋ ํ ์ผ ์ถ๊ฐ ๊ฐ๋ฐ๊ฑด ์๋ฃ/๊ฒ์๋ฐ์ ์ถ๊ฐ์ฌํญ ์์ ์ค๋ฅ๊ฑด ์์ธ ํ์
ํ ์ค๋ฅ ๋ฐ์ดํฐ ์์ ํ๋ฃจ ์์ฝ ์ค๋ฅ ์์ /๋ฐ์ดํฐ ์์ฒญ ๋ฑ ์ต์ํด์ง๊ณ ๋ฐ๋ณต์ ์ธ ์์
์ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋๋ด๋๋ก ๋
ธ๋ ฅํ๊ธฐ ๊ฐ๋ฐ ๊ธฐ๊ฐ ์ ํ ๋ ์ ์คํ๊ธฐ ์ค๋ ๋ณธ ๊ธ https://news.hada.io/topic?id=11711
๋ณํฉํ๋ ๋ฐฉ๋ฒ ๊ธฐ๋ก 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..