๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java32

[ch.14] java.util.function ํŒจํ‚ค์ง€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ํ˜•์‹์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘ . java.util.function ํŒจํ‚ค์ง€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜๊ฐ’ ๋ชจ๋‘ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Œ. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธํ˜• ๊ฐ’(primitive type)์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ํ•ด๋‹น ๊ธฐ๋ณธํ˜•์˜ ๋ž˜ํผ(wrapper) ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. ์กฐ๊ฑด์‹ ํ‘œํ˜„์— ์‚ฌ์šฉ๋˜๋Š” Predicate predicate๋Š” Function์˜ ๋ณ€ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜ํƒ€์ž…์ด boolean์ž„. ์กฐ๊ฑด์‹์„ ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•จ. java.util.function ํŒจํ‚ค์ง€์˜ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋“ค ๊ธฐ๋ณธํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋‹จ์ง€ ์„ฑ๋Šฅ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•จ. Function์˜ ํ•ฉ์„ฑ ๋‘ ๋žŒ๋‹ค์‹์„ ํ•ฉ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋žŒ๋‹ค์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ. ์–ด๋Š ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ์ ์šฉํ•˜๋Š๋ƒ์— .. 2023. 11. 15.
[ch.14] ๋žŒ๋‹ค์‹ ๋žŒ๋‹ค์‹ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก ์ž์ฒด๋ฅผ ์ „๋‹ฌํ•จ. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ฐœ๋…์„ ์ ์šฉํ•œ ๊ฒƒ. ๋žŒ๋‹ค์‹์œผ๋กœ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋žŒ๋‹ค์‹์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค. ์˜ค์ง ํ•˜๋‚˜์˜ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋งŒ ์ •์˜๋˜์–ด์žˆ์–ด์•ผํ•จ(์ œ์•ฝ) ๊ทธ๋ž˜์•ผ ๋žŒ๋‹ค์‹๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ 1:1์—ฐ๊ฒฐ. static๋ฉ”์„œ๋“œ์™€ default๋ฉ”์„œ๋“œ๋Š” ๊ฐœ์ˆ˜ ์ œ์•ฝX ์ต๋ช…๊ฐ์ฒด๋ฅผ ๋žŒ๋‹ค์‹์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ์ด์œ  ๋žŒ๋‹ค์‹์€ ์‹ค์ œ๋กœ ์ต๋ช… ๊ฐ์ฒด์ž„. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ต๋ช…๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์™€ ๋žŒ๋‹ค์‹์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜, ๋ฐ˜ํ™˜๊ฐ’์ด ์ผ์น˜ํ•ด์„œ. ๋ฉ”์„œ๋“œ ์ฐธ์กฐ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•จ. ์ฝ”๋“œ ์ค‘๋ณต ๋ฐฉ์ง€. ๊ฐ€๋…์„ฑ↑, ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐํ•œ ์ž‘์„ฑ. ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ. ๋žŒ๋‹ค์‹์„ ํ˜ธ์ถœํ•˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜ f์˜ ํƒ€์ž… ๋žŒ๋‹ค์‹๊ณผ ๋™๋“ฑํ•œ ๋ฉ”์„œ.. 2023. 11. 15.
[CH.13] ์“ฐ๋ ˆ๋“œ์˜ ๋™๊ธฐํ™”(Lock) ์“ฐ๋ ˆ๋“œ์˜ ๋™๊ธฐํ™” ํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํŠน์ •์ž‘์—…์„ ๋๋งˆ์น˜๊ธฐ ์ „๊นŒ์ง€, ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด ๋ฐฉํ•ด๋ฐ›์ง€ ์•Š์•„์•ผ ํ•จ. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์ž์›์„ ๊ณต์œ ํ•ด์„œ ์ž‘์—…ํ•˜๋ฏ€๋กœ ์„œ๋กœ ์ž‘์—…์— ์˜ํ–ฅ์„ ์คŒ. ์ž„๊ณ„์˜์—ญ : ๊ณต์œ ๋ฐ์ดํ„ฐ(์ž์›)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ ๋ฝ : ์ž ๊ธˆ, ๊ณต์œ ๋ฐ์ดํ„ฐ์˜ ๋ฝ์„ ํš๋“ํ•œ ๋‹จ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ ์ž„๊ณ„์˜์—ญ ๋‚ด์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. ๊ฐ์ฒด ๋‹จ์œ„(๋ณ€์ˆ˜๋ฌถ์Œ, ๋ฐ์ดํ„ฐ)๋กœ ๋ฝ์ด ๊ฑธ๋ฆผ. ์ˆ˜ํ–‰ ํ›„์—๋Š” lock์„ ๋ฐ˜๋‚ฉํ•ด์•ผ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•จ. โ‘ synchronized๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™” โ‘กwait( )๊ณผ notify( )๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™” โ‘ขLock๊ณผ Condition์„ ์ด์šฉํ•œ ๋™๊ธฐํ™” ์“ฐ๋ ˆ๋“œ ๋™๊ธฐํ™” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ• synchronized โ‘  ๋ฉ”์„œ๋“œ ์ „์ฒด๋ฅผ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์ง€์ • ๋ฐ˜ํ™˜ํƒ€์ž…์•ž์— synchronized๋ถ™์ด๊ธฐ.. 2023. 11. 15.
[ch.13] ์“ฐ๋ ˆ๋“œ ์‹คํ–‰ ์ œ์–ด ๋ฉ”์„œ๋“œ ์“ฐ๋ ˆ๋“œ์˜ ์‹คํ–‰ ์ œ์–ด “ํšจ์œจ์ ์ธ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ” =์ •๊ตํ•œ ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ฃผ์–ด์ง„ ์ž์›๊ณผ ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‚ญ๋น„์—†์ด ์ž˜ ์‚ฌ์šฉํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฒƒ. ๋ฉ”์„œ๋“œ(1) static๋ฉ”์„œ๋“œ๋ผ ์ž์‹ ์—๊ฒŒ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ. (์ž์‹ =ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ) ๋ฉ”์„œ๋“œ(2) ์“ฐ๋ ˆ๋“œ์˜ ์Šค์ผ€์ค„๋ง ๊ด€๋ จ ๋ฉ”์„œ๋“œ sleep(์‹œ๊ฐ„) static๋ฉ”์„œ๋“œ ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์“ฐ๋ ˆ๋“œ ๋ฉˆ์ถ”๊ธฐ. sleep์— ์˜ํ•ด ์ผ์‹œ์ •์ง€๋œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š”(์‹คํ–‰๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ) ๋ฐฉ๋ฒ• โ‘ ์ง€์ •๋œ ์‹œ๊ฐ„ ๋‹ค ๋˜๊ธฐ โ‘ก interrupt( )ํ˜ธ์ถœ sleep( )ํ˜ธ์ถœ ์‹œ ๋ฐ˜๋“œ์‹œ try-catch๋ฌธ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ฃผ์–ด์•ผ ํ•จ. (์ด๊ฒƒ์„ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด๋„ ๋จ) ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ interruptํ•˜๋ฉด sleep( )๋ฉ”์„œ๋“œ๊ฐ€ Interrupted.. 2023. 11. 15.
[ch.13] ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค: ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋ ˜, OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์Œ. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ผํ•˜๋Š” ์ž‘์—…ํ™˜๊ฒฝ ์“ฐ๋ ˆ๋“œ: ํ”„๋กœ์„ธ์Šค ์ž์›์„ ์ด์šฉํ•ด์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ: ๋‘˜ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์žฅ์  โ‘  CPU ์‚ฌ์šฉ๋ฅ  ํ–ฅ์ƒ โ‘ก ์ž์› ํšจ์œจ์  ์‚ฌ์šฉ โ‘ข ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์‘๋‹ต์„ฑ ํ–ฅ์ƒ โ‘ฃ ์ง์ ‘๋ถ„๋ฆฌ = ์ฝ”๋“œ ๊ฐ„๊ฒฐ *๊ณ ๋ ค์‚ฌํ•ญ: ์ž์›์„ ๊ณต์œ ํ•˜์—ฌ ์ž‘์—…ํ•˜๋ฉฐ ์ƒ๊ธฐ๋Š” ๋™๊ธฐํ™”, ๊ต์ฐฉ์ƒํƒœ ๋“ฑ์„ ๊ณ ๋ คํ•  ๊ฒƒ ์“ฐ๋ ˆ๋“œ์˜ ๊ตฌํ˜„ Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ฑฐ๋‚˜, Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ run( )๋ฉ”์„œ๋“œ์˜ ๋ชธํ†ต{ }์„ ์ฑ„์šฐ๋Š” ๊ฒƒ. ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ํด๋ž˜์Šค์˜ main๋ฉ”์„œ๋“œ์— ์“ฐ๋˜ ๋‚ด์šฉ์„ run( )๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„๋ถ€์—์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ž„. Runnable ์ธํ„ฐํŽ˜์ด์Šค: ์˜ค์ง run()๋งŒ ์ •์˜๋˜์–ด์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด.. 2023. 11. 15.
[ch.12] ์—ด๊ฑฐํ˜•, ์• ๋„ˆํ…Œ์ด์…˜ 2023. 11. 14.
[ch.11] ์ง€๋„ค๋ฆญ์Šค ํ‘œ๋ฅผ ์˜ฎ๊ธฐ๊ธฐ ํž˜๋“ค์–ด์„œ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ ํŒŒ์ผ ์ด๋ฏธ์ง€๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž 2023. 11. 14.