๋ชฉ๋กProgramming/Java, Kotlin (14)

๐Ÿ“ ์ ์–ด์„œ ๋จธ๋ฆฟ์†์œผ๋กœ

Java ์ œ๋„ค๋ฆญ(Generic)์€ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

๐Ÿ” Java ์ œ๋„ค๋ฆญ(Generic)์€ ์™œ ์‚ฌ์šฉํ• ๊นŒ? Java๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด List, Map ๊ฐ™์€ ์ œ๋„ค๋ฆญ(Generic) ๋ฌธ๋ฒ•์„ ์ž์ฃผ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ตณ์ด ์ œ๋„ค๋ฆญ์„ ์จ์•ผ ํ• ๊นŒ์š”?์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ œ๋„ค๋ฆญ์˜ ๋„์ž… ์ด์œ , ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹, ์‹ค์ œ ์˜ˆ์ œ, ์ฃผ์˜ํ•  ์ ๊นŒ์ง€ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.โœ… ์ œ๋„ค๋ฆญ์ด๋ž€?์ œ๋„ค๋ฆญ(Generic) ์€ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.List list = new ArrayList();์œ„ ์ฝ”๋“œ์—์„œ List๋Š” String๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.โœ… ์™œ ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?1. ์ปดํŒŒ์ผ ํƒ€์ž„ ํƒ€์ž… ์ฒดํฌ (ํƒ€์ž… ์•ˆ์ •์„ฑ ํ™•๋ณด)์ œ๋„ค๋ฆญ์ด ์—†๋˜ ์‹œ์ ˆ์—๋Š” ๋ชจ๋“  ํƒ€์ž…์ด Object๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๊ณ ,์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ClassCastExcept..

Programming/Java, Kotlin 2025. 6. 30. 15:48
[Spring] redis ๋ถ„์‚ฐ ๋ฝ ์ „๋žต์„ ํ†ตํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ(์„ ์ฐฉ์ˆœ, ๋”ํ‹ฐ ๋ฆฌ๋“œ, ํŒฌํ…€ ๋ฆฌ๋“œ)

Spring๊ณผ Redis๋ฅผ ํ™œ์šฉํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑํ˜„๋Œ€์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋„์ „ ๊ณผ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.  ์‹ค์ œ๋กœ ๋ฌด์ž‘์œ„ ํฌ์ธํŠธ(๋žœ๋ค ํฌ์ธํŠธ) ์ง€๊ธ‰ ์ด๋ฒคํŠธ๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋˜ ๊ฒฝํ—˜์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ๊ธ€์„ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค.1. ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ์˜ ํ•„์š”์„ฑ๋™์‹œ์„ฑ์ด๋ž€ ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ์˜ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์˜ ์ถฉ๋Œ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ์ €ํ•ด๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. Spring์—์„œ์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€Spring์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ์„ค์ •ํ•˜์—ฌ..

Programming/Java, Kotlin 2025. 2. 23. 17:29
[Java] ์ž๋ฐ”์—์„œ ์ธ์ž์˜ ์‹ค์ œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ์ด์œ 

Java๋Š” ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด์˜ ์‹ค์ œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค. add ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ๋ฐ›๋Š” model ๊ฐ์ฒด ์•ˆ์˜ number ํ•„๋“œ์˜ ๊ฐ’์„ 1 ๋”ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ฒ˜์Œ์— ์žˆ๋Š” model ๊ฐ์ฒด๋ฅผ add ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„˜๊ฒจ์„œ ์‹คํ–‰ํ•˜๋ฉด ์ฒ˜์Œ model์˜ ํ•„๋“œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค. C์–ธ์–ด๋‚˜ python์—์„œ ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„˜๊ธฐ๋ฉด ์‹ค์ œ ๊ฐ’(ํ˜น์€ ๊ฐ์ฒด์˜ ์ฃผ์†Œ ๊ฐ’)์ด ์•„๋‹Œ ์ธ์ž์˜ ๊ฐ’์„ ๋ณต์‚ฌ ๊ฐ’์ด ๋„˜์–ด๊ฐ„๋‹ค. ์ด๋ ‡๊ฒŒ ์›๋ณธ์˜ ๋ณต์‚ฌ ๊ฐ’์„ ์ธ์ž์— ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ "Call By Value"๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์‹ค์ œ๋กœ ์›๋ณธ A๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ addํ•จ์ˆ˜์˜ return ๊ฐ’์ธ B ๋‹ค์‹œ ๋Œ€์ž…ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. Model model = new Model() model = add(model)// add ํ•จ์ˆ˜์˜ return์€ Model cl..

Programming/Java, Kotlin 2022. 4. 5. 23:39
[Java] XMLํŒŒ์ผ๊ณผ ์ž๋ฐ”(Java)๋กœ ํŒŒ์‹ฑ(parsing)ํ•˜๊ธฐ

xml์˜ˆ์‹œ ํŒŒ์ผ ํ•œ๊ตญ์ด 25 ์„œ์šธ java๋กœ xmlํŒŒ์ผ parsing ํ•˜๊ธฐ XML ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ ˆ์ฐจ๋Š” HTML ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ ˆ์ฐจ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. HTML์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์š”ํ•œ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•ด์ค„ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, document.getElementById("๊ฐ€์ ธ์˜ฌ ํƒœ๊ทธ์˜ Id") ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ํŠน์ • ์•„์ด๋””๋ฅผ ๊ฐ€์ง„ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ xmlํŒŒ์ผ ์—ญ์‹œ ํƒœ๊ทธ๋ฅผ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋Š” ๋ฌธ์„œ์˜ ์ž์ฒด ๊ฐ์ฒด์ธ document๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax..

Programming/Java, Kotlin 2021. 12. 29. 20:22
<ํ† ์ด ํ”„๋กœ์ ํŠธ ํšŒ๊ณ ๋ก> ์ž๋ฐ” ์Šค์œ™(Java Swing)์„ ์ด์šฉํ•œ GUI ํ”„๋กœ๊ทธ๋žจ(ft. DBeaver)

Java๋‚ด์— ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” GUI์ธ ์Šค์œ™(swing)์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ† ์ด ํ”„๋กœ๊ทธ๋žจ(๊ฐ€๊ณ„๋ถ€ ํ”„๋กœ์ ํŠธ)์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์ƒ๊ฐํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์–ด๋–ค ๊ฒŒ ์žˆ์„์ง€ ํšŒ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ใ€‹ใ€‹ใ€‹๋ฐ”๋กœ๊ฐ€๊ธฐ ๋กœ๊ทธ์ธ ํšŒ์›๊ฐ€์ž… ํ…์ŠคํŠธ ํ•„๋“œ ํžŒํŠธ ์‚ฝ์ž… ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ํ…Œ์ด๋ธ” ์ƒˆ๋กœ๊ณ ์นจ ํ…Œ์ด๋ธ” ํ–‰ ์‚ญ์ œ โ–ถ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์•„์ด๋”” ํ˜น์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ž…ํ•˜๋Š” ํ…์ŠคํŠธํ•„๋“œ(textfield)๊ฐ€ ๊ธฐ์ž…๋˜์ง€ ์•Š์œผ๋ฉด ํ•˜๋‹จ ๋ผ๋ฒจ์— ๊ฒฝ๊ณ ๋ฌธ์„ ์ƒ์„ฑ. ์˜ณ์ง€ ์•Š์€ ์•„์ด๋””๋‚˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, ๊ฒฝ๊ณ ๋ฌธ GUI ์ƒ์„ฑ. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ actionListener ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋” ํ•ด์ฃผ๊ณ  ํ…์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ, ์ •ํ™•ํžˆ๋Š” idHint, pwHint ๋ฌธ์ž์—ด๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ ๋ผ๋ฒจ ๊ฒฝ๊ณ ๋ฌธ์ด ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ..

Programming/Java, Kotlin 2021. 12. 29. 20:21
์ž๋ฐ”[Java] ์ž…์ถœ๋ ฅ Stream ์ดํ•ดํ•˜๊ธฐ

โ–ถInputStream / Sytem.in.read() ImputStream์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ์ž์ฃผ ์“ฐ์ด๋Š” ํด๋ž˜์Šค์ธ Scanner์™€ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ณด์ด๋Š”๋ฐ, ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ 1byte ๋‹จ์œ„๋กœ ์ž…๋ ฅ์„ ๋ฐ›์•„์˜จ๋‹ค๋Š” ์ ์ด๋‹ค. Sytem.in.read()์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ž„์‹œ ์ €์žฅํ•˜๋Š” ๋ฒ„ํผ(Buffer)์—์„œ ์ €์žฅ๋œ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด read()์˜ return ๊ฐ’์€ byte๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ํ˜น์€ -1(๋ฒ„ํผ์— ๊ฐ’์ด ์—†์„ ๋•Œ)์ด๋‹ค. โ–ถ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์œผ๋กœ ์ €์žฅ read() ๋ฉ”์„œ๋“œ๋กœ ๋ฆฌํ„ดํ•œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ฒŒ ๋  ํ…๋ฐ, ์ด๋•Œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์„ ๋ฆฌํ„ด ๊ฐ’์ธ byte๋‹จ์œ„(0~255)์— ๋งž์ถ”์–ด ์•„์Šคํ‚ค์ฝ”๋“œ ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ๋ณ€์ˆ˜ a์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์œผ๋กœ ๋ฌธ์ž 'a'๋ฅผ ๋ฐ›์œผ๋ฉด ๋ฌธ์ž 'a..

Programming/Java, Kotlin 2021. 12. 29. 20:14