๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋กJava (24)

Unfazedโ—๏ธ๐ŸŽฏ

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์˜ ๊ธฐ๋ณธ ์›๋ฆฌ์™€ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์—ญ์‚ฌ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ž๋ฐ”์—์„œ ์ฒ˜์Œ ์†Œ๊ฐœ๋œ ๊ธฐ์ˆ ๋กœ ์˜คํ•ดํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 1960๋…„ MIT์—์„œ ๊ฐœ๋ฐœ๋œ ์–ธ์–ด ๋ฆฌ์Šคํ”„(LISP)๊ฐ€ ์ตœ์ดˆ๋กœ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์กด ๋งฅ์นด์‹œ๊ฐ€ ์ œ์‹œํ•œ 3๊ฐ€์ง€ ํ•ต์‹ฌ ๋ฌธ์ œ๋ฆฌ์Šคํ”„์˜ ์ฐฝ์‹œ์ž ์กด ๋งฅ์นด์‹œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ 3๊ฐ€์ง€๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•ด์•ผ ํ•˜๋‚˜? (What to collect?)์–ธ์ œ ํšŒ์ˆ˜ํ•ด์•ผ ํ• ๊นŒ? (When to collect?)์–ด๋–ป๊ฒŒ ํšŒ์ˆ˜ํ•ด์•ผ ํ• ๊นŒ? (How to collect?)์™œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ดํ•ดํ•ด์•ผ ํ• ๊นŒ?ํ˜„๋Œ€์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ๋งค์šฐ ๋ฐœ๋‹ฌํ•ด์„œ ๋ชจ๋“  ๊ฒƒ์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” ์ง์ ‘ ๊ฐœ์ž…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์™€ ๋ˆ„์ˆ˜ ..

Java 2025. 6. 23. 00:13
JVM ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ

๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ „์ฒด ๊ณผ์ •1. ํด๋ž˜์Šค ๋กœ๋”ฉ ๋ฐ ๊ฒ€์ฆ ๋‹จ๊ณ„Person person = new Person("Alice", 25); ์œ„ ํ•œ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ JVM์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.์‹ฌ๋ณผ ์ฐธ์กฐ ํ™•์ธ: new ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ƒ์ˆ˜ ํ’€์˜ ์˜ฌ๋ฐ”๋ฅธ ํด๋ž˜์Šค ์ฐธ์กฐ์ธ์ง€ ํ™•์ธํด๋ž˜์Šค ์ƒํƒœ ๊ฒ€์ฆ: Person ํด๋ž˜์Šค๊ฐ€ ์ด๋ฏธ ๋กœ๋”ฉ(Loading), ํ•ด์„(Resolving), ์ดˆ๊ธฐํ™”(Initialization)๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•„์š”์‹œ ํด๋ž˜์Šค ๋กœ๋”ฉ: ์ค€๋น„๋˜์ง€ ์•Š์€ ํด๋ž˜์Šค๋ผ๋ฉด ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋กœ๋”ฉ ์ˆ˜ํ–‰2. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋‹จ๊ณ„ํด๋ž˜์Šค ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฐ์ฒด ํฌ๊ธฐ๋ฅผ ์ •ํ™•ํžˆ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋‹ค์Œ์œผ๋กœ ํž™์—์„œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹(ํฌ์ธํ„ฐ ๋ฐ€์น˜๊ธฐ, ์—ฌ์œ  ๋ชฉ๋ก)์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.2.1. ํฌ..

Java 2025. 6. 17. 19:40
JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐJVM์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ํฌ๊ฒŒ ์Šค๋ ˆ๋“œ ๊ณต์œ  ์˜์—ญ๊ณผ ์Šค๋ ˆ๋“œ ๊ฐœ๋ณ„ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ๋ฉ”์„œ๋“œ ์˜์—ญ (Method Area)ํž™ (Heap)์Šค๋ ˆ๋“œ๋ณ„ ๊ฐœ๋ณ„ ์˜์—ญํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ (PC Register)๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ (JVM Stack)๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์Šคํƒ (Native Method Stack)๊ฐ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ƒ์„ธ ๋ถ„์„1. ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ (PC Register)์—ญํ• : ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญํŠน์ง•:๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ์ž๋ฐ” ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ: ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด ์ฃผ์†Œ ์ €์žฅ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ: Undefined ์ƒํƒœ์œ ์ผํ•˜๊ฒŒ OutOfMemoryError ์กฐ๊ฑด์ด ๋ช…์‹œ๋˜์ง€ ์•Š์€ ์˜์—ญ2. ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์Šคํƒ (..

Java 2025. 6. 17. 17:42
[Java] String Pool

Java์˜ String Pool์€ JVM์ด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๋ฌธ์ž์—ด ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.๊ธฐ๋ณธ ๊ฐœ๋…String Pool(๋˜๋Š” String Constant Pool, String Intern Pool)์€ JVM์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์กด์žฌํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ณต๊ฐ„์œผ๋กœ, ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ์ €์žฅ๋œ๋‹ค. String Pool์€ ๋ฌธ์ž์—ด์˜ ๋ถˆ๋ณ€์„ฑ(immutability)๊ณผ String interning์ด๋ผ๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 2. ๋ฌธ์ž์—ด ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ String Pool1. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์ƒ์„ฑString s1 = "hello";String s2 = "hello"; JVM์€ str1์„ ์ƒ์„ฑํ•  ๋•Œ "..

Java 2025. 4. 9. 14:35
[Java] ์ฐธ์กฐ๋ณ€์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ, hash code, identity hash code

Java์—์„œ ์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์•˜์„ ๋•Œ๋Š” ํด๋ž˜์Šค๋ช…@16์ง„์ˆ˜ ํ•ด์‹œ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.ํ•ด๋‹น ๊ธ€์—์„œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐธ์กฐํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ถœ๋ ฅ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ•ด์‹œ์ฝ”๋“œ์™€ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ ํ•œ๋‹ค.Java์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ง์ ‘ ์ฃผ์†Œ๊ฐ’์„ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ๋Œ€์‹  toString() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํด๋ž˜์Šค๋ช…@ํ•ด์‹œ์ฝ”๋“œ ํ˜•์‹์˜ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋œ๋‹ค. ํ•ด์‹œ์ฝ”๋“œ vs ์‹ค์ œ ์ฃผ์†ŒProduct@1302068a์™€ ๊ฐ™์€ ํ•ด์‹œ์ฝ”๋“œ๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”..

Java 2025. 3. 10. 01:17
[Java] ์˜ฌ๋ฐ”๋ฅธ Optional ์‚ฌ์šฉ์œผ๋กœ API ์„ค๊ณ„ํ•˜๊ธฐ

API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ ๋ณด๊ณ ๋„ ๋ฐ˜ํ™˜๊ฐ’์ด ์„ ํƒํ˜•์ธ์ง€, ์ฆ‰ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ์‰ฝ๊ฒŒ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ์•ˆ์ „ํ•˜๊ณ  ๋ช…๋ฃŒํ•œ API๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Java 8๋ถ€ํ„ฐ ๋„์ž…๋œ Optional ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด API ์„ค๊ณ„์˜ ๋ช…ํ™•์„ฑ์„ ๋†’์ด๊ณ , NullPointerException๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.1. Optional์˜ ๊ธฐ๋ณธ ๊ฐœ๋…public final class Optionalextends ObjectA container object which may or may not contain a non-null value. - ๊ณต์‹ ๋ฌธ์„œ ์ •์˜Java 8 ๋ถ€ํ„ฐ ๋„์ž…๋œ Optional๋Š” null์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ๊ฐ์‹ธ๋Š” ๋ž˜ํผ(wrapp..

Java 2025. 2. 26. 10:32
[Java] null ์ฐธ์กฐ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

Java์—์„œ null์€ ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๊ฐ€ ์•„๋ฌด ๊ฐ์ฒด๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์ˆ˜ํ•œ ๋ฆฌํ„ฐ๋Ÿด์ด๋‹ค. null์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ๋ชจ๋“  ์ฐธ์กฐ ํƒ€์ž…์— ํ• ๋‹น ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ฃผ์†Œ๊ฐ’์ด 0x0์œผ๋กœ ๊ณ ์ •๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์ฐจ๋‹จ๋œ๋‹ค.null์˜ ๋ณธ์งˆ์  ํŠน์„ฑ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…: null์€ ํ‚ค์›Œ๋“œ๊ฐ€ ์•„๋‹Œ ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ, instanceof ์—ฐ์‚ฐ์ž๋กœ ํ™•์ธ ์‹œ ํ•ญ์ƒ false ๋ฐ˜ํ™˜(null์€ Object๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ)ํƒ€์ž… ์‹œ์Šคํ…œ: ๋ชจ๋“  ์ฐธ์กฐ ํƒ€์ž…(ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฐฐ์—ด)์— ํ• ๋‹น ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ธฐ๋ณธํ˜•(int ๋“ฑ)์—๋Š” ์ง์ ‘ ํ• ๋‹น ๋ถˆ๊ฐ€ํŠน์„ฑ์„ค๋ช…์ฃผ์†Œ๊ฐ’0x0์œผ๋กœ ๊ณ ์ •๋˜์–ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ฐจ๋‹จ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ๊ฐ์ฒด ํ—ค๋” ์—†์ด ๋‹จ์ˆœ 0๊ฐ’ ์ €์žฅํƒ€์ž… ์บ์ŠคํŒ…์–ด๋–ค ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ๋„ ์บ์ŠคํŒ… ๊ฐ€๋Šฅ์ดˆ๊ธฐํ™” ๊ธฐ๋ณธ๊ฐ’ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ null ์ดˆ๊ธฐํ™”null..

Java 2025. 2. 14. 11:12
[Java] ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ JVM์˜ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ์ดํ•ดํ•˜๋Š” ์Šค๋ ˆ๋“œ start(), run() ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด

Java์—์„œ start() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์™€ run() ๋ฉ”์„œ๋“œ ์ง์ ‘ ํ˜ธ์ถœ์˜ ๋ฌธ์ œ์ ์„ ์•Œ์•„๋ณด์ž. 1. ์Šค๋ ˆ๋“œ ์‹คํ–‰ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•ต์‹ฌ ์ฐจ์ดstart() ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์ƒˆ๋กœ์šด ํ˜ธ์ถœ ์Šคํƒ(Call Stack)์„ ์ƒ์„ฑํ•˜์—ฌ JVM์ด ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์„œ๋“œ start0()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ, ์ด๋Š” OS ์ˆ˜์ค€์—์„œ ์‹ค์ œ ์Šค๋ ˆ๋“œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. run() ์ง์ ‘ ํ˜ธ์ถœ์˜ ๋ฌธ์ œ์ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ์˜ ํ˜ธ์ถœ ์Šคํƒ์—์„œ ๋™๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์ด๋Š” ๋‹จ์ˆœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ํ•ต์‹ฌ์ธ ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.// ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์˜ˆ์‹œThread myThread = new MyCustomThread();myThrea..

Java 2025. 2. 7. 15:29
[Java] ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ & Daemon ์Šค๋ ˆ๋“œ

์Šค๋ ˆ๋“œ ์ค‘๋‹จ์˜ ํ•„์š”์„ฑ๊ณผ ์ƒํ™ฉ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์Šค๋ ˆ๋“œ๋Š” ์ž์›์„ ์†Œ๋น„ํ•œ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ด์ง€ ์•Š๋”๋ผ๋„ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปค๋„ ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ CPU ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ์ž์› ์†Œ๋น„๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค. ํŠนํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์Šค๋ ˆ๋“œ ์ค‘๋‹จ์ด ์š”๊ตฌ๋œ๋‹ค.๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ํšŒ์ˆ˜: ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„์—๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ„์† ์†Œ๋น„ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•จ์œผ๋กœ์จ ์ž์› ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.๋น„์ •์ƒ ๋™์ž‘ ๋Œ€์‘: ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„์ค‘, ์˜ˆ์ƒ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋‚˜ ์‘๋‹ต์ด ์—†๋Š” ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘๋‹จํ•ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ์ฒ˜๋ฆฌ: ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…..

Java 2025. 2. 6. 21:26
[Java] ์Šค๋ ˆ๋“œ ์ƒ์„ฑ (Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„, Thread ํด๋ž˜์Šค ์ƒ์†)

Java์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.Runnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๋ฐฉ์‹๋ณ„๋„์˜ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ Thread ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.์ด์ „ ๊ฒŒ์‹œ๊ธ€์—์„œ ๋‹ค๋ฃฌ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ์™€ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์€ ์ฝ”๋“œ์™€ ์Šค๋ ˆ๋”ฉ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•  ์ž‘์—…์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ๋™์ผํ•œ Runnable์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. ๋˜ํ•œ, ์ƒ์†์˜ ์ œ์•ฝ ์—†์ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ํฐ ์ด์ ์ด๋‹ค. Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ๋ฐฉ์‹Thread ํด๋ž˜์Šค ์ž์ฒด๊ฐ€ Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ์ƒ์†ํ•˜์—ฌ run()..

Java 2025. 2. 6. 13:32