JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #42. ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ƒ์‚ฐ์„ฑ ๊ทน๋Œ€ํ™”๋ฅผ ์œ„ํ•œ 5๊ฐ€์ง€ ์ตœ๊ณ ์˜ J...

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #42. ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ƒ์‚ฐ์„ฑ ๊ทน๋Œ€ํ™”๋ฅผ ์œ„ํ•œ 5๊ฐ€์ง€ ์ตœ๊ณ ์˜ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

์ถœ์ฒ˜ : Dev.to ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์กฐ๋งŒ๊ฐ„ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฒฝ๋ ฅ์˜ ์–ด๋Š ๋‹จ๊ณ„์—์„œ๋‚˜ ๋งค์šฐ ๋ถˆ์พŒํ•œ ์ˆœ๊ฐ„์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ๋‹น์‹ ์ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—ฌ์ „ํžˆ ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ๋ฐ ๋ฌด์—‡์ด ๋„์›€์ด ๋ ์ง€ ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #42.  ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?  ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ 5๊ฐ€์ง€ ์ตœ๊ณ ์˜ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - 1

์งˆ๋ฌธ

์ œ๊ฐ€ ์ดˆ๋ณด์˜€์„ ๋•Œ๋Š” ์งˆ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ๋‘๋ ค์› ๊ณ , ๋งˆ์ง€๋ง‰ ์ˆœ๊ฐ„๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ์Šค์Šค๋กœ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ๊ฒฐ๊ตญ ์ƒ์‚ฌ๋‚˜ ๊ณ ๊ฐ๊ณผ ๋Œ€ํ™”ํ•ด์•ผ ํ•  ๋•Œ๊นŒ์ง€ ์นจ๋ฌต์„ ์ง€์ผฐ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ์™œ ๊ทธ๋Ÿฐ ์ผ์„ ํ–ˆ๋Š”์ง€ ์ดํ•ดํ–ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ์•ž์—์„œ ๋ฐ”๋ณด์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์งˆ๋ฌธ์„ ํ”ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ณธ์งˆ์„ ๋นจ๋ฆฌ ํŒŒ์•…ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋“œ๋””์–ด ์ž์กด์‹ฌ์„ ์ ‘์–ด๋‘๊ณ  ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์„ ์งˆ๋ฌธํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ ๋™๋ฃŒ๋“ค ๋•๋ถ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Google๊ณผ YouTube๋Š” ๊ฐ€์žฅ ์นœํ•œ ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” Google์ด ํ„ฐ๋ฌด๋‹ˆ์—†๊ฑฐ๋‚˜ ์žฌ๋ฏธ์žˆ๋Š” ์งˆ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋Œ€๋‹ตํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋น„๋””์˜ค๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ต๋ณ€๋„ ๋งค์šฐ ์žฌ๋ฏธ์žˆ์—ˆ์ง€๋งŒ, ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ๋ฉด Google์ด ํ™•์‹คํžˆ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ง‰๋‹ค๋ฅธ ๊ณจ๋ชฉ์— ์ด๋ฅด๋ €๋‹ค๋ฉด, ์ด ๊ฒ€์ƒ‰์—”์ง„์„ ํ†ตํ•ด ๋‹ต์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”. YouTube๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ์—๋„ ๋งŽ์€ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ํŠนํžˆ ์ฃผ์ œ์— ๋Œ€ํ•œ ๋” ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋Š˜ ํ™”์ œ์„ฑ ์žˆ๋Š” ์˜์ƒ์„ ์ฐพ์•„๋ณด๊ณค ํ•ด์š”.

ํ•œ ์Œ์˜ ๋ˆˆ์ด ๋” ์žˆ์œผ๋ฉด ์•„ํ”„์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ถ„๋…ธ์™€ ์ขŒ์ ˆ์— ์‚ฌ๋กœ์žกํžˆ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์˜ ๋ช…ํ™•ํ•œ ์˜ˆ๋Š” ๋ฌธ์„œ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ž˜๋œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์—ฌ๊ธฐ์—๋Š” ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ณ  ์ด์ „ ๊ฐœ๋ฐœ์ž์˜ ์Šคํƒ€์ผ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž์‹ ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€๋ฐฉ์€ ๋‹น์‹ ์ด ๋†“์ณค๊ฑฐ๋‚˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ ์ ์„ ์ง€์ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ญ”๊ฐ€์— ๋ง‰ํžˆ๋”๋ผ๋„ ์ž์ฑ…ํ•˜์ง€ ๋งˆ์„ธ์š”.

๋‚˜๋Š” ์ด๊ฒƒ์— ํŠน๋ณ„ํ•œ ๊ด€์‹ฌ์„ ๊ธฐ์šธ์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ด๋”˜๊ฐ€์— ๊ฐ‡ํžˆ๋”๋ผ๋„ ์ž์‹ ์—๊ฒŒ ํ™”๋ฅผ ๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋„ค, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ณ„๋กœ ์ฆ๊ฒ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž„ํฌ์Šคํ„ฐ ์ฆํ›„๊ตฐ์ด ์•…ํ™”๋  ์ˆ˜๋„ ์žˆ๊ณ , ์ž์‹ ์ด ์“ธ๋ชจ์—†๋‹ค๊ณ  ๋Š๋ผ๋ฉฐ, ์ž์‹ ์ด ์ข‹์€ ๊ฐœ๋ฐœ์ž๋ผ๋Š” ์ž์‹ ๊ฐ์„ ์žƒ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ์‚ฌ๋žŒ์ด ์ž์‹ ์˜ ์ผ์—์„œ ์–ด๋–ค ๊ฒƒ์— ๋ง‰ํžŒ ์ ์ด ์—†๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊ทธ๊ฐ€ ํ‰์†Œ์˜ ํ–‰๋™์„ ๋„˜์–ด์„œ์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์•ˆ๋ฝํ•œ ์˜์—ญ์—์„œ ํ–‰๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์— ๋Œ€๋น„ํ•˜๋ ค๋ฉด ๊ท€ํ•˜์˜ ์ „๋ฌธ์  ๊ธฐ์ค€์„ ๋†’์ด๋„๋ก ๊ฒฉ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์†Œํ†ตํ•˜์‹ญ์‹œ์˜ค. ์ค€๋น„๋˜์ง€ ์•Š์€ ์ผ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํ™”๋ฅผ ๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ์‚ฌ๋ก€๋Š” ์ง€์‹์˜ ๊ฒฉ์ฐจ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ด๋ฅผ ์ฑ„์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

ํœด์‹์„ ์ทจํ•˜๋‹ค

๋ณ„๋กœ ์ƒ์‚ฐ์ ์ด์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํฌ๊ณ  ๋ณต์žกํ•œ ์ผ์„ ํ•˜๊ณ  ์žˆ์„ ๋•Œ ์งง์€ ํœด์‹์„ ์ทจํ•˜๋Š” ๊ฒƒ์€ ์ŠคํŠธ๋ ˆ์Šค ํ•ด์†Œ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. 15๋ถ„ ๋™์•ˆ ๊ฑท๊ณ , ๋ˆ„๊ตฐ๊ฐ€์™€ ๋Œ€ํ™”ํ•˜๊ณ , ์šด๋™ํ•˜๊ณ , ์‹ฌ์ง€์–ด ๋‚ฎ์ž ๋„ ์ž๋ณด์„ธ์š”. ํœด์‹์€ ๋งˆ์Œ์„ ์ƒ์พŒํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ, ๊ฒŒ๋‹ค๊ฐ€ ์ด๋ฒˆ์—๋Š” ๋‡Œ๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๊ณ  ์ž ์žฌ์˜์‹ ์ˆ˜์ค€ ์–ด๋”˜๊ฐ€์—์„œ ๋‹น๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ปคํ”ผ๋ฅผ ๋งˆ์‹œ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์œ ๋ ˆ์นด ์ˆœ๊ฐ„์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ์•„๋Š” ๊ฒƒ๊ณผ ๋ชจ๋ฅด๋Š” ๊ฒƒ์˜ ๋ชฉ๋ก์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์ž‘์—…์„ ํ• ๋‹นํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ๋ช…ํ™•ํ•œ ์งˆ๋ฌธ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ญ”๊ฐ€๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์งˆ ๊ฒƒ์ด๋ฉฐ "๋ชจ๋ฆ„" ๋ฒ”์ฃผ์—์„œ ์ผ๋ถ€ ์งˆ๋ฌธ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ Google์ด๋‚˜ YouTube์—์„œ ์ง์ ‘ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ํ•  ์‹œ๊ฐ„์„ ์ข€ ์ฃผ์„ธ์š”. ํ˜ผ์ž์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ๋™๋ฃŒ์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”.

์ƒ์‚ฐ์„ฑ ๊ทน๋Œ€ํ™”๋ฅผ ์œ„ํ•œ 5๊ฐ€์ง€ ์ตœ๊ณ ์˜ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์ถœ์ฒ˜: Medium ์•„๋งˆ๋„ Java๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  "๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ํ…๋ฐ..."๋ผ๊ณ  ์ƒ๊ฐํ•œ ์ ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ตœ๊ณ ์˜ ๋„์„œ๊ด€ ๋‹ค์„ฏ ๊ณณ์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋„์„œ๊ด€์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์‚ฐ์„ฑ๊ณผ ์ž‘์—… ํšจ์œจ์„ฑ์ด ๋†’์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #42.  ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?  ์ตœ๋Œ€ ์„ฑ๋Šฅ์„ ์œ„ํ•œ 5๊ฐ€์ง€ ์ตœ๊ณ ์˜ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - 2

1. ๋กฌ๋ณต

Project Lombok ์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ค„์ด๋Š” Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. @Getter์™€ ๊ฐ™์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ getField() ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ง€์›๋˜๋Š” ์ฃผ์„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • getter ๋ฐ setter๋ฅผ ์ƒ์„ฑํ•˜๋Š” @Getter ๋ฐ @Setter
  • @EqualsAndHashCode๋Š” Equals ๋ฐ HashCode ๊ณ„์•ฝ์„ ์ค€์ˆ˜ํ•˜๋Š” Equals ๋ฐ HashCode ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค .
  • @ToString์€ ClassName(fieldName = value, fieldName2 = value...) ํ˜•์‹์„ ๋”ฐ๋ฅด๋Š” toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค .
  • @Builder๋Š” POJO๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋นŒ๋” ํŒจํ„ด์„ ์ž๋™์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • @Data๋Š” @Getter, @Setter, @EqualsAndHashCode, @ToString ๋ฐ @RequiredArgsConstructor์˜ ์•ฝ์–ด์ž…๋‹ˆ๋‹ค!
๋” ๋งŽ์€ ์ง€์›๋˜๊ณ  ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค๊ณผ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋ฉด ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

2. ๊ตฌ์•„๋ฐ”

Guava ๋Š” Google์—์„œ ๋งŒ๋“ค๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ฝ”๋“œ ์ž‘์—…์— ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋งŽ์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Guava์˜ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • Map์ด ํŠน์ • ํ‚ค์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ง€์›ํ•˜๋Š” Multimap<k, v="">์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ํ™•์žฅ์€ ๋” ๊น”๋”ํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Map <k, collection="" <v="">>์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ;</k, ></k,>
  • ๊ทธ๋ž˜ํ”ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํฌํ•จ๋œ Graphs ํŒจํ‚ค์ง€;
  • MoreExecutors, Atomics ๋ฐ ListenableFuture์™€ ๊ฐ™์€ ๋™์‹œ์„ฑ ์œ ํ‹ธ๋ฆฌํ‹ฐ.
Guava ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Google์˜ ์ง€์› ๋•๋ถ„์— ๊ฝค ์ธ๊ธฐ๊ฐ€ ๋†’์œผ๋ฏ€๋กœ ํ•ด๋‹น API๊ฐ€ ์ฒ ์ €ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๋˜๊ณ  ์ง€์›๋˜๋ฏ€๋กœ ์•ˆ์‹ฌํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ Java ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ Guava์—์„œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

3. ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ

Hibernate ๋Š” SQL ํ…Œ์ด๋ธ”๊ณผ POJO ๊ฐ„์˜ ๋ณ€ํ™˜์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š” ์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํ•‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Hibernate ์›น์‚ฌ์ดํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: โ€œHibernate๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์†, ๋‹คํ˜•์„ฑ, ์—ฐ๊ด€, ๊ตฌ์„ฑ ๋ฐ Java ์ปฌ๋ ‰์…˜์„ ํฌํ•จํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™์— ๋”ฐ๋ผ ์ˆ˜๋ช…์ด ๊ธด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Hibernate๋Š” ์ˆ˜๋ช…์ด ๊ธด ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ํด๋ž˜์Šค๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ง€์†๋˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.โ€ ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ๊ฐœ์„ ํ•˜๊ณ  ์ˆ˜์ฒœ ์ค„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด Hibernate๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

4. ๊ฐ€์งœ

OpenFeign ์€ Java์—์„œ RESTful HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Netflix์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Feign ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์š”์ฒญ ๋ฐ ์‘๋‹ต ์„ธ๋ถ€์ •๋ณด๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ ์˜ˆ๋ฅผ ํ†ตํ•ด ๊ฐ€์žฅ ์ž˜ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.
@FeignClient(url = "https://github.com")
interface GitHubClient {
    @RequestLine("GET /users/{username}/repos?sort=full_name")
    List<repository> repos(@Param("username") String owner);

    @RequestLine("GET /repos/{owner}/{repo}/contributors")
    List<contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);

    @RequestLine("POST /repos/{owner}/{repo}/issues")
    void createIssue(Issue issue, @Param("owner") String owner, @Param("repo") String repo);
}
</contributor></repository>
์œ„์— ์–ธ๊ธ‰๋œ GitHubClient ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฉ”์„œ๋“œ์— ์„ค๋ช…๋œ GET ๋ฐ POST ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹๋Œ€ํ•ด JSON ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Feign ํด๋ผ์ด์–ธํŠธ์—๋Š” ๋‹ค์–‘ํ•œ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค:
  • POJO๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋Š” ์ธ์ฝ”๋” ๋ฐ ๋””์ฝ”๋”;
  • ์žฌ์‹œ๋„ ๊ทœ์น™ ๋ฐ ๋…ผ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ์žฌ์‹œ๋„์ž
  • ์ฟ ํ‚ค ์ˆ˜์‹  ๋˜๋Š” ์Šน์ธ๊ณผ ๊ฐ™์€ ๊ธฐํƒ€ ์‚ฌ์ „ ์š”์ฒญ ์ž‘์—…์„ ์œ„ํ•œ RequestInterceptor์ž…๋‹ˆ๋‹ค.
Feign์„ ์‚ฌ์šฉํ•˜๋ฉด HTTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค! ์ฐธ๊ณ : Spring์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Spring๊ณผ์˜ ํ†ตํ•ฉ์ด OpenFeign ์ž์ฒด๋ณด๋‹ค ๋” ๋‚˜์€ Spring Cloud OpenFeign์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

5. ์Šคํ”„๋ง ๋ถ€ํŠธ

๋งˆ์ง€๋ง‰์œผ๋กœ ์ค‘์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Spring Boot ์ž…๋‹ˆ๋‹ค . Spring Boot๋Š” ํ”„๋กœ๋•์…˜์— ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:
  • ๋…๋ฆฝํ˜• Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Tomcat, Jetty ๋˜๋Š” Undertow๋ฅผ ์ง์ ‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(WAR ํŒŒ์ผ์„ ๋ฐฐํฌํ•  ํ•„์š” ์—†์Œ).
  • ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด "์Šคํƒ€ํ„ฐ" ์ข…์†์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Spring ๋ฐ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”ํŠธ๋ฆญ, ์ƒํƒœ ํ™•์ธ, ์™ธ๋ถ€ ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Spring Boot๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ๋Š” ์ƒ๋‹นํ•œ ํ•™์Šต ๊ณก์„ ์ด ์žˆ์ง€๋งŒ ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. Spring Boot๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ–ˆ์œผ๋ฉฐ ์•ˆ์ •์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ๊ฐ€๋…์„ฑ์œผ๋กœ ์ธํ•ด ๊ณ„์†ํ•ด์„œ ์ด์ ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Java๋ฅผ ์ตœ์‹  ์–ธ์–ด์˜ ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๊ฐ€ ๋ถ€์กฑํ•œ "์˜ค๋ž˜๋œ" ์–ธ์–ด๋กœ ๊ฐ„์ฃผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Java๋Š” ์ˆ˜๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋Œ€๊ทœ๋ชจ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ˜•ํƒœ๋กœ ๊ณ ์œ ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž‘์—…์—์„œ ๋ฌธ์ œ๊ฐ€ ํ›จ์”ฌ ์ค„์–ด๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐœ๋ช…ํ•˜์ง€ ๋ง๊ณ  ํ•ต์‹ฌ ์—ญ๋Ÿ‰์— ์ง‘์ค‘ํ•˜์„ธ์š”!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION