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

๋ชฉ๋กJava (21)

Unfazedโ—๏ธ๐ŸŽฏ

[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
[Java] ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋Šฅ๊ณผ ๋””๋ฒ„๊น…

1. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ๊ฐœ๋…๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์€ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. Java์—์„œ๋Š” Thread ํด๋ž˜์Šค์™€ Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด CPU ์ž์›์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.2. ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ ์ƒ์„ฑํ•˜๊ธฐJava์—์„œ ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋จผ์ € Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์ƒ์„ฑ์ž์— Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ณ , Runnable ์ธํ„ฐํŽ˜์ด์Šค์˜ run() ๋ฉ”์„œ๋“œ์— ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ๋กœ์ง์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.Thread thread = new Thread(new Runnable() { @Override public void run() { ..

Java 2025. 2. 6. 11:45
HashSet/HashMap์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋ฐ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜

HashSet์€ Java Collections Framework์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ, ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ(Set) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. 1. HashSet์˜ ์ฃผ์š” ํŠน์ง•์ค‘๋ณต ์š”์†Œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ : ๋ฐ์ดํ„ฐ ๋™๋“ฑ์„ฑ ํ™•์ธ์„ ์œ„ํ•œ equals(), hashCode() ๋ฉ”์„œ๋“œ ํ•„์š”์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ : ์ธ๋ฑ์Šค๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฉ”์„œ๋“œ(get(int index), indexOf(Object o) ๋“ฑ)์ด ์—†์Œnull ์š”์†Œ ํ—ˆ์šฉ ๋น„๋™๊ธฐ(non-synchronized) ๊ตฌํ˜„O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ2. ๋‚ด๋ถ€ ๊ตฌ์กฐ 2-1) ์ฃผ์š” ํ•„๋“œ์œ„์˜ ์ฝ”๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด HashSet์€ ๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.HashSet์€ ์š”์†Œ๋“ค์„ HashMap์˜ key๋กœ ์ €์žฅํ•œ๋‹ค.๋ชจ๋“  ๊ฐ’์— ๋Œ€..

Java 2025. 1. 22. 11:59
Java Stream API - map() & flatMap()

Java 8์—์„œ ๋„์ž…๋œ Stream API๋Š” ์ปฌ๋ ‰์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ map()๊ณผ flatMap() ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜๊ณผ ์ฒ˜๋ฆฌ์— ์žˆ์–ด ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค. 1. map() Stream map( Function mapper // R : ์ถœ๋ ฅ ํƒ€์ž… (์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ ํƒ€์ž…))map() ๋ฉ”์„œ๋“œ๋Š” ์ŠคํŠธ๋ฆผ์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” 1:1 ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ž…๋ ฅ ์š”์†Œ ํ•˜๋‚˜๋‹น ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์ถœ๋ ฅ ์š”์†Œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.์ฃผ์š” ํŠน์ง•๊ฐ ์š”์†Œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€ํ™˜์ŠคํŠธ๋ฆผ์˜ ์š”์†Œ ๊ฐœ์ˆ˜ ์œ ์ง€ (one-to-one)์›๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณด์กด๋ฐ˜ํ™˜ ํƒ€์ž…: Stream (R์€ ๋ณ€ํ™˜๋œ ํƒ€์ž…)์˜ˆ์‹œ ์ฝ”๋“œ// ๋ฌธ์ž์—ด ๊ธธ์ด ๋ณ€ํ™˜List words = Arrays.asList("Java", "Stre..

Java 2025. 1. 20. 09:04