Call by Value์™€ Call by Reference
ยท
Java
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, Call by Value์™€ Call by Reference๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š”ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํŠน์ง•๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ Java์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.  Call by ValueCall by Value๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ฃผ๋กœ ๊ธฐ๋ณธํ˜• ๋˜๋Š” ์›์‹œ ํƒ€์ž…(primitive type)์˜ ๋ฐ์ดํ„ฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’ซ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.#include using namespace std;void modify(int a)..
Java์˜ GC
ยท
Java
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์˜ ํ•„์š”์„ฑ๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์ด๋ž€?GC๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ GC๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ํž™(Heap) ์˜์—ญ์„ ์˜๋ฏธํ•˜๊ณ , GC๊ฐ€ ํ•ด์ œํ•˜๋Š” ๋Œ€์ƒ์€ ์–ด๋–ค ๋ณ€์ˆ˜์—์„œ๋„ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.  C๋‚˜ C++๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑด ๊ฝค ๋ฒˆ๊ฑฐ๋กœ์šธ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ ํ•ด์ œํ•˜๋ ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” ์ด๋Ÿฐ ์ž‘์—…์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž..
ConcurrentHashMap์€ ์–ด๋–ป๊ฒŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ• ๊นŒ?
ยท
Java
๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘ ๋„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํฌ๋กค๋งํ•˜์—ฌ HashMap์— ์ €์žฅํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” 100๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์œผ๋‚˜, HashMap์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.๋ฌธ์ œ ์›์ธ์„ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ, ๋น„๋™๊ธฐ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด HashMap๋งŒ์œผ๋กœ๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HashMap, HashTable, ConcurrentHashMap์˜ ์ฐจ์ด์ ์„ ์‚ดํŽด๋ณด๊ณ , ๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๋น„๊ตํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. HashMapkey์™€ value์— null ํ—ˆ์šฉ๋™๊ธฐํ™”๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์ŒHashMap์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „(thread-safe)์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ฃผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ..
CompletableFuture์™€ ForkJoinPool
ยท
Java
๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋‘ ์ถ•Java 8 ๋ถ€ํ„ฐ ๋„์ž…๋œ CompletableFuture์™€ ForkJoinPool์€ ๋น„๋™๊ธฐ ๋ฐ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋Š” ์„œ๋กœ ๋ณด์™„์ ์ธ ๊ด€๊ณ„์— ์žˆ์œผ๋ฉฐ, ํšจ์œจ์ ์ธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋“ค์ด ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€์™€ ์ฃผ์˜ํ•ด์•ผ ๋  ์ ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  CompletableFutureCompletableFuture๋Š” ๊ธฐ์กด์˜ Future ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋น„๋™๊ธฐ ๊ฒฐ๊ณผ ๊ฐ’์˜ ์กฐํ•ฉ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ›จ์”ฌ ๋” ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋™๊ธฐ์ ์ธ ์ˆ˜ํ–‰ ๋ฐฉ์‹์„ ๋น„๋™๊ธฐ์ ์ธ ์ˆ˜ํ–‰ ๋ฐฉ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ , ๋” ์œ ์—ฐํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„..