JavaRush /Java Blog /Random-KO /๋“ค์–ด๋ณธ ์  ์—†๋Š” Java 8์˜ 10๊ฐ€์ง€ ๊ธฐ๋Šฅ
Vash_the_Stampede
๋ ˆ๋ฒจ 11

๋“ค์–ด๋ณธ ์  ์—†๋Š” Java 8์˜ 10๊ฐ€์ง€ ๊ธฐ๋Šฅ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๋žŒ๋‹ค, ๋žŒ๋‹ค, ๋žŒ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด Java 8์— ๊ด€ํ•ด ์ด์•ผ๊ธฐํ•  ๋•Œ ๋“ฃ๋Š” ๋‚ด์šฉ์€ ์ด๊ฒƒ์ด ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ํ•œ ๋ถ€๋ถ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. Java 8์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ•๋ ฅํ•œ ์ƒˆ ํด๋ž˜์Šค์™€ ๊ด€์šฉ์–ด, ๊ทธ๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์žˆ์–ด์•ผ ํ–ˆ๋˜ ๊ธฐ๋Šฅ ๋“ฑ ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ™•์‹คํžˆ ์•Œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ์ž‘์€ ๋ณด์„์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” 10๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘์— ์—ฌ๋Ÿฌ๋ถ„์ด ์‹œ๋„ํ•ด๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์ด ์ ์–ด๋„ ํ•œ๋‘ ๊ฐœ ์žˆ์„ ํ…Œ๋‹ˆ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”! 1) ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•. Java ์–ธ์–ด์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ์ด์ œ ์ธํ„ฐํŽ˜์ด์Šค( ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ )์— ๋ฉ”์†Œ๋“œ ๋ณธ๋ฌธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋Š” ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค์— ๋ฌด์กฐ๊ฑด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ์ฝ”๋“œ๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ ํ”Œ๋Ÿฌ์Šค์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ด๋Š” ํŠน์ • ์กฐ๊ฑด์„ ๊ทœ์น™์œผ๋กœ ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฅผ ๋”ฐ๋ฅด๋Š” ํด๋ž˜์Šค(๊ฐœ์ธ ๊ตฌํ˜„) ์‚ฌ์ด์˜ ๊ฒฝ๊ณ„๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. (์˜ค๋ฅธ์ชฝ) ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋” ์Šค๋งˆํŠธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , ๋ฐ˜๋ณต์„ ํ”ผํ•˜๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™•์žฅํ•˜๋Š” ์šฐ์•„ํ•œ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์œ ์†์—; ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ˜ธ์ถœํ•˜๊ณ  ์ด๋ฅผ ๊ตฌ์ฒด์ ์ธ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ณง ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Brrr.... 2) ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ(ํฌ๋ž™)(์ถฉ๋Œ)๋˜๊ฑฐ๋‚˜ ์ •์ง€(์ค‘์ง€)๋˜๊ฑฐ๋‚˜ CPU๋ฅผ 100% ์‚ฌ์šฉํ•  ๋•Œ ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ๋Œ์•„์™€(๋””๋ฒ„๊ทธ) ๋ฐ˜์ฏค ์•Œ๊ณ  ์žˆ๋Š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Process ํด๋ž˜์Šค๋Š” ์ด์ œ ํ†ต์ œํ•˜๊ธฐ ์–ด๋ ค์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋กœ ๋ฌด์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ isAlive()๋ฅผ ์‚ฌ์šฉ ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ ๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ์ด์ž ๋” ๊ฐ•๋ ฅํ•œ(๊ฒฝ๊ณ !) ๊ฒƒ์€ destroyForcically() ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ„(๋Œ€๊ธฐ ์ค‘์ด๋“  ์•„๋‹ˆ๋“ )์„ ์ดˆ๊ณผํ–ˆ๊ฑฐ๋‚˜ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋ฅผ (๋ป”๋ป”ํ•˜๊ฒŒ) ๊ฐ•์ œ๋กœ(์ข…๋ฃŒ) ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3) ์Šคํƒฌํ”„๋ฝ. ์ด์ œ ์ •๋ง ํฅ๋ฏธ๋กœ์šด ์ผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋™๊ธฐํ™”๋ฅผ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๊ฑฐ๋‚˜(ํŠนํžˆ ๋Œ€๊ทœ๋ชจ๋กœ) ๋” ์‹ฌํ•œ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์ง€์‹œํ‚ค๋Š” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋•Œ๋กœ๋Š” ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•ก์„ธ์Šค๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐ๋Š” ๋‹ค์–‘ํ•œ ๊ด€์šฉ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์„ ํ˜ธ๋˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ReadWriteLock ๋ฐ ๊ด€๋ จ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ์ด ๊ด€์šฉ๊ตฌ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋งŒ ์ฐจ๋‹จํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ๊ฒฝํ•ฉ์„ ์ค„์ž…๋‹ˆ๋‹ค. ๋“ฃ๊ธฐ์—๋Š” ์ข‹์ง€๋งŒ ์‹ค์ œ๋กœ ์ด ์ž ๊ธˆ์€ ๋„ˆ๋ฌด ๋Š๋ฆฝ๋‹ˆ๋‹ค . ํŠนํžˆ ์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋„ˆ๋ฌด ๋‚˜์œ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์–ด Java 8์—๋Š” StampedLock ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด RWLock์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ด ์ž ๊ธˆ์€ ์†๋„๊ฐ€ ๋” ๋น ๋ฅผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‚™๊ด€์  ์ž ๊ธˆ์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ฝ”๋“œ์˜ ์ค‘์š”ํ•œ ์„น์…˜ ๋™์•ˆ ์“ฐ๊ธฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉด์„œ ์ €๋ ดํ•œ ๋น„์šฉ์œผ๋กœ ์ฝ๊ธฐ ์ž ๊ธˆ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„น์…˜์ด ๋๋‚˜๋ฉด ํ•ด๋‹น ์‹œ๊ฐ„ ๋™์•ˆ ๋…น์Œ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ž ๊ธˆ์— ๋ฌป์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€, ์ž ๊ธˆ์„ ์—์Šค์ปฌ๋ ˆ์ด์…˜ํ• ์ง€, ์•„๋‹ˆ๋ฉด ํฌ๊ธฐํ• ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž๋ฌผ์‡ ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋ฉฐ ๊ทธ ์ž์ฒด์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์ƒˆ๋กœ์šด ์žฅ๋‚œ๊ฐ์— ๋Œ€ํ•ด ์—„์ฒญ๋‚˜๊ฒŒ ํฅ๋ถ„๋œ๋‹ค. ์—„์ฒญ๋‚œ! ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹น์‹ ์€ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ . 4) ๊ฒฝ์Ÿ ๊ธฐ๋ก์ž. ์ด๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๋˜ ํ•˜๋‚˜์˜ ์ž‘์€ ๋ณด์„์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์นด์šดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ƒˆ API์ž…๋‹ˆ๋‹ค . ๋•Œ๋กœ๋Š” AtomicInteger๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ฝค ๋ฉ‹์ ธ! 5) ์„ ํƒ์ (๋˜๋Š” ์„ ํƒ์ ) ๊ฐ’. ์•„, ๋„ ํฌ์ธํ„ฐ๋Š” ๋ชจ๋“  Java ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ชจ๋“  ์˜ˆ์™ธ ์ค‘์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ์กด์žฌํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ 1965๋…„ ์ดํ›„ . Scala ๋ฐ Haskell์—์„œ ์ฐจ์šฉํ•œ Java 8์—๋Š” null์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ๋ฅผ ๋ž˜ํ•‘ํ•˜๊ธฐ ์œ„ํ•œ Optional์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํŒจํ„ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฐ์ฝ” null์„ ์—†์• ๋Š” ๋ฌ˜์ฑ…์ด ์•„๋‹ˆ๋ผ API ๋””์ž์ด๋„ˆ๊ฐ€ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ(๋ฌธ์„œ ๋Œ€์‹ ) null ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ์— ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Œ์„ ํ‘œ์‹œํ•˜๋Š” ์ˆ˜๋‹จ์ด๋ฉฐ ํ˜ธ์ถœ์ž๋Š” ๋ฐ˜๋“œ์‹œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ค€๋น„ํ•˜์‹ญ์‹œ์˜ค. ๋”ฐ๋ผ์„œ ์ด๋Š” ํ˜ธ์ถœ์ž๊ฐ€ ์ฐธ์กฐ๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฒŒ ์—ญ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ๋Š” ๋ž˜ํผ์—์„œ ์ด์Šค์ผ€์ดํ”„๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒˆ API์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ƒ๋‹นํžˆ ์–‘๋ฉด์ ์ธ ์ž…์žฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ null์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํฐ ๋ฌธ์ œ๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰๋œ ๋ชจ๋“  ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋‚˜๋Š” ์ด๊ฒƒ์ด ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์„์ง€ ๋งค์šฐ ํšŒ์˜์ ์ด๋‹ค. Optional์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํšŒ์‚ฌ ์ „์ฒด์˜ ์ง€์†์ ์ธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๊ณ  ์ฆ‰๊ฐ์ ์ธ ์˜ํ–ฅ์ด ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๋‹จ์†์ด ์—†์œผ๋ฉด ๋„๋กœ ์™ผ์ชฝ์— ๋จธ๋ฌผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. Optional ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š” . 6) ๋ชจ๋“  ๊ฒƒ์— ์ฃผ์„์„ ๋‹ต๋‹ˆ๋‹ค. Java ์–ธ์–ด์˜ ๋˜ ๋‹ค๋ฅธ ์ž‘์€ ๋ฐœ์ „์€ ์ฝ”๋“œ์˜ ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ ์„ ์–ธ ๊ฐ™์€ ํ•ญ๋ชฉ์—๋งŒ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Java 8๋ถ€ํ„ฐ ๊ฐ’์„ ํŠน์ • ์œ ํ˜•์œผ๋กœ ์บ์ŠคํŒ…ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๋ณ€์ˆ˜ ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์— ์ฃผ์„์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์–ธ์–ด๋ฅผ ์ •์  ๋ถ„์„ ๋ฐ ์ธก์ • ๋„๊ตฌ(์˜ˆ: FindBugs)์— ๋”์šฑ ์นœ์ˆ™ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ง‘์ค‘์ ์ธ ๋…ธ๋ ฅ(JavaDoc ๋„๊ตฌ ๋ฐ API ๊ฐœ์„ ๊ณผ ํ•จ๊ป˜)์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ข‹์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ Java 7์— ๋„์ž…๋œ InvokeDynamic ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹ค์ œ ๊ฐ€์น˜๋Š” ์‚ฌํšŒ๊ฐ€ ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. 7) ์˜ค๋ฒ„ํ”Œ๋กœ ์ž‘์—…. ์ด์ œ ์ผ๋ จ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค., ์ด๋Š” ์ฒซ๋‚ ๋ถ€ํ„ฐ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€์˜€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์ทจ๋ฏธ๋Š” ์ •์ˆ˜๊ฐ€ 2^32๋ฅผ ์ดˆ๊ณผํ•  ๋•Œ ์ˆซ์ž ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๊ฐ€์žฅ ์‹ฌ๊ฐํ•˜๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜(์˜ˆ: "๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ด์ƒํ•œ ๊ฐ’์„ ์–ป๋Š”๊ฐ€?")๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์—๋Š” ๋ฌ˜์ฑ…์ด ์—†์ง€๋งŒ, ๋ฌด์กฐ๊ฑด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๋Š” ํ‘œ์ค€ +/* ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋œ ๊ด€๋Œ€ํ•˜๊ฒŒ ์˜ค๋ฒ„ํ”Œ๋กœ๋  ๋•Œ ์ˆซ์ž๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 8) ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”. ๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ์˜ ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋žซ๋™์•ˆ ์‚ฌ๋žŒ๋“ค์ด Google์—์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ Apache.FileUtils๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค). Java 8์—์„œ๋Š” Files ํด๋ž˜์Šค ์— 10๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์˜ ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฒŒ์œผ๋ฅธ ์Šค๋ ˆ๋“œ(๋Œ€ํ˜• ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ค‘์š”)๋ฅผ ์ƒ์„ฑํ•˜๋Š” walk() ์ž…๋‹ˆ๋‹ค. 9) ๊ฐ•๋ ฅํ•œ ๋ฌด์ž‘์œ„ ์ƒ์„ฑ. ์š”์ฆ˜์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ‚ค์˜ ์ทจ์•ฝ์„ฑ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ๋„˜์ณ๋‚ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๋ณด์•ˆ์€ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค์ด๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ์ƒˆ๋กœ์šด SecureRandom ๋ฐฉ๋ฒ•์„ ์ข‹์•„ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. getinstanceStrong() - Java Virtual Machine์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๋ฌด์ž‘์œ„ ์ƒ์„ฑ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์•ฝํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค์–ด ํ‚ค์™€ ์•”ํ˜ธํ™”๋œ ๊ฐ’์ด ํ•ดํ‚น์— ๋” ์ทจ์•ฝํ•ด์ง‘๋‹ˆ๋‹ค. 10. ๋‚ ์งœ.toInstant(). Java 8์—๋Š” ๋‚ ์งœ์™€ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด API๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๊ธฐ์กด์˜ ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ์ข‹์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๊ฝค ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Joda๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์— ๋Œ€ํ•œ Java API๋ฅผ ์ง€ํ–ฅํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ API๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํ•œ ๊ฐ€์ง€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ทธ๋“ค์ด ์—ฌ๊ธฐ์— ๋‚จ์•„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋„ˆ๋Š” ๋ญ˜ ํ•  ๊ป€๋ฐ? ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Java 8์€ ์ด๋ฅผ ์ƒˆ๋กœ์šด API๋กœ ๋ณ€ํ™˜ํ•˜๋Š” toInstant() ๋ผ๋Š” Date ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค์†Œ ์šฐ์•„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ํ†ตํ•ด ์ด์ „ ๋‚ ์งœ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ƒˆ API๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์—๋„ ๊ณ„์† ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค).
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION