[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ.

2022. 8. 31. 16:39ใ†JAVA/Effective JAVA

728x90

2์žฅ. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด

์•„์ดํ…œ1. ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ. 

 

๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ public ์ƒ์„ฑ์ž์ด๋‹ค. 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ• ์ค‘ ๊ผญ ์•Œ์•„๋‘ฌ์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ •์  ํŽ™ํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

 

ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž์™€ ๋ณ„๋„๋กœ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ(static factory method)๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. 

(ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‹จ์ˆœํ•œ ์ •์  ๋ฉ”์„œ๋“œ)

 

-> Boolean์˜ valueof() ๋ฉ”์„œ๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ธฐ๋ณธ ํƒ€์ž…์ธ boolean b ๊ฐ’์„ ๋ฐ›์•„ 

Boolean ๊ฐ์ฒด ์ฐธ์กฐ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. 

 

 

โ—๏ธ ์ฃผ์˜ 

์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ๋””์ž์ธ ํŒจํ„ด์˜ ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์™€๋Š” ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํ—ท๊ฐˆ๋ฆฌ๋ฉด ์•ˆ๋œ๋‹ค. 

 

 

ํด๋ž˜์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ public ์ƒ์ •์ž ๋Œ€์‹  ๋˜๋Š” ํ•จ๊ป˜ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ 

์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์—๋Š” ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. 

 

- ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ์žฅ์ 

1๏ธโƒฃ ์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. 

Order๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ์ƒ์„ฑ์ž์— boolean, Product ํƒ€์ž…์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  ์žˆ๋‹ค. 

์ฒซ๋ฒˆ์งธ ์ƒ์„ฑ์ž๋Š” boolean ์˜ ๋ณ€์ˆ˜๋ช…์ด prime ์ด๊ณ  ๋‘๋ฒˆ์งธ ์ƒ์„ฑ์ž๋Š” urgent ๋ผ๊ณ  ํ•ด๋„ ์ƒ์„ฑ์ž๋Š” ํƒ€์ž…๋น„๊ต๊นŒ์ง€๋งŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘๊ฐœ์˜ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ๋‹ค. 

(ํ•˜๋‚˜์˜ signature๋กœ๋Š” ์ƒ์„ฑ์ž๋Š” ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.)

 

๋งŒ์•ฝ ๋‘๋ฒˆ์งธ ์ƒ์„ฑ์ž์˜ ํƒ€์ž… ์ˆœ์„œ๋ฅผ ๋ฐ”๊พผ๋‹ค๋ฉด ์—๋Ÿฌ๋Š” ์—†์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ๋ช…์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ 

์ •ํ™•ํžˆ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผํ• ์ง€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์–ด ํด๋ž˜์Šค ์„ค๋ช… ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ ์„œ๋Š” ์˜๋ฏธ๋ฅผ ์•Œ์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค. 

 

์ƒ์„ฑ์ž์— ๋„˜๊ธฐ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ƒ์„ฑ์ž ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ๋ฐ˜ํ™˜๋  ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ์ œ๋Œ€๋กœ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•œ๋‹ค. 

๋ฐ˜๋ฉด์— ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฆ„๋งŒ ์ž˜ ์ง€์œผ๋ฉด ๋ฐ˜ํ™˜๋  ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ์‰ฝ๊ฒŒ ๋ฌ˜์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๐Ÿฅ

์ด๋ฆ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ํ•œ ํด๋ž˜์Šค์— ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ๊ฐ™์€ ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์œผ๋ฉด,

์ƒ์„ฑ์ž๋ฅผ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ”๊พธ๊ณ  ๊ฐ๊ฐ์˜ ์ฐจ์ด๋ฅผ ์ž˜ ๋“œ๋Ÿฌ๋‚ด๋Š” ์ด๋ฆ„์„ ์ง€์–ด์ฃผ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด์ž. 

 

 

2๏ธโƒฃ ํ˜ธ์ถœ๋  ๋•Œ ๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์•„๋„ ๋œ๋‹ค. 

์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•˜๋ฉด ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ฑฐ๋‚˜, ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์บ์‹ฑํ•˜์—ฌ ์žฌํ™œ์šฉํ•˜๋Š” ์‹์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค!!

 

์ด๋Ÿฐ์‹์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ public ์ด ์•„๋‹Œ private๋กœ ์„ ์–ธํ•ด์„œ ํด๋ž˜์Šค ๋ฐ–์—์„œ Settings() ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๊ณ , ํด๋ž˜์Šค ์•ˆ์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  getInstnace()๋ผ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋‘๊ณ , ๋” ์ด์ƒ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋„๋ก ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

-> ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ด์ œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Boolean.valueof(boolean) ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์•„์˜ˆ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. 

๋”ฐ๋ผ์„œ ์ƒ์„ฑ ๋น„์šฉ์ด ํฐ ๊ฐ์ฒด๊ฐ€ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์„ฑ๋Šฅ์„ ์ƒ๋‹นํžˆ ๋Œ์–ด์˜ฌ๋ ค ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด flyWeight pattern๋„ ๋น„์Šทํ•œ ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๋ฐ˜๋ณต๋˜๋Š” ์š”์ฒญ์— ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹์œผ๋กœ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฐฉ์‹์˜ ํด๋ž˜์Šค๋Š” ์–ธ์ œ ์–ด๋Š ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ด์•„ ์žˆ๊ฒŒ ํ• ์ง€๋ฅผ ์ฒ ์ €ํžˆ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค. 

-> ์ด๋Ÿฐ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค ํ†ต์ œ ํด๋ž˜์Šค๋ผ๊ณ  ํ•œ๋‹ค. 

 

โ“ ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ต์ œํ•˜๋Š” ์ด์œ  

์ธ์Šคํ„ด์Šค๋ฅผ ํ†ต์ œํ•˜๋ฉด ํด๋ž˜์Šค๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๊ณ , ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€๋กœ ๋งŒ๋“ค์ˆ˜๋„ ์žˆ๋‹ค. 

๋˜ํ•œ ๋ถˆ๋ณ€ ๊ฐ’ ํด๋ž˜์Šค์—์„œ ๋™์น˜์ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜๋ฟ์ž„์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. (a == b์ธ ๊ฒฝ์šฐ์—๋งŒ a.equls(b) ์„ฑ๋ฆฝ) 

์ธ์Šคํ„ด์Šค ํ†ต์ œ๋Š” flyWeight pattern์˜ ๊ทผ๊ฐ„์ด ๋˜๋ฉฐ, ์—ด๊ฑฐํƒ€์ž…์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์ง์„ ๋ณด์žฅํ•œ๋‹ค. 

 

 

3๏ธโƒฃ ๋ฐ˜ํ™˜ ํƒ€์ž…์˜ ํ•˜์œ„ ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ๋‹ค. 

4๏ธโƒฃ ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋งค๋ฒˆ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ํ•˜์œ„ ํƒ€์ž… ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

-> ๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด์˜  ํด๋ž˜์Šค๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์œ ์—ฐ์„ฑ ์ œ๊ณต 

 

๋ฐ˜ํ™˜ ํƒ€์ž…์˜ ํ•˜์œ„ ํƒ€์ž…์ด๊ธฐ๋งŒ ํ•˜๋ฉด ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋“  ์ƒ๊ด€์—†์ด ์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

API๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์„ ์‘์šฉํ•˜๋ฉด ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ ๋„ ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด API๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ž๋ฐ” 8 ์ด์ „์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ ์ž๋ฐ” 8๋ถ€ํ„ฐ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ์ œํ•œ์ด ํ’€๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€ ๋™๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๋‘˜ ์ด์œ ๊ฐ€ ๋ณ„๋กœ ์—†์–ด์กŒ๋‹ค. 

(์ž๋ฐ”8 ์ด์ „์—๋Š” ์ธํŠธํŽ˜์ด์Šค์— ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†์œผ๋‹ˆ๊นŒ ์ด๋ฆ„์ด Type์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š”ํ•˜๋ฉด, Types๋ผ๋Š” ์ธ์Šคํ„ด์Šคํ™” ๋ถˆ๊ฐ€์ธ ๋™๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“คใ…‡ ๊ทธ ์•ˆ์— ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์˜€๋‹ค.) 

- > ์ด์ œ pubic ์ •์  ๋ฉค๋ฒ„๋“ค ์ƒ๋‹น์ˆ˜๋ฅผ ๊ทธ๋ƒฅ ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด์— ๋‘๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค!

 

 

5๏ธโƒฃ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์—๋Š” ๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด์˜ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์ด ๋‹ค์„ฏ๋ฒˆ์งธ ์žฅ์ ์ด ์ฝ์œผ๋ฉด์„œ ๊ฐ€์žฅ ์ดํ•ด๊ฐ€ ์•ˆ๋๋˜ ๋ถ€๋ถ„์ด์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค.. 

์—ญ์‹œ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ ํ•˜๋‹ˆ๊นŒ ํ›จ์”ฌ ์ดํ•ด๊ฐ€ ๋งŽ์ด ๋๋˜ ๋ถ€๋ถ„์ด๋‹ค. 

 

์ด๋ ‡๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋งŒ๋“ค๊ณ  ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ , 

 

์‚ฌ์šฉํ•  ๋•Œ ServiceLoader๋ผ๋Š” ์„œ๋น„์Šค ์ œ๊ณต์ž๋ฅผ ํ™œ์šฉํ•ด์„œ hello() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋ฌผ๋ก  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋“  HelloService๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. 

(๊ท€์ฐฎ์•„์„œ ์ด ๊ณผ์ •์€ ํŒจ์Šค)

 

์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค!

๊ฐœ๋ฐœ์ž๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ์–ด๋–ค๊ฒƒ์ด ์˜ฌ์ง€ ๋ชจ๋ฅด๋”๋ผ๋„ ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํ•œ ์œ ์—ฐํ•จ์„ ์ค€๋‹ค. 

-> ์ด๋Ÿฌํ•œ ์œ ์—ฐํ•จ์€ ์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ทผ๊ฐ„์ด ๋œ๋‹ค. 

ex) JDBC (๊ทผ๋ฐ JDBC๋Š” ์ž๋ฐ” 6์ „์— ๋“ฑ์žฅํ•œ ๊ฐœ๋…์ด๋ผ ServiceLoader๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

 

 

- ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋‹จ์ 

1๏ธโƒฃ ์ƒ์†์„ ํ•˜๋ ค๋ฉด public์ด๋‚˜ protected ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ˆ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•˜๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

ํด๋ž˜์Šค์—์„œ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ƒ์„ฑ์ž๋ฅผ private๋กœ ๋ง‰์•„๋†จ๋‹ค๋ฉด ์ƒ์†์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” public ๋˜๋Š” protected ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†์„ ํ•  ์ˆ˜ ์—†๋‹ค. 

-> ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ตฌํ˜„ ํด๋ž˜์Šค๋“ค๋„ ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์–˜๊ธฐ๋‹ค. 

 

Settings๋ฅผ ์ƒ์†ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ๋‹จ์ ์ด ์•„๋‹Œ ์žฅ์ ์œผ๋กœ ๋ฐ›์•„๋“ค์ผ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

 

2๏ธโƒฃ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค. 

์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ƒ์„ฑ์ž์ฒ˜๋Ÿผ API ์„ค๋ช…์ด๋‚˜ ์ž๋ฐ” doc์—์„œ ์„ค๋ช…์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์œผ๋‹ˆ ์‚ฌ์šฉ์ž๋Š” ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. 

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๊ทœ์•ฝ์„ ๋”ฐ๋ผ ์ง“๋Š” ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•ด์ค˜์•ผ ํ•œ๋‹ค!

์–ด๋–ค ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ธ์ง€ ์•Œ์•„๋‚ด๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ๊นŒ ์•Œ๋ ค์ง„ ์ด๋ฆ„ getInstance, newInstance ์ด๋Ÿฐ์‹์œผ๋กœ ํ•ด์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. 

 

from : ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋ฐ›์•„์„œ ํ•ด๋‹น ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ˜•๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ 

Date d = Date.from(instant);

 

of : ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ ์ ํ•ฉํ•œ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ง‘๊ณ„ ๋ฉ”์„œ๋“ฃ 

Set<Rank> prime = Enumset.of(JACK, QUEEN, KING);

 

valueOf() :  from ๊ณผ of ์˜ ์ข€ ๋” ์ž์„ธํ•œ ๋ฒ„์ „ 

BigInteger.valueOf(Integer.MAX_VALUE);

 

instance ํ˜น์€ getInstance : (๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค๋ฉด) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ช…์‹œํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ์ž„์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. 

StackWalker luke = StackWalker.getInstance(options);

 

create ํ˜น์€ newInstance : instance ํ˜น์€ getInstance์™€ ๊ฐ€์œผ๋‚˜ ๋งต๋จผ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•จ์„ ๋ณด์žฅํ•œ๋‹ค. 

Object newArray = Array.newInstance(cassObject, arrayLen); 

 

getType : getInstance ์™€ ๊ฐ™์œผ๋‚˜, ์ƒ์„ฑํ•  ํด๋ž˜์Šค๊ฐ€  ์•„๋‹Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์“ด๋‹ค. 

FileStore fs = Files.getFileStore(path);

 

newType: newInstance์™€ ๊ฐ™์œผ๋‚˜, ์ƒ์„ฑํ•  ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์“ด๋‹ค.

BufferedReader br = Files.newBufferedReader(path); 

 

type : getType๊ณผ newType ์˜ ๊ฐ„๊ฒฐํ•œ ๋ฒ„์ „ 

 List<Complaint> litany = Collections.list(legacyLitany); 

 

 

โญ๏ธ ์ •๋ฆฌ

์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์™€ pulic ์ƒ์„ฑ์ž๋Š” ๊ฐ์ž์˜ ์“ฐ์ž„์ƒˆ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€์ ์ธ ์žฅ๋‹จ์ ์„ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 
๋ผ๊ณ  ํ•˜์ง€๋งŒ ์ •์  ํŒฉํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ public ์ƒ์„ฑ์ž๋ฅผ ๋ฌด์ž‘์ • ์ œ๊ณตํ•˜๋˜ ์Šต๊ด€์ด ์žˆ๋‹ค๋ฉด ๊ณ ์น˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90