728x90
๋ฐ˜์‘ํ˜•

2025/09 17

[JAVA] Object.notify()

wait() ๊ณผ ๊ฐ™์ด ๋ณผ๊ฒŒ์š”.1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋…wait()ํ˜„์žฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ •์ง€์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ๋ชจ๋‹ˆํ„ฐ ๋ฝ์„ ํ•ด์ œํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ notify() ๋˜๋Š” notifyAll()์„ ํ˜ธ์ถœํ•˜๋ฉด ๊นจ์–ด๋‚จ๋ฐ˜๋“œ์‹œ synchronized ๋ธ”๋ก ์•ˆ์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•จnotify()wait()๋กœ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์›€๊ฐ์ฒด์˜ ๋ชจ๋‹ˆํ„ฐ ๋ฝ์„ ์†Œ์œ ํ•œ ์ƒํƒœ์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•จnotifyAll()์€ ๋ชจ๋“  ๋Œ€๊ธฐ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์›€๐Ÿ’ก ํ•ต์‹ฌ: wait() = ๊ธฐ๋‹ค๋ฆผ, notify() = ๊นจ์›€wait()์™€ notify()๋Š” ๋ชจ๋“  ๊ฐ์ฒด์— ์กด์žฌObject obj = new Object();synchronized(obj) { obj.wait(); // obj ๋ฝ ํ•ด์ œํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆผ obj.notify..

Front/JS & jQuery 2025.09.30

[JAVA] synchronized ๋ธ”๋ก

Java์—์„œ synchronized๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์˜ˆ์š”. 1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋…๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ฌธ์ œ: ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ์ž์›(๋ณ€์ˆ˜, ๊ฐ์ฒด ๋“ฑ)์— ์ ‘๊ทผํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ผฌ์ด๊ฑฐ๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.ํ•ด๊ฒฐ์ฑ…: synchronized๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ์ œํ•œ.๋ฝ(Lock): synchronized๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ **๊ฐ์ฒด์˜ ๋ชจ๋‹ˆํ„ฐ(lock)**๋ฅผ ์‚ฌ์šฉํ•ด ์Šค๋ ˆ๋“œ ์ ‘๊ทผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.2๏ธโƒฃ synchronized ์‚ฌ์šฉ ๋ฐฉ๋ฒ•2-1. ๋ฉ”์„œ๋“œ์— ์ ์šฉpublic synchronized void increment() { count++; // ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ}์ด๋ ‡๊ฒŒ ํ•˜๋ฉด increment() ๋ฉ”์„œ๋“œ ์ „์ฒด๊ฐ€ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.์žฅ์ ..

JAVA 2025.09.29

[JAVA] Object.wait()

Java์—์„œ wait()๋Š” ๋ชจ๋“  ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Object ํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ์–ด์„œ ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ obj.wait()๋ผ๊ณ  ํ•˜๋ฉด ์กฐ๊ธˆ ๋ณต์žกํ•œ ๋™์ž‘ ์›๋ฆฌ๊ฐ€ ์žˆ์–ด์š”. 1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋…๋ชฉ์ : ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ •์ง€์‹œํ‚ค๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ฒƒ.์œ„์น˜: java.lang.Object ํด๋ž˜์Šค์— ์ •์˜๋จ.์กฐ๊ฑด: wait()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ชจ๋‹ˆํ„ฐ(๋ฝ)์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•จ (์ฆ‰, synchronized ๋ธ”๋ก ์•ˆ์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ). synchronized(obj) { obj.wait(); // obj์˜ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ}2๏ธโƒฃ ์ฃผ์š” ํŠน์ง•ํŠน์ง•์„ค๋ช…๋ชจ๋‹ˆํ„ฐ ํ•„์š”wait()๋Š” ๋ฐ˜๋“œ์‹œ sy..

JAVA 2025.09.25

[JAVA] Thread.sleep()

Thread.sleep() ์€ ์ž๋ฐ”(Java) ์—์„œ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์ผ์‹œ ์ •์ง€(๋Œ€๊ธฐ) ์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ์˜ˆ์š”. ๐Ÿ“Œ ๊ธฐ๋ณธ ํ˜•์‹Thread.sleep(long millis) throws InterruptedException millis : ๋ฉˆ์ถœ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„, 1์ดˆ = 1000ms)์˜ค๋ฒ„๋กœ๋“œ๋œ ๋ฒ„์ „์œผ๋กœ ๋‚˜๋…ธ์ดˆ ๋‹จ์œ„๊นŒ์ง€ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:Thread.sleep(long millis, int nanos) throws InterruptedException๐Ÿ“Œ ๋™์ž‘ ๋ฐฉ์‹ํ˜ธ์ถœํ•œ ์Šค๋ ˆ๋“œ๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰ ์ƒํƒœ(Running) ์—์„œ ์ผ์‹œ ์ •์ง€(Timed Waiting) ์ƒํƒœ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.์ง€์ •๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด, ๋‹ค์‹œ Runnable(์‹คํ–‰ ๋Œ€๊ธฐ) ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€๊ณ , CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์žก์•„์ฃผ๋ฉด ..

JAVA 2025.09.24

[DB][Oracle] ALTER TABLE ... ADD ์•ˆ์—์„œ ์ปฌ๋Ÿผ ์ •์˜์™€ ๋™์‹œ์— COMMENT ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ๋ฒ•

Oracle์€ ADD + COMMENT ์›์ƒท ๋ฌธ๋ฒ• ์—†์Œ๋ฌด์กฐ๊ฑด ๋ณ„๋„ COMMENT ๊ตฌ๋ฌธ ํ•„์š”-- 1) ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€ (ADD)ALTER TABLE EMP_TEST ADD EMP_TYPE VARCHAR2(10) DEFAULT 'N' NOT NULL;-- 2) ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ์ปฌ๋Ÿผ์— COMMENT ๋‹ฌ๊ธฐ (๋ณ„๋„ ์‹คํ–‰ ํ•„์š”)COMMENT ON COLUMN EMP_TEST.EMP_TYPE IS '์‚ฌ์›๊ตฌ๋ถ„';๐Ÿ“Œ ์„ค๋ช…:์œ„ 1๋ฒˆ ALTER TABLE ... ADD ์—์„œ๋Š” COMMENT ๋ฅผ ๋ฐ”๋กœ ๋ถ™์ผ ์ˆ˜ ์—†์Œ๋ฐ˜๋“œ์‹œ 2๋ฒˆ์ฒ˜๋Ÿผ COMMENT ON COLUMN ๊ตฌ๋ฌธ์„ ๋ณ„๋„๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•จ๋”ฐ๋ผ์„œ Oracle ์—์„œ๋Š” “ADD + COMMENT ํ•œ ๋ฌธ์žฅ ์ฒ˜๋ฆฌ”๋Š” ๋ถˆ๊ฐ€๋Šฅ๐Ÿ‘‰ ๋งŒ์•ฝ “ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค”๋ฉด, PL/SQL ๋ธ”๋ก์œผ๋กœ..

DB 2025.09.19

[DB][Oracle] ๊ณ„์‚ฐ์‹ ์ ์„ ๋•Œ Alias ์‚ฌ์šฉํ•˜๊ธฐ

Oracle ๊ธฐ์ค€โŒ ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ SELECT COALESCE(SUM(DTL.REAL_AMT), 0) AS REAL_AMT, COALESCE(SUM(DTL.REAL_AMT), 0) * 0.1 AS REAL_AMT_10P, REAL_AMT + REAL_AMT_10P AS REAL_AMT_TOTAL -- โŒ alias ์ง์ ‘ ์‚ฌ์šฉ ๋ถˆ๊ฐ€→ SELECT ์ ˆ ์•ˆ์—์„œ๋Š” ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ alias ๋ฅผ ๋ฐ”๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์–ด์š”.๊ทธ๋ž˜์„œ REAL_AMT ์™€ REAL_AMT_10P ๋ฅผ ์—ฌ๊ธฐ์„œ ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด ์—๋Ÿฌ ๋‚ฉ๋‹ˆ๋‹ค. โœ… ๋˜๋Š” ๋ฐฉ๋ฒ• 2: ์„œ๋ธŒ์ฟผ๋ฆฌ ๊ฐ์‹ธ๊ธฐ SELECT REAL_AMT, REAL_AMT_10P, REAL_AMT + REAL_AMT_10P AS REAL_AMT_TOTALFROM ( ..

DB 2025.09.18

[js]for (const [typeTp, items] of Object.entries(grouped))

1. Object.entries(grouped)Object.entries() ๋Š” ๊ฐ์ฒด๋ฅผ [key, value] ์Œ์˜ ๋ฐฐ์—ด๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด:const grouped = { "1": [{ id: 1 }, { id: 2 }], "2": [{ id: 3 }]};console.log(Object.entries(grouped));์ถœ๋ ฅ:[ ["1", [{ id: 1 }, { id: 2 }]], ["2", [{ id: 3 }]]]์ฆ‰, grouped ๊ฐ์ฒด๊ฐ€ { key: value } ๊ตฌ์กฐ๋ผ๋ฉดObject.entries(grouped) → [ [key1, value1], [key2, value2], ... ]2. for (const [typeTp, items] of ...)for...of ๊ตฌ๋ฌธ์€ ๋ฐฐ์—ด์„ ์ˆœํšŒํ• ..

Front/JS & jQuery 2025.09.17

[js] toLocaleString

1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋…toLocaleString()์€ ์ˆซ์ž(Number)๋‚˜ ๋‚ ์งœ(Date)๋ฅผ ์‚ฌ์šฉ์ž ์ง€์—ญ(locale)์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.์ˆซ์ž → ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„, ์†Œ์ˆ˜์  ์ž๋ฆฌ์ˆ˜, ํ†ตํ™” ๊ธฐํ˜ธ ๋“ฑ๋‚ ์งœ → ์ง€์—ญ๋ณ„ ๋‚ ์งœ/์‹œ๊ฐ„ ํ˜•์‹ 2๏ธโƒฃ ์ˆซ์ž ์˜ˆ์‹œconst num = 1234567.89;console.log(num.toLocaleString()); // ์ถœ๋ ฅ: "1,234,567.89" (๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ € ๋กœ์ผ€์ผ ๊ธฐ์ค€),๋กœ ์ฒœ ๋‹จ์œ„ ๊ตฌ๋ถ„์†Œ์ˆ˜์  ์œ ์ง€console.log(num.toLocaleString('de-DE')); // ๋…์ผ์‹ ์ถœ๋ ฅ: "1.234.567,89"๋…์ผ์€ .๋กœ ์ฒœ ๋‹จ์œ„, ,๋กœ ์†Œ์ˆ˜์  ํ‘œ์‹œconsole.log(num.toLocaleString('ko-KR')); /..

Front/JS & jQuery 2025.09.15
728x90
๋ฐ˜์‘ํ˜•