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

๋ชฉ๋ก๐Ÿ’ป Java Study (32)

Coding Planet

ThreadLocal๊ณผ ThreadLocalUtil

|ThreadLocal์ด๋ž€ ThreadLocal์€ Java์˜ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ณ€์ˆ˜๋“ค์€ ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์—์„œ ๊ด€๋ฆฌ๋˜์—ˆ๋Š”๋ฐ ์Šค๋ ˆ๋“œ๋ณ„๋กœ ์ €์žฅ๋˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์„ค์ •ํ•œ ThreadLocal ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ๊ณต์œ ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ž์‹ ๋งŒ์˜ ๋… ๋ฆฝ์ ์ธ ๊ฐ’์„ ์œ ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ(thread-safety)์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค. ๋” ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด threadLocal๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ๊ฐ ๊ฐ’์€ get(), set() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. **thread-safety ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ..

๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ(daemon thread) - ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์™€ java ์ฝ”๋“œ ์˜ˆ

"Daemon" ์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์›๋ž˜ ๊ทธ๋ฆฌ์Šค ์‹ ํ™”์˜ ๋ณดํ˜ธ์‹  ๋˜๋Š” ์‹ ์˜ ์ง€๋ฐฐ๋ฅผ ๋ฐ›๋Š” ์˜ํ˜ผ์„ ์˜๋ฏธํ•˜๋Š” ๋‹จ์–ด์—์„œ ์œ ๋ž˜๋ฌ์œผ๋‚˜, ์ปดํ“จํŒ… ๋ถ„์•ผ์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋‚˜ ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต ์‚ฌ์šฉ์ž์˜ ์ง์ ‘์ ์ธ ๊ฐœ์ž…์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ, ์ž์› ๊ด€๋ฆฌ, ํŒŒ์ผ ์ „์†ก, ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ์ œ๊ณต ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์šด์˜์ฒด์ œ๋‚˜ ์„œ๋ฒ„์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐ๋ชฌ์ด ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”๋ฐ ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ(daemeon thread)๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์‚ดํŽด ๋ณด๊ณ ์ž ํ•œ๋‹ค. | ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ(daemon thread) ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ผ๋ฐ˜์“ฐ๋ ˆ๋“œ(๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์“ฐ๋ ˆ๋“œ)์˜ ์ž‘์—…์„ ๋•๋Š” ๋ณด์กฐ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ์ฃผ ์“ฐ๋ ˆ๋“œ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ)๊ฐ€ ์ข…..

๋ฉ€ํ‹ฐํƒœ์Šคํ‚น๊ณผ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ์˜ ์ฐจ์ด - ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ

| ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค(process)๋ž€ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด OS๋กœ๋ถ€ํ„ฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ž์›(๋ฉ”๋ชจ๋ฆฌ)๋ฅผ ํ• ๋‹น๋ฐ›์•„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ์ž์› ๊ทธ๋ฆฌ๊ณ  ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ด ๋•Œ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ์ด์šฉํ•ด์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๋‘˜ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๊ณต์žฅ์ด๋ผ๋ฉด ์“ฐ๋ ˆ๋“œ๋Š” ๊ณต์žฅ ๋‚ด๋ถ€์˜ ๋…ธ๋™์ž์ด๋‹ค. | ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น๊ณผ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์œˆ๋„์šฐ๋‚˜ ์œ ๋‹‰์Šค๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๋Š” ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น(multitasking, ๋‹ค์ค‘์ž‘์—…)์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜..

[์ž๋ฐ”์˜ ์ •์„ ]๋žŒ๋‹ค์‹(Lambda Expressions) 1 - ๋žŒ๋‹ค์‹ ๊ตฌ์กฐ์™€ ์ž‘์„ฑ๋ฒ•

์ž๋ฐ”์˜ ๋žŒ๋‹ค์‹(Lambda Expressions)์€ Java 8๋ถ€ํ„ฐ ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ, ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋žŒ๋‹ค์‹์ด๋ž€ ๋ง๊ทธ๋ž˜๋„ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์‹(expression)์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„๊ณผ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†์–ด์ง€๋ฏ€๋กœ ๋žŒ๋‹ค์‹์„ ์ต๋ช…ํ•จ์ˆ˜๋ผ๊ณ ๋„ ํ•œ๋‹ค. | ๊ธฐ๋ณธ๊ตฌ์กฐ ํŒŒ๋ผ๋ฏธํ„ฐ : ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋™์ผํ•˜๋ฉฐ ๊ด„ํ˜ธ '()'์•ˆ์— ์„ ์–ธํ•œ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ƒ๋žตํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ™”์‚ดํ‘œ : ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ณธ๋ฌธ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. expression_body : ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰ํ•  ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ์—์„œ ์ด๋ฆ„๊ณผ ๋ฐ˜ํ™˜ํƒ€์ž…์„ ์ œ๊ฑฐํ•˜๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€์™€ ๋ชธํ†ต ์‚ฌ์ด์— ->๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค. (parameters) -> expression_body | ๋žŒ๋‹ค์‹..

String, StringBuffer, StringBuilder์˜ ์ฐจ์ด์ ๊ณผ ์‚ฌ์šฉ๋ฐฉ๋ฒ•, ์œ ์šฉํ•œ ๋ฉ”์„œ๋“œ

`String`, `StringBuffer`, `StringBuilder`๋Š” ๋ชจ๋‘ Java์—์„œ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค. ๊ฐ ํด๋ž˜์Šค์˜ ํŠน์ง•๊ณผ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค. | String ๋ถˆ๋ณ€์„ฑ (Immutability): String ํด๋ž˜์Šค์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ String ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€์ด๋‹ค. ์ฆ‰, String์— ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ฃผ๋ ค๊ณ  ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆ๋ณ€์„ฑ์€ ํŠน์ • ์ƒํ™ฉ์—์„œ๋Š” ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ฌธ์ž์—ด ์กฐ์ž‘ ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚  ๋•Œ๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ: ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ (+ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. | StringBuffer ๊ฐ€๋ณ€์„ฑ (Mutability): StringBuffer๋Š” ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ..

Wrapper ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ์˜ˆ์‹œ

| Wrapper ํด๋ž˜์Šค๋ž€? Java์—์„œ๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(primitive data types)๊ณผ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๋ž˜ํผ(Wrapper) ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๋ž˜ํผ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฐ’์— ๋Œ€ํ•œ ๊ฐ์ฒด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ œ๋„ˆ๋ฆญ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์—์„œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋ž˜ํผ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. | ์ฃผ์š” ๋ž˜ํผ ํด๋ž˜์Šค์™€ ํ•ด๋‹น ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… | ๋ž˜ํผ ํด๋ž˜์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ์˜ˆ์‹œ 1. ๊ฐ’ ๋ณ€ํ™˜ ๋ฌธ์ž์—ด์„ ํ•ด๋‹น ๋ž˜ํผ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ํ•ด๋‹น ํƒ€์ž…์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ํƒ€์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. int i = Integer.parseInt("123"); String s = Integer.toStrin..