2023. 1. 4. 11:15ใJAVA/Effective JAVA
item01. ์์ฑ์ ๋์ ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํ๋ผ.
"p11. ์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ๋ฅผ ๋ง๋๋ ๊ทผ๊ฐ์ด ๋๋ค."
์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ๋?
: ๋ค์ํ ์๋น์ค ์ ๊ณต์๋ค์ด ํ๋์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ์์คํ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ ์ธ๋ถ์ ์ธ ๊ตฌํ ๋ด์ฉ์ ๋ชจ๋ฅด๋๋ผ๋ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ค.
ex) mysql, oracle ๋ฑ์ ์๋น์ค ์ ๊ณต์๋ค์ด ๋ชจ์ฌ JDBC๋ผ๋ ํ๋์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํจ.
-> ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐฉ๋ฒ
์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ ์ฃผ์ ๊ตฌ์ฑ ์์
- ์๋น์ค ์ ๊ณต์ ์ธํฐํ์ด์ค(SPI) ์ ์๋น์ค ์ ๊ณต์ (์๋น์ค ๊ตฌํ์ฒด)
- ์๋น์ค ์ ๊ณต์ ๋ฑ๋ก API (์๋น์ค ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ)
- ์๋น์ค ์ ๊ทผ API (์๋น์ค์ ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ API)
์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ์ ๋ค์ํ ๋ณํ
- ๋ธ๋ฆฟ์ง ํจํด
: ๋ธ๋ฆฟ์ง ํจํด์ ํฐ ํด๋์ค ๋๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ํด๋์ค๋ค์ ์งํฉ์ ๋๊ฐ์ ๊ฐ๋ณ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋๋ ํ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ ๋์์ธ ํจํด์ด๋ค.
-> ๊ฐ์ฒด์ ํฅ์์ฑ์ ํฅ์ํ๊ธฐ ์ํ ํจํด์ผ๋ก, ๊ฐ์ฒด์์ ๋์์ ์ฒ๋ฆฌํ๋ ๊ตฌํ๋ถ์ ํ์ฅ์ ์ํ ์ถ์๋ถ๋ฅผ ๋ถ๋ฆฌํ ํจํด์ด๋ค.
๋ธ๋ฆฌ์ง ํจํด์ ๊ธฐ์กด ์์คํ ์ ๋ถ์์ ์ธ ์๋ก์ด ๊ธฐ๋ฅ์ ์ง์์ ์ผ๋ก ์ถ๊ฐํ ๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ๋ค.
์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ ์ํด์ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝ์์ด ํ์ฅํ ์ ์๋ค.
- ์์กด ๊ฐ์ฒด ์ฃผ์ ํ๋ ์์ํฌ (spring)
: ์คํ๋ง์ผ๋ก ์๋น์ค ์ ๊ณต์ ํ๋ ์์ํฌ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์๋น์ค๋ฅผ ์ ๊ณตํ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค ์ฆ, ์๋น์ค ์ ๊ณต์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ฑ๋กํ ๋๋ @Bean ๋ฅผ ํตํด ์๋น์ค ์ ๊ณต์๋ฅผ ๋ฑ๋กํ๊ณ , ์ด์ ์๋น์ค๋ฅผ ์ ๊ทผํ ๋๋ @Autowired๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ServiceLoader
: ์๋น์ค ๋ก๋๋ java.util ํจํค์ง ์์ ์๋ ๊ฒ์ผ๋ก, ์๋น์ค ๋ก๋๋ ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ ๋ ์ฌ์ฉํ๋๋ฐ, ํน์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๊ฐ ์๊ณ , ๋ค์ํ ๋ฒค๋ ํ์ฌ๋ค์ด ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ค๋ง์ ๊ตฌ์ฒด ์๋น์ค๋ฅผ ๊ตฌํํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์๋ ์ด๋ค ๋ฒค๋ ํ์ฌ๊ฐ ๋ง๋ ๊ตฌ์ฒด ์๋น์ค์ ์๊ด ์์ด ๊ณตํต ์ธํฐํ์ด์ค๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด, ๊ฐ ๋ฒค๋ํ์ฌ๋ง์ ์๋น์ค ์ฅ๋จ์ ์ ๊ณ ๋ คํด์ ์ํ๋ ๊ตฌํ์ฒด๋ฅผ ๊ณจ๋ผ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
-> ์ฆ ,serviceLoader ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ทธ ๊ตฌํ์ฒด jar ํ์ผ์ ๋ฐ๊ฟ๋ผ๋ ๊ฒ๋ง์ผ๋ก ๋ด๊ฐ ์ํ๋ ์ ์ ํ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ก ๋ฐ๊ฟ ์ ์๋ค.