JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94. 5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† . Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94. 5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† . Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜

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

5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† 

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

๋‚ด์žฅ IntelliJ IDEA ๋ถ„์„๊ธฐ

IntelliJ IDEA์— ๋‚ด์žฅ๋œ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ๋Š” ์ „๋ฌธ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ณด๋‹ค ๊ฒฐ์ฝ” ์—ด๋“ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜์‹ฌ์Šค๋Ÿฝ๊ฑฐ๋‚˜ ์–ด์ˆ˜์„ ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์ฝ”๋“œ ์กฐ๊ฐ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰์€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„ ๋ฐ ํŒจํ„ด ์ผ์น˜์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ •์  ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. IntelliJ IDEA์—๋Š” ์ˆ˜๋งŽ์€ ๊ฒ€์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๋“ค ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ณด๊ณ ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์ฝ”๋“œ๊ฐ€ ์—‰์„ฑํ•˜๊ฑฐ๋‚˜ ๊น”๋”ํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. "Inspections โ†’ Java"๋ฅผ ์กฐ๊ธˆ ๊ณต๋ถ€ํ•œ ํ›„, ํ•œ ๊ฐ€์ง€ ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ ์˜ค๋ฅ˜, ์ˆ˜์น˜ ๋ฌธ์ œ, ์ง๋ ฌํ™” ๋ฌธ์ œ ๋ฒ”์ฃผ์˜ ๊ฒ€์‚ฌ์—์„œ๋Š” ์‹ค์ œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ณ  ์–ด๋–ค ํ…Œ์ŠคํŠธ๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์ฝ”๋“œ ํŽธ์ง‘ ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ IntelliJ IDEA์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ๋ช‡ ์ดˆ ๋‚ด์— ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŽธ์ง‘๊ธฐ๋Š” ์ž˜๋ชป๋œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฆ‰์‹œ ๊ฐ•์กฐ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 2์ •๋ง ํŽธ๋ฆฌํ•˜๊ณ  ๋ฉ‹์ง€๋„ค์š”! ๋˜ํ•œ ์„ ํƒํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•ด "Alt + Enter" ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํ™ฉ์— ๋งž๋Š” ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 3๋˜ํ•œ ํŠน์ • ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ด์œ ๋ฅผ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 4"๋ถ„์„ โ†’ ์ฝ”๋“œ ํ™•์ธ"์„ ์„ ํƒํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ๋ถ„์„์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” โ€œ๋ถ„์„ โ†’ ์ด๋ฆ„๋ณ„ ๊ฒ€์‚ฌ ์‹คํ–‰โ€์„ ํ†ตํ•ด ๊ฐœ๋ณ„ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ๋ถ„์„ ๋ฒ”์œ„(ํ”„๋กœ์ ํŠธ, ๋ชจ๋“ˆ ๋˜๋Š” ๊ฐœ๋ณ„ ํŒŒ์ผ์— ๋Œ€ํ•œ)๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋ฉด ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ํŽธ์ง‘ ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ผ๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ํ›„ ๊ฒฐ๊ณผ๋Š” ๋ณ„๋„์˜ ์ฐฝ์— ์นดํ…Œ๊ณ ๋ฆฌ/๋””๋ ‰ํ„ฐ๋ฆฌ๋ณ„๋กœ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ์ฐฝ์—์„œ ํŠน์ • ๊ฒ€์ฆ ํŠธ๋ฆฌ๊ฑฐ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 5IntelliJ์—์„œ๋Š” ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ HTML ๋ฐ XML ํ˜•์‹์œผ๋กœ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ œ ์ƒ๊ฐ์—๋Š” IDE ์ž์ฒด์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ. ๋Œ€๋ถ€๋ถ„์˜ ์ •์  ๋ถ„์„๊ธฐ ๊ธฐ๋Šฅ์€ ๋ฌด๋ฃŒ IntelliJ IDEA Community Edition์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SonarJava

SonarJava ๋Š” SonarSource์˜ Java์šฉ ์ •์  ์ฝ”๋“œ ๋ถ„์„๊ธฐ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๋ชฉ๋ก์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ IDE( SonarLint ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด )์™€ SonarQube ์—์„œ ๋ณ„๋„๋กœ ๋ถ„์„์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . SonarLint๋Š” ๋‚ด์žฅ๋œ IntelliJ IDEA ์ฝ”๋“œ ๋ถ„์„๊ธฐ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ์ฝ”๋“œ ๋ถ€๋ถ„ ์œ„๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋‘ ๋ถ„์„๊ธฐ์˜ ๊ฒฝ๊ณ ๋ฅผ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 6๋ฌผ๋ก  ๋ณ„๋„์˜ ์ฐฝ์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 7์ „๋ฐ˜์ ์œผ๋กœ SonarJava๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋„๊ตฌ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FindBugs/SpotBugs

์•ˆํƒ€๊น๊ฒŒ๋„ FindBugs๋Š” ์˜ค๋žซ๋™์•ˆ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์•ˆ์ • ๋ฆด๋ฆฌ์Šค๋Š” 2015๋…„์— ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋งˆ๋„ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๋ฌด๋ฃŒ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Java ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ •์  ๋ถ„์„์— ๋Œ€ํ•ด ๋ฌธ์˜ํ•˜๋ฉด ์•„๋งˆ๋„ ์ฆ‰์‹œ FindBugs๋ฅผ ๋– ์˜ฌ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ๋ถ„์„๊ธฐ SpotBugs๋Š” ๋ฒ„๋ ค์ง„ FindBugs์˜ ๋…ผ๋ฆฌ์  ์—ฐ์†์ฒด๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. FindBugs์˜ ๋ชจ๋“  ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ข‹์€์ง€ ๋‚˜์œ์ง€๋Š” ์‹œ๊ฐ„์ด ๋งํ•ด ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ ๋ถ„์„๊ธฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋Š” ์ด๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. SpotBugs์˜ ์ฃผ์š” ๊ธฐ๋Šฅ:
  • 400๊ฐœ ์ด์ƒ์˜ ์˜ค๋ฅ˜ ๊ฐ์ง€ ๊ทœ์น™;
  • Ant, Maven, Gradle, Eclipse, IntelliJ IDEA์— ํ†ตํ•ฉ;
  • ์‚ฌ์šฉ์ž ์ •์˜ ์ง„๋‹จ ๊ทœ์น™์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์˜์‹ฌ์Šค๋Ÿฌ์šด ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ํŒจํ„ด ์ผ์น˜์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„์ด๋ผ๋Š” ๋™์ผํ•œ ๋ฐฉ๋ฒ•๋ก ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„๊ธฐ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, ์„ฑ๋Šฅ, ์ทจ์•ฝ์ , ์ฝ”๋“œ ๋‚œ๋…ํ™” ๋“ฑ๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. IntelliJ IDEA์—์„œ ๊ฒฝ๊ณ  ์ฐฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 8๊ฒฝ๊ณ ๋Š” ๋ฒ”์ฃผ, ํด๋ž˜์Šค, ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ ์‹ ๋ขฐ ์ˆ˜์ค€๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ง„๋‹จ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ์™€ ๋ฌธ์„œ๋ฅผ ๋™์‹œ์— ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„์€ ์ˆ˜๋™์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ํ›„์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์ฝ”๋“œ ์กฐ๊ฐ์ด IntelliJ IDEA ๋ฐ SonarLint์˜ ๋‹ค๋ฅธ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ๊ฒฝ๊ณ ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋ถ„์„์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŽ์€ ๊ถŒ๊ณ  ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ถ„์„๊ธฐ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PVS-์ŠคํŠœ๋””์˜ค

PVS-Studio๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Spoon์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์˜๋ฏธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž˜ ์„ค๊ณ„๋œ AST ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„;
  • ์ƒ์ง•์  ํผํฌ๋จผ์Šค;
  • ๋ฉ”์†Œ๋“œ ์ฃผ์„
  • ํŒจํ„ด ๊ธฐ๋ฐ˜ ๋ถ„์„.
ํ˜„์žฌ ๋ถ„์„๊ธฐ๋Š” ๋‹ค์–‘ํ•œ ์ฝ”๋“œ ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•˜๋Š” 105๊ฐœ ์ด์ƒ์˜ ์ง„๋‹จ ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์˜คํƒ€ ์ˆ˜์ •, Null ์ฐธ์กฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ, ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฐฐ์—ด ์ธ๋ฑ์Šค, ๋ฉ”์„œ๋“œ ๊ณ„์•ฝ ์‚ฌ์šฉ ์œ„๋ฐ˜ ๋ฐ ๊ธฐํƒ€ ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ชจ๋“  ์ง„๋‹จ ๊ทœ์น™ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . PVS-Studio์˜ ์ฃผ์š” ๊ธฐ๋Šฅ:

PMD

PMD ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ •์  ๋ถ„์„๊ธฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜, ๋นˆ ๋ธ”๋ก, ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๊ธฐํƒ€ ๋ฌธ์ œ ๋“ฑ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ์˜ค๋ฅ˜๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„๊ธฐ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ PMD๋Š” ํ”„๋กœ์„ธ์Šค๋‹น ํ•˜๋‚˜์˜ ์†Œ์Šค ํŒŒ์ผ์„ ๋ถ„์„ํ•˜๋ฏ€๋กœ ๋ถ„์„์˜ ์™„์ „์„ฑ์— ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PMD ์ž‘์„ฑ์ž๋Š” ๋ถ„์„ ์ „์— ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐ๋ฆฝํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ถ„์„ ์ค‘์ธ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋œ ์œ ํ˜•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PMD์˜ ์ฃผ์š” ๊ธฐ๋Šฅ:
  • ๋‹ค์–‘ํ•œ IDE(IntelliJ IDEA, Eclipse, NetBeans) ๋ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ(Maven, Gradle, Ant)๊ณผ ํ†ตํ•ฉ
  • SARIF, CSV, IDEA, JSON, ํ…์ŠคํŠธ(๊ธฐ๋ณธ๊ฐ’), XML, HTML, TextColor ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์„๊ธฐ ๋ณด๊ณ ์„œ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • 300 ๊ฐœ๊ฐ€ ๋„˜๋Š” ์ง„๋‹จ ๊ทœ์น™ ํ…œํ”Œ๋ฆฟ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์นดํ…Œ๊ณ ๋ฆฌ: ์ฝ”๋”ฉ ์Šคํƒ€์ผ, ๋ชจ๋ฒ” ์‚ฌ๋ก€, ๋ฒ„๊ทธ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ, ์„ฑ๋Šฅ ๋“ฑ
  • ์ฝ”๋“œ์—์„œ ์ค‘๋ณต์„ ๊ฐ์ง€ํ•˜๋Š” PMD์™€ ํ•จ๊ป˜ CPD(๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ฐ์ง€๊ธฐ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ์ง„๋‹จ ๊ทœ์น™์„ ์‚ดํŽด๋ณด๋ฉด PMD๋Š” ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ช…๋ฐฑํ•œ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•˜๋Š” ๋ฐ ๋” ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์ง„๋‹จ ๊ทœ์น™์€ ์„œ๋กœ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ถ„์„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IntelliJ IDEA์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๋ถ„์„์„ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ถ„์„์„ ์œ„ํ•ด ๊ฐœ๋ณ„ ํŒŒ์ผ์„ ์„ ํƒํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ  ์ฐฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 9์ œ ์ƒ๊ฐ์—๋Š” ๊ฒฝ๊ณ  ์ž‘์—…์€ ํŒŒ์ผ๊ณผ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆฌ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ  ์œ„๋กœ ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐˆ ๋•Œ๋งŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋ฌผ๋ก  ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ถ„์„๊ธฐ ์™ธ์—๋„ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ๋ฃŒ(Coverity, Klockwork, JArchitect) ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฌด๋ฃŒ(Error Prone, Infer, Checkstyle) ํ”„๋กœ๊ทธ๋žจ์ด ๋ชจ๋‘ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ชจ๋‘ ํ•œ ๊ฐ€์ง€์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค: ๋ถ€์ •ํ™•ํ•˜๊ฑฐ๋‚˜ ์ž ์žฌ์ ์œผ๋กœ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๋•์…˜์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์ž‘์—…์— ์–ด๋–ค ๋ถ„์„๊ธฐ๊ฐ€ ๋” ์ ํ•ฉํ•œ์ง€ ํŒ๋‹จํ•  ๊ถŒ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„ ๋ฐ ๊ธฐํ˜ธ ์‹คํ–‰์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ถ„์„๊ธฐ๋Š” ์ฝ”๋“œ์—์„œ ์‹ค์ œ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„๊ธฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ์‚ฌํ•ญ์— ์ฃผ์˜ํ•˜์„ธ์š”.
  • ๋‹ค์–‘ํ•œ IDE๋กœ์˜ ํ†ตํ•ฉ;
  • ์กฐ๋ฆฝ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉ;
  • ์„œ๋ฒ„์—์„œ ๋ถ„์„๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ํŽธ์ง‘ ๋ชจ๋“œ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ;
  • ๊ฒฝ๊ณ ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ;
  • SAST ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜;
  • ๊ฑฐ์ง“ ๊ธ์ • ๋น„์œจ;
  • ๊ตฌ์„ฑ์˜ ๋ณต์žก์„ฑ.
  • ๋ชจ๋“  ์žฅ๋‹จ์ ์„ ์กฐํ•ฉํ•˜๋ฉด ๊ท€ํ•˜๊ฐ€ ์ตœ๊ณ ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ •์  ๋ถ„์„๊ธฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฐธ๊ณ : IntelliJ IDEA๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— IntelliJ IDEA์— ํ†ตํ•ฉ๋œ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜

์ถœ์ฒ˜ : DZone ์ด์ œ Java ํž™์ด๋‚˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์˜ค๋ฅ˜๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋จผ์ € ์ด ๋‘ ์šฉ์–ด๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๊ธฐ์–ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” Java ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค.
  • ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์š” ์˜ˆ์™ธ๋Š” java.lang.OutOfMemoryError ์ž…๋‹ˆ๋‹ค . ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #94.  5๊ฐœ์˜ ์ •์  Java ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ฒ€ํ† .  Java ํž™ ๋ฐ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜ - 10

Java ํž™ ๊ณต๊ฐ„

์ด ์˜ค๋ฅ˜๋Š” Java ํ”„๋กœ๊ทธ๋žจ์ด ํž™ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒˆ ๊ฐœ์ฒด๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

GC ์˜ค๋ฒ„ํ—ค๋“œ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

Java ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ํ”„๋กœ๊ทธ๋žจ ์‹œ๊ฐ„์˜ 98%๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ 2% ๋ฏธ๋งŒ์„ ๋ณต๊ตฌํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
public class OutOfMemoryErrorDemo {
    public static void main(String[] args) {
        int i = 0;
        List<String> stringList = new ArrayList<>();
        while (i < Integer.MAX_VALUE) {
            i++;
            String generatedString = new String( "Some string generated to show out of memory error example " + i);
            stringList.add(generatedString);
        }
    }
}
์—ฌ๊ธฐ์„œ stringList์—๋Š” ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฐ€๋น„์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์š”์ฒญํ•œ ์–ด๋ ˆ์ด ํฌ๊ธฐ๊ฐ€ VM ์ œํ•œ์„ ์ดˆ๊ณผํ•จ

ํž™์— ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„์ด ์—†์„ ๋•Œ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
public class OutOfMemoryErrorDemo {
    public static void main(String[] args) {
        // we try to create too long array
        long[] array = new long[Integer.MAX_VALUE];
    }
}

๋ฉ”ํƒ€์ŠคํŽ˜์ด์Šค

ํด๋ž˜์Šค ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๋ฉ”ํƒ€๊ณต๊ฐ„ ์˜์—ญ์— ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด ์ด ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์Šค์™‘ ๊ณต๊ฐ„ ์—†์Œ(์ด์œ ๋กœ ์ธํ•œ ์š”์ฒญ ํฌ๊ธฐ ๋ฐ”์ดํŠธ. ์Šค์™‘ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๊นŒ?)

๊ธฐ๋ณธ ํž™์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ด์œ  stack_trace_with_native_method

์›์‹œ Java ์ธํ„ฐํŽ˜์ด์Šค ๋˜๋Š” ์›์‹œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํž™์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. StackOverFlowError - ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๋ถ€์— ์žฌ๊ท€๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
public class StackOverFlowErrorDemo {

    public static void main(String[] args) {
        recursiveMethod(2);
    }

    public static int recursiveMethod(int i) {
      	// it will never stop and it allocates all stack memory
        return recursiveMethod(i);
    }
}
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION