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

โ˜•๏ธ JAVA/๐Ÿฆ‹ Effective Java12

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ ์ด ๊ธ€์€ ์ฑ… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ Item 49์™€ ํ•˜๋‹จ Reference ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž๋“ค์˜ ์ž…๋ ฅ๊ฐ’์ด ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋ฑ์Šค ๊ฐ’์€ ์Œ์ˆ˜ X, ๊ฐ์ฒด ์ฐธ์กฐ๋Š” null์ด ์•„๋‹ˆ์–ด์•ผ ํ•œ๋‹ค. ๋ณดํ†ต ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž์˜ ๋ชธ์ฒด๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋งค๊ฐœ ๋ณ€์ˆ˜ ํ™•์ธํ•œ๋‹ค๋ฉด ์ž˜๋ชป๋œ ๊ฐ’์ด ๋„˜์–ด์™”์„ ๋•Œ ์ฆ‰๊ฐ์ , ๊น”๋”ํ•œ ๋ฐฉ์‹์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ• ๊นŒ? public, protected ๋ฉ”์„œ๋“œ ๋ณดํ†ต, ๋ชธ์ฒด(์ฃผ์š” ๋กœ์ง) ์‹คํ–‰๋˜๊ธฐ ์ „ ์ƒ๋‹จ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’ ํ™•์ธ ํ›„ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค ์ž๋ฐ”๋…์— @throws, ์˜ˆ์™ธ ๊ฒฝ์šฐ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. public ๋˜๋Š” protected ๋ฉ”์„œ๋“œ๋Š” ํŒจํ‚ค์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜.. 2022. 3. 21.
์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋” ํŒจํ„ด์„ ์จ๋ณผ๊นŒ?! (HTTPClient์™€ lombok @Builder) ๐Ÿงฐ ์ด ๊ธ€์€ ์ฑ… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ Item 2์™€ ํ•˜๋‹จ Reference ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ๋ชฉ์ฐจ 1. ์ ์ธต์  ์ƒ์„ฑ์ž ํŒจํ„ด(Telescoping Constructor pattern) 2. ์ž๋ฐ”๋นˆ์ฆˆ ํŒจํ„ด(JavaBeans pattern) 3. ๋นŒ๋” ํŒจํ„ด(Builder pattern) - ๋นŒ๋” ํŒจํ„ด ์‚ฌ์šฉ ์˜ˆ : java.net +a) lombok์˜ @Builder๋ฅผ ์‚ฌ์šฉํ•œ ๋นŒ๋” ํŒจํ„ด ์‚ฌ์šฉ +a) ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋นŒ๋” ํŒจํ„ด ํ•œ ์ค„ ์š”์•ฝ : ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋” ํŒจํ„ด(Builder pattern)์„ ์จ๋ณด์ž. ์ด์ „ ๊ธ€ ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ '์ƒ์„ฑ์ž' ๋Œ€์‹  '์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ'๋ฅผ ์จ๋ณผ๊นŒ? ๐Ÿญ ์—์„œ ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ ๋ฅผ ์•Œ์•„๋ดค๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ.. 2022. 2. 11.
ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ž ์ด ๊ธ€์€ ์ฑ… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ Item72๊ณผ ํ•˜๋‹จ Reference ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ๊ฒฐ๋ก  ์ž๋ฐ” ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ ์˜ˆ์™ธ๋Š” ์ถฉ๋ถ„ํžˆ ๋งŽ๋‹ค. ์ง์ ‘ ๋งŒ๋“ค์ง€ ๋ง๊ณ  ํ˜„์žฌ ์ƒํ™ฉ์— ๋งž๋Š” ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์ฐพ์•„ ์‚ฌ์šฉํ•˜์ž ์ด์ „ ๊ธ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•˜์ž ์—์„œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋‹ค. ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ž. ์™œ? ์ฝ๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ, ํด๋ž˜์Šค ์ ์žฌ ์‹œ๊ฐ„ ๊ฐ์†Œ, ์˜ˆ์™ธ๋„ ์ง๋ ฌํ™”์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ค€ ์‚ฌ์šฉ์ด ์ข‹๋‹ค ์ž์ฃผ ์“ฐ์ด๋Š” ์˜ˆ์™ธ ์˜ˆ์™ธ ์“ฐ์ž„ ์˜ˆ IllegalArgumentException ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ์ธ์ˆ˜๋กœ ๊ฑด๋„ค์กŒ์„ ๋•Œ (null์ผ ๋•Œ ์จ๋„ ๋˜์ง€๋งŒ ๋”ฐ๋กœ) ๋‚˜์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์Œ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ .. 2022. 2. 6.
์ž๋ฐ”์—์„œ ๊ฐ์ฒด ๋ณต์‚ฌ๋Š” clone()์ด ์•„๋‹Œ ๋ณต์‚ฌ ์ƒ์„ฑ์ž, ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž ์ด ๊ธ€์€ ์ฑ… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ Item 13๊ณผ ํ•˜๋‹จ Reference๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ๊ฒฐ๋ก  ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ(์ด๋ฏธ Cloneable๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๋•Œ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ณต์‚ฌ ์ƒ์„ฑ์ž์™€ ๋ณต์‚ฌ ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? ๋ฐฉ๋ฒ•์€ ๋ณดํ†ต 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 1. Object ๊ฐ์ฒด์˜ clone() ๋ฉ”์„œ๋“œ + Cloneable ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ 2. ๋ณต์‚ฌ ์ƒ์„ฑ์ž ๋˜๋Š” ๋ณต์‚ฌ ํŒฉํ† ๋ฆฌ ์‚ฌ์šฉ 1๋ฒˆ์˜ ๊ฒฝ์šฐ Object.clone() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•œ ํด๋ž˜์Šค์—์„œ ์ด๋ฅผ ์˜ค๋ฒ„ ๋ผ์ด๋”ฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ›์•„ ๊ตฌํ˜„ํ•œ๋‹ค. Cloneable๋ฅผ ๋ฐ›์ง€ ์•Š์œผ๋ฉด clone()๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ฒŒ ์„ค๊ณ„๋˜์–ด์žˆ๊ธฐ.. 2022. 2. 5.
์ž๋ฐ”์˜ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•(+a. ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž…์˜ ์›์ž์„ฑ์— ๋Œ€ํ•˜์—ฌ) ์ด ๊ธ€์€ ์ฑ… ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ Item78๊ณผ ํ•˜๋‹จ Reference ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์„ธ์š” ๐Ÿ™๐Ÿป ์ฃผ์ œ ๊ณต์œ  ์ค‘์ธ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ๋™๊ธฐํ™”ํ•ด ์‚ฌ์šฉํ•˜๋ผ ๊ฒฐ๋ก  ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ณ , ์“ฐ๋Š” ๋™์ž‘์— ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ ์จ์•ผ ํ•œ๋‹ค. ๋™๊ธฐํ™” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€(synchronized, Atomic class, volatile)๊ฐ€ ์žˆ๋‹ค. ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜์ž. ๋ชฉ์ฐจ ๋™๊ธฐํ™”๋ž€? synchronized Atomic class (java.util.concurrent.atomic) volatile ์˜ˆ์ œ StopThread +a ์ž๋ฐ” ๊ธฐ๋ณธ ํƒ€์ž…์˜ ์›์ž์„ฑ์— ๋Œ€ํ•˜์—ฌ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ๋Š” ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๊ฐ€๋ณ€ ๋ฐ์ด.. 2022. 1. 24.