[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] Item01 ์™„๋ฒฝ๊ณต๋žต. ์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ

2023. 1. 4. 11:15ใ†JAVA/Effective JAVA

728x90

 

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

"p11. ์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ทผ๊ฐ„์ด ๋œ๋‹ค."

 

 

์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? 

: ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ์ œ๊ณต์ž๋“ค์ด ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ๋ชจ๋ฅด๋”๋ผ๋„ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

ex) mysql, oracle ๋“ฑ์˜ ์„œ๋น„์Šค ์ œ๊ณต์ž๋“ค์ด ๋ชจ์—ฌ JDBC๋ผ๋Š” ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•จ. 

-> ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• 

 

 

์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ  

- ์„œ๋น„์Šค ์ œ๊ณต์ž ์ธํ„ฐํŽ˜์ด์Šค(SPI) ์™€ ์„œ๋น„์Šค ์ œ๊ณต์ž (์„œ๋น„์Šค ๊ตฌํ˜„์ฒด) 
- ์„œ๋น„์Šค ์ œ๊ณต์ž ๋“ฑ๋ก API (์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•)
- ์„œ๋น„์Šค ์ ‘๊ทผ API (์„œ๋น„์Šค์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” API) 

 

 

์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‹ค์–‘ํ•œ ๋ณ€ํ˜•  

- ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด 

: ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด์€ ํฐ ํด๋ž˜์Šค ๋˜๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‘๊ฐœ์˜ ๊ฐœ๋ณ„ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆˆ ํ›„ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

-> ๊ฐ์ฒด์˜ ํ–ฅ์ƒ์„ฑ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์œผ๋กœ, ๊ฐ์ฒด์—์„œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌํ˜„๋ถ€์™€ ํ™•์žฅ์„ ์œ„ํ•œ ์ถ”์ƒ๋ถ€๋ฅผ ๋ถ„๋ฆฌํ•œ ํŒจํ„ด์ด๋‹ค. 

๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด์€ ๊ธฐ์กด ์‹œ์Šคํ…œ์— ๋ถ€์ˆ˜์ ์ธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค. 

์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ด์„œ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณ€๊ฒฝ์—†์ด ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

- ์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ (spring) 

: ์Šคํ”„๋ง์œผ๋กœ ์„œ๋น„์Šค ์ œ๊ณต์ž ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์ฆ‰, ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋“ฑ๋กํ•  ๋•Œ๋Š” @Bean ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ์ œ๊ณต์ž๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ด์ œ ์„œ๋น„์Šค๋ฅผ ์ ‘๊ทผํ•  ๋•Œ๋Š” @Autowired๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

 

 

- ServiceLoader 

: ์„œ๋น„์Šค ๋กœ๋”๋Š” java.util ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ, ์„œ๋น„์Šค ๋กœ๋”๋Š” ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ๋ฒค๋” ํšŒ์‚ฌ๋“ค์ด ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ๋“ค๋งŒ์˜ ๊ตฌ์ฒด ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค. 

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ์–ด๋–ค ๋ฒค๋” ํšŒ์‚ฌ๊ฐ€ ๋งŒ๋“  ๊ตฌ์ฒด ์„œ๋น„์Šค์™€ ์ƒ๊ด€ ์—†์ด ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๊ฐ€์ง€๊ณ ์žˆ์œผ๋ฉด, ๊ฐ ๋ฒค๋”ํšŒ์‚ฌ๋งŒ์˜ ์„œ๋น„์Šค ์žฅ๋‹จ์ ์„ ๊ณ ๋ คํ•ด์„œ ์›ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๊ณจ๋ผ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

-> ์ฆ‰ ,serviceLoader ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ทธ ๊ตฌํ˜„์ฒด jar ํŒŒ์ผ์„ ๋ฐ”๊ฟ”๋ผ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ ์ ˆํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90