[Java] ์ฝ”ํ…Œ์—์„œ ํšจ์œจ์ ์ธ ์ž…์ถœ๋ ฅ: BuffereredReader/Writer, StringTokenizer, StringBuilder + ๋ฐฑ์ค€ 15552
ยท
โ˜•Java/์ฝ”๋”ฉํ…Œ์ŠคํŠธ
`Scanner`์™€ `System.out.println` ๋Œ€์‹  ๋น ๋ฅด๊ฒŒ ์ž…๋ ฅ/์ถœ๋ ฅ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๊ฒŒ ๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์†๋„๊ฐ€ ๋น ๋ฅธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•  ๋•Œ ์œ ๋ฆฌํ•œ BufferReader/Writer ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.๐Ÿ”— ๋ฐฑ์ค€ 15552๋ฒˆ๋ณธ๊ฒฉ์ ์œผ๋กœ for๋ฌธ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ „์— ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ๋‹ค. ์ž…์ถœ๋ ฅ ๋ฐฉ์‹์ด ๋А๋ฆฌ๋ฉด ์—ฌ๋Ÿฌ ์ค„์„ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•  ๋•Œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. C++์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  cin/cout์„ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, cin.tie(NULL)๊ณผ sync_with_stdio(false)๋ฅผ ๋‘˜ ๋‹ค ์ ์šฉํ•ด ์ฃผ๊ณ , endl ๋Œ€์‹  ๊ฐœํ–‰๋ฌธ์ž(\n)๋ฅผ ์“ฐ์ž. ๋‹จ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ์ด์ƒ scanf/printf/puts/getchar/putchar ๋“ฑ C์˜ ์ž…์ถœ๋ ฅ ๋ฐฉ..
[Java] ์œ„์ƒ ์ •๋ ฌ(Topological Sort) ๊ฐœ๋…๊ณผ ๊ตฌํ˜„
ยท
โ˜•Java
์œ„์ƒ ์ •๋ ฌ์ด๋ž€๊ทธ๋ž˜ํ”„ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ์ข…์œผ๋กœ, ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ผ๋ จ์˜ ์ž‘์—…์„ ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์œ„์ƒ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด DAG(Directed Acyclic Graph)์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๋ฐฉํ–ฅ์„ฑ O: Node A → Node B์™€ ๊ฐ™์ด ๋‘ ๋…ธ๋“œ ์‚ฌ์ด ๋ฐฉํ–ฅ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์‚ฌ์ดํด X: A → B, B → A์•„ ๊ฐ™์€ ์‚ฌ์ดํด์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด 3๊ฐœ์˜ ๊ณผ๋ชฉ์ด ์žˆ๊ณ , ํ•œ ๊ณผ๋ชฉ์„ ๋“ฃ๊ธฐ ์œ„ํ•œ ์„ ์ด์ˆ˜๊ณผ๋ชฉ ๊ด€๊ณ„๊ฐ€ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.์„ธ ๊ณผ๋ชฉ์„ ๋ชจ๋‘ ๋“ฃ๋Š” ์ฝ”์Šค๋Š” `ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ → C ํ”„๋กœ๊ทธ๋ž˜๋ฐ → ๊ณ ๊ธ‰ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ`์˜ ์ˆœ์„œ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.`๊ณ ๊ธ‰ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ → C ํ”„๋กœ๊ทธ๋ž˜๋ฐ → ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ` ์ˆœ์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.์ด์ฒ˜๋Ÿผ ๊ทธ๋ž˜ํ”„์—์„œ ๋ฐฉํ–ฅ์„ฑ์„ ํ†ตํ•ด ์ ์ ˆํ•œ ์ˆœ์„œ๋ฅผ..
[Java] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ๊ฐœ๋…๊ณผ ์ž๋ฐ” ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ
ยท
โ˜•Java
์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)์ผ๋ฐ˜์ ์ธ ํ์˜ ๊ตฌ์กฐ๋Š” FIFO(Firtst In First Out)๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ด๋Ÿฌํ•œ ํ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๋ฉด์„œ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋จผ์ € ๊ฒฐ์ •ํ•˜๊ณ , ๊ทธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํž™(Heap)์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.ํž™์€ ํ•ญ์ƒ ์ตœ๋Œ€๊ฐ’ ๋˜๋Š” ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.์ตœ๋Œ€๊ฐ’ ํ˜น์€ ์ตœ์†Œ๊ฐ’์œผ๋กœ ๊ฐ€์žฅ ๋จผ์ € ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ์š”์†Œ, ์ฆ‰ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์š”์†Œ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฑฐ์ฃ . ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋„ฃ๊ณ , ๋ฃจํŠธ(๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„ ๋†’์€ ๋ฐ์ดํ„ฐ)๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์šฐ..
[Java] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP, Dynamic Programming) / ๋ฐฑ์ค€ 12865๋ฒˆ / ๋ฐฐ๋‚ญ ๋ฌธ์ œ
ยท
โ˜•Java/์ฝ”๋”ฉํ…Œ์ŠคํŠธ
DP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์‹ค๋งˆ๋ฆฌ๋ฅผ ์žก๊ณ  ์‹ถ๋‹ค๋ฉด์œ„ ์˜์ƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.๐Ÿ’ก ๋ฐฑ์ค€ 12865๋ฒˆ๐Ÿ”– # ๋ฌธ์ œ : ํ’€๋Ÿฌ๊ฐ€๊ธฐ ๐Ÿ”— ์ด ๋ฌธ์ œ๋Š” ์•„์ฃผ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๋‹ค. ํ•œ ๋‹ฌ ํ›„๋ฉด ๊ตญ๊ฐ€์˜ ๋ถ€๋ฆ„์„ ๋ฐ›๊ฒŒ ๋˜๋Š” ์ค€์„œ๋Š” ์—ฌํ–‰์„ ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์„ธ์ƒ๊ณผ์˜ ๋‹จ์ ˆ์„ ์Šฌํผํ•˜๋ฉฐ ์ตœ๋Œ€ํ•œ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•œ ์—ฌํ–‰์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ ๋ฐฐ๋‚ญ ๋˜ํ•œ ์ตœ๋Œ€ํ•œ ๊ฐ€์น˜ ์žˆ๊ฒŒ ์‹ธ๋ ค๊ณ  ํ•œ๋‹ค. ์ค€์„œ๊ฐ€ ์—ฌํ–‰์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” N๊ฐœ์˜ ๋ฌผ๊ฑด์ด ์žˆ๋‹ค. ๊ฐ ๋ฌผ๊ฑด์€ ๋ฌด๊ฒŒ W์™€ ๊ฐ€์น˜ V๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ, ํ•ด๋‹น ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์–ด์„œ ๊ฐ€๋ฉด ์ค€์„œ๊ฐ€ V๋งŒํผ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์•„์ง ํ–‰๊ตฐ์„ ํ•ด๋ณธ ์ ์ด ์—†๋Š” ์ค€์„œ๋Š” ์ตœ๋Œ€ K๋งŒํผ์˜ ๋ฌด๊ฒŒ๋งŒ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ๋‚ญ๋งŒ ๋“ค๊ณ  ๋‹ค๋‹ ์ˆ˜ ์žˆ๋‹ค. ์ค€์„œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ฆ๊ฑฐ์šด ์—ฌํ–‰์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด๋“ค์˜ ๊ฐ€์น˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์•Œ๋ ค์ฃผ์ž. โŒจ๏ธ # ์ž…..
[Java] ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / ๋ฐฑ์ค€ 1253๋ฒˆ
ยท
โ˜•Java/์ฝ”๋”ฉํ…Œ์ŠคํŠธ
๐Ÿ’ก ํˆฌ ํฌ์ธํ„ฐ: ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ์—์„œ '๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'ํŠน์ • ๊ตฌ๊ฐ„์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ๊ตฌ๊ฐ„'์„ ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณดํ†ต ์™ผ์ชฝ ํฌ์ธํ„ฐ์™€ ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ๊ฐ ํƒ์ƒ‰ ๋ฒ”์œ„์˜ ์‹œ์ž‘๊ณผ ๋์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.์™ผ์ชฝ ํฌ์ธํŠธ๋ฅผ ๊ณ ์ •ํ•œ ์ƒํƒœ์—์„œ ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜, ์กฐ๊ฑด์— ๋”ฐ๋ผ ์™ผ์ชฝ ํฌ์ธํŠธ๋„ ์ด๋™ํ•˜๋ฉฐ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.ํ•œ ๋ฒˆ์˜ ๋ฐ˜๋ณต์œผ๋กœ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ ํ˜• ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.ํƒ์ƒ‰ ๋ฒ”์œ„ ๋‚ด์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๊ธธ์ด ๋“ฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์— ํ™œ์šฉ๋‹จ๊ณ„๋ฐฐ์—ด ๋˜๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ ์œ„์น˜์— ์ฒซ ๋ฒˆ์งธ ํฌ์ธํŠธ์™€ ๋‘ ๋ฒˆ์งธ ํฌ์ธํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.๋‘ ํฌ์ธํ„ฐ ์‚ฌ์ด์˜ ๊ตฌ๊ฐ„์„ ์กฐ์‚ฌํ•˜๋ฉฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ..
[Spring] AOP ๊ธฐ๋ฐ˜ API ์š”์ฒญ๋ณ„ ์ฟผ๋ฆฌ ํšŸ์ˆ˜ / ์‹คํ–‰ ์‹œ๊ฐ„ ์ธก์ • ์นด์šดํ„ฐ ๊ตฌํ˜„
ยท
๐ŸŒฟSpring
๊ตฌํ˜„ ๊ณ„๊ธฐ์ด์ „์— ์ง„ํ–‰ํ•œ "๋ชจ๋‘์˜ ๋‰ด์Šค"๋ผ๋Š” ํ”„๋กœ์ ํŠธ์— ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋“ฑ ์กฐํšŒ API ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.์ด‰๋ฐ•ํ•œ ์ผ์ • ํƒ“์— "์ผ๋‹จ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜์ž"๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ ์„ค๊ณ„๋Š” ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.๊ทธ ํ›„ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์—์„œ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , N+1 ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ ์ €๋Š” N+1 ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ํ˜ธ์ถœ๋˜๋Š” ์ฟผ๋ฆฌ ํšŸ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค๋ฉด 'DB ๋ถ€ํ•˜๊ฐ€ ์ค„์–ด๋“œ๋‹ˆ ๋‹น์—ฐํžˆ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๋˜๊ฒ ์ง€'๋ผ๊ณ  ๋ง‰์—ฐํžˆ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.๋ฌผ๋ก  ํ‹€๋ฆฐ ๋ง์€ ์•„๋‹™๋‹ˆ๋‹ค๋งŒ, "๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ์„ฑ๋Šฅ์ด ์–ผ๋งˆ๋‚˜ ๊ฐœ์„ ๋๋Š”๋ฐ?"๋ผ๋Š” ์งˆ๋ฌธ์ด ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์นจ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ํŒ€์›๋ถ„์ด “์‹คํ–‰ ์‹œ๊ฐ„์„ ์ง์ ‘ ์ธก์ •ํ•ด๋ณด๋ฉด ๊ฐœ์„  ํšจ๊ณผ๋ฅผ ์ˆ˜์น˜๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค”๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€ ์ €..
[Java] ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๊ธฐ๋ณธ ๊ฐœ๋…
ยท
โ˜•Java
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ž€? (Garbage Collection, GC)C/C++ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ `free()` ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ด ๋๋‚œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.๊ทธ๋Ÿฌ๋‚˜ Java์—์„œ๋Š” JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ž€,JVM์˜ Heap ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ํ•„์š” ์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ฒด(garbage)๋ฅผ ๋ชจ์•„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์žŠ์–ด๋ฒ„๋ ค ํ”„๋กœ๊ทธ๋žจ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ํ˜„์ƒ(OOM ์—๋Ÿฌ)์„ GC๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๋กœ์ง ๋Œ€์‹  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜..
[์ž๋ฃŒ๊ตฌ์กฐ] ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ ๊ฐœ๋… ์ •๋ฆฌ | ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ, ํž™, ์šฐ์„ ์ˆœ์œ„ ํ, ์…‹, ๋งต, ํ•ด์‹œ ํ…Œ์ด๋ธ”
ยท
โš™๏ธ CS/๐Ÿ“š ์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ด ํฌ์ŠคํŒ…์€ ์ฃผํ™์ฒ  ์ € '๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ' 5.3์žฅ์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„์„ ํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ๋ž€,์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜์ง€ ์•Š๊ณ  ์ž๋ฃŒ ์ˆœ์„œ๋‚˜ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.๐Ÿ“Œ ๊ทธ๋ž˜ํ”„(Graph)๊ทธ๋ž˜ํ”„๋Š” ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.์ •์ (vertex/node)ํ•ญ๋ชฉ ์ž์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ์›์†Œ๊ฐ„์„ (edge)์ •์ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์œผ๋กœ, ์ •์  ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„๋‹จ๋ฐฉํ–ฅ์ผ ์ˆ˜๋„, ์–‘๋ฐฉํ–ฅ์ผ ์ˆ˜๋„ ์žˆ์Œ ์ฐจ์ˆ˜(degree): ์ •์ ์— ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฒฝ๋กœ(path): ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„์„ ๋“ค์˜ ์ˆœ์„œ์‚ฌ์ดํด(cycle): ์‹œ์ž‘ ์ •์ ๊ณผ ๋ ์ •์ ์ด ๋™์ผํ•œ ๊ฒฝ๋กœ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Undirected Graph): ๊ฐ„์„ ์ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed..
[Java] JVM์ด๋ž€? ๊ฐœ๋…๊ณผ ์ž๋ฐ” ์ปดํŒŒ์ผ ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ
ยท
โ˜•Java
๋ชฉํ‘œ์ž๋ฐ” ์†Œ์Šค ํŒŒ์ผ(.java)์„ JVM์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐJVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€JVM(Java Virtual Machine): ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๊ธฐ๊ณ„(์ปดํ“จํ„ฐ)Java๊ฐ€ OS์— ์ข…์†๋ฐ›์ง€ ์•Š๊ณ , ์–ด๋А OS ์œ„์—์„œ๋“  ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์žฅ์น˜์ฆ‰, OS์— ์ข…์†๋ฐ›์ง€ ์•Š๊ณ  CPU๊ฐ€ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ๋ฐ˜์ ์ธ ์–ธ์–ด๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ CPU๊ฐ€ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„๋กœ ํ•œ ๋ฒˆ์— ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์ž๋ฐ”๋Š” JVM์ด๋ผ๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™˜ ๊ณผ์ •์ด ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค. 1์ฐจ ๋ณ€ํ™˜: ์†Œ์Šค ์ฝ”๋“œ → ๋ฐ”์ดํŠธ์ฝ”๋“œ(Bytecode)์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ(`.java`)๊ฐ€ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ( `.class`)๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.์ด๋•Œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ž€ CPU๊ฐ€..