๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(377)
[Java] ์ฐธ์กฐ ํƒ€์ž…(Reference Type) : Strong Reference, Soft Reference, Weak Reference, Phantom Reference ์ถœ์ฒ˜ChatGPT์ž๋ฐ”์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ฐธ์กฐ ํƒ€์ž…์„ ์ œ๊ณตํ•ด, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์„ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ฐธ์กฐ ํƒ€์ž…์€ ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ง‘ ์ „๋žต์„ ๋‹ค๋ฅด๊ฒŒ ๊ด€๋ฆฌํ•˜๋„๋ก ๋•๋Š”๋‹ค. ์ž๋ฐ”๋Š” ๊ฐ•ํ•œ ์ฐธ์กฐ(Strong Reference)์™ธ์—๋„ ์•ฝํ•œ ์ฐธ์กฐ(Weak Reference), ๋ถ€๋“œ๋Ÿฌ์šด ์ฐธ์กฐ(Soft Reference) ๊ทธ๋ฆฌ๊ณ  ์œ ๋ น ์ฐธ์กฐ(Phantom Reference)๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐธ์กฐ ํƒ€์ž…๋“ค์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ํŠน์„ฑ๊ณผ ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 1. ์ฐธ์กฐ ํƒ€์ž…(Reference Types) ์„ค๋ช…1.1 ๊ฐ•ํ•œ ์ฐธ์กฐ Strong Reference๊ฐ•ํ•œ ์ฐธ์กฐ๋Š” ์ž๋ฐ”์˜ ๊ธฐ๋ณธ ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.๊ธฐ๋Šฅ๊ฐ•..
[Java] ์ฐธ์กฐ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ reachability ์ถœ์ฒ˜ChatGPT์ž๋ฐ”์˜ ์ฐธ์กฐ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ(reachability) ๊ฐœ๋…์€ Garbage Collection(GC) ๋งค์ปค๋‹ˆ์ฆ˜์˜ ํ•ต์‹ฌ์œผ๋กœ, ์ž๋ฐ” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ "์‚ฌ์šฉ ์ค‘"์ธ์ง€, ์•„๋‹ˆ๋ฉด "๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ"์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ค€์ด๋‹ค. ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฐ์ฒด๊ฐ€ ์—ฌ์ „ํžˆ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๊ฒฝ๋กœ ๋‚ด์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ , ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. 1. ์ฐธ์กฐ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ์ด๋ผ?์ฐธ์กฐ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ(reachability)์€ ํŠน์ • ๊ฐ์ฒด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…์ด๋‹ค. ์ž๋ฐ” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ ๋ถ„์„(reachability analysis)์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด ๋ถ„์„์— ๋”ฐ๋ผ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ..
[JVM] Out of Memory VS Memory Leak ์ถœ์ฒ˜ChatGPTOut of Memory(OOM)์™€  Memory Leak(๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜)๋Š” ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ๊ทธ ์›์ธ๊ณผ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์€ ๋‹ค๋ฅด๋‹ค. 1. Out of MemoryOut of Memory๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ด๋‹ค. JVM์—์„œ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ๋ฉ”ํƒ€์ŠคํŽ˜์ด์Šค ๋“ฑ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‹ค ์†Œ์ง„๋˜์–ด ๋” ์ด์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์›์ธ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•œ๊บผ๋ฒˆ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ํฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ์  ์ฆ..
[Kotlin][ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…] Tail Recursion Optimization (Tail Call Optimization) ์ถœ์ฒ˜ChatGPTTail Recursion Optimization ๋˜๋Š” Tail Call Optimization(TCO)๋Š” ํ•จ์ˆ˜๊ฐ€ tail call๋กœ ๋๋‚˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ด ์ตœ์ ํ™”๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด StackOverflowError๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 1. Tail Recursion(๊ผฌ๋ฆฌ ์žฌ๊ท€)๋ž€?Tail Recursion์ด๋ž€, ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ๋™์ž‘์ด ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ์˜ ์žฌ๊ท€๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋  ๋•Œ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๊ณง๋ฐ”๋กœ ๋ฐ˜ํ™˜๋˜์–ด ๋” ์ด์ƒ์˜ ๊ณ„์‚ฐ์ด ํ•„์š”์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์•„๋ž˜ ํ•จ์ˆ˜๋Š” tail recursive์ด๋‹ค.fun tailRecFactorial(n: Int, accumulator: Int = 1): Int { retu..
[Java] Tail Recursion Optimization ๋Œ€์ฒด ๋ฐฉ๋ฒ• ์ถœ์ฒ˜ChatGPT์ž๋ฐ”์—์„œ๋Š” Tail Recursion Optimization(TCO)์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Š” ์ž๋ฐ”์˜ ์ปดํŒŒ์ผ๋Ÿฌ(Javac)์™€ JVM์˜ ์„ค๊ณ„๊ฐ€ TCO๋ฅผ ์ตœ์ ํ™”ํ•˜์ง€ ์•Š๋„๋ก ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Tail Recursion Optimization์ด๋ž€ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ํ˜ธ์ถœ์„ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌํ•ด StackOverflowError๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค. ์ž๋ฐ”์—์„œ Tail Recursion Optimization์„ ๋ฏธ์ง€์›ํ•˜๋Š” ์ด์œ 1. JVM ์Šคํƒ ๋ชจ๋ธ์ž๋ฐ”์˜ JVM์€ ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ, ๊ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ถ”๊ฐ€ํ•œ๋‹ค. JVM์˜ ๊ธฐ๋ณธ ์„ค๊ณ„ ์›์น™ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๊ณผ ๊ด€๋ จ๋˜ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ, ๋ชจ๋“  ํ˜ธ์ถœ์ด ๋ช…์‹œ์ ์œผ๋กœ ์Šคํƒ ..
[Java][JVM] StackOverflowError์˜ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ถœ์ฒ˜ChatGPTStackOverflowError๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ, ํ˜ธ์ถœ ์Šคํƒ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Š” ๋ณดํ†ต ๋ฌดํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด๋‚˜ ๋„ˆ๋ฌด ๊นŠ์€ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋กœ ์ธํ•ด ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ๊ฐˆ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. StackOverflowError์˜ ์›์ธ1. ๋ฌดํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ Infinite Recursion์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ ์กฐ๊ฑด ์—†์ด ์ž์‹ ์„ ๊ณ„์† ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, ์ž˜๋ชป๋œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.public void recursiveMethod() { recursiveMethod(); // ์ข…๋ฃŒ ์กฐ๊ฑด ์—†์ด ๊ณ„์† ์ž์‹ ์„ ํ˜ธ์ถœ} 2. ๋„ˆ๋ฌด ๊นŠ์€ ์žฌ๊ท€ ํ˜ธ์ถœ Too Deep Recursion์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์žˆ์–ด๋„, ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ๋งค์šฐ ๊นŠ..
[Java] ์˜ˆ์™ธ, ์—๋Ÿฌ ์ถœ์ฒ˜ChatGPT์ž๋ฐ”(Java)์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ(Exception)์™€ ์—๋Ÿฌ(Error)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋‘˜์€ ๋ชจ๋‘ `Throwable` ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์ด์ง€๋งŒ, ๊ทธ ๋ชฉ์ ๊ณผ ์‚ฌ์šฉ ๋ฐฉ์‹์—์„œ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. 1. ์˜ˆ์™ธ(Exception)์™€ ์—๋Ÿฌ(Error)์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์˜ˆ์™ธ Exceptionํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ์ ์ธ ์˜ค๋ฅ˜๋‚˜ ์ž˜๋ชป๋œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ๋“ฑ ๋น„๊ต์  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๋“ค์ด๋‹ค. ์˜ˆ์™ธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `Exception` ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.์—๋Ÿฌ Error์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์—†๋Š” ..
[Java] ์ œ๋„ค๋ฆญ ์ถœ์ฒ˜ChatGPT์ œ๋„ค๋ฆญ์˜ ์กด์žฌ ์ด์œ 1. ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ฐ•ํ™”์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ปดํŒŒ์ผ ์‹œ์ ์— ์ž˜๋ชป๋œ ํƒ€์ž… ์‚ฌ์šฉ์„ ๊ฒ€์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž… ์˜ˆ์™ธ๋ฅผ ์ฃผ๋ฆฌ๊ณ , ํƒ€์ž… ๋ณ€ํ™˜(casting)์— ๊ด€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.2. ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด, ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค.3. ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช…ํ™•ํ•œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์žฌ๊ณตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ์ œ๋„ค๋ฆญ ์žฅ์ 1. ์ปดํŒŒ์ผ ์‹œ์ ์˜ ํƒ€์ž… ์ฒดํฌ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ํƒ€์ž…์„ ์ฒดํฌํ•˜๋ฉฐ, ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ClassCastException๊ณผ ๊ฐ™์€ ์˜ˆ์™ธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.2. ํƒ€์ž… ๋ณ€ํ™˜์˜ ํ•„์š”์„ฑ ์ œ๊ฑฐ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์ถ”์ถœํ•  ๋•Œ ํƒ€์ž… ๋ณ€ํ™˜์„ ์ˆ˜๋™์œผ๋กœ ํ•  ํ•„..