๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (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. ํ์ ๋ณํ์ ํ์์ฑ ์ ๊ฑฐ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์ถ์ถํ ๋ ํ์ ๋ณํ์ ์๋์ผ๋ก ํ ํ.. ์ด์ 1 ยทยทยท 9 10 11 12 13 14 15 ยทยทยท 48 ๋ค์