๐ค Impl ?
- ๋ณ๋์ฌํญ์ ์ฝ๊ฒ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค/๊ตฌํ์ฒด ๋ฐฉ์์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ตฌํ์ฒด ์ด๋ฆ์ด๋ค.
- Service๋ฅผ ์ธํฐํ์ด์ค๋ก ๊ตฌํํ๊ณ , ํด๋น Service์ ์ค์ ๊ตฌํ์ฒด๋ฅผ `ServiceImpl`๋ผ๋ ๋ช ์นญ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉํ๋ค.
์ค์ ๋ก ์ ์ฌ์ง์ฒ๋ผ, ๋๋ ํ๋ก์ ํธ ๋๋ถ๋ถ์ Service๋ฅผ ์์ ๊ฐ์ด ๊ตฌํํ๊ณ ์์๋ค.
๐ฏ Impl๋ฅผ ์ฌ์ฉํ๋ ์ด์
์คํ๋ง์ ์ฒ์ ๋ฐฐ์ธ๋๋ถํฐ Service๋จ์ ๋ฏธ๋์ ๋ฐ์ํ ํ์ฅ์ ์ํด ์์ฑํ๋ค๊ณ ๋ฐฐ์ ๊ณ , ์ค์ ๋ก DB๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณด์๋ค.
๊ทธ๋์ ํ๋ก์ ํธ ๊ธฐํ์์ ํ์ฅ์ ๊ดํ์ฌ ์ ํด์ง ๊ฒ์ด ์์์ง๋ง, ๋ฏธ๋์ ์์ ํ์ฅ์ ์ํด ๋ฏธ๋ฆฌ ์ธํฐํ์ด์ค/๊ตฌํ์ฒด ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
๐จ Impl์ ์ฌ์ฉํ์ง ๋ง๋ผ๋๋ฐ ?
์ด๋ ๋ , ํ์๋ค๊ณผ ํจ๊ป ์ฝ๋๋ฅผ ๋ณด๋ ์ค ์ด๋ฐ ํผ๋๋ฐฑ๊ณผ ๊ด๋ จ ์์์ ๋ฐ์๋ค.
์์์ ํตํด ์ดํดํ ๊ฒ์ ์ ๋ฆฌํด ๋ณด๋ฉด,
- ์ธํฐํ์ด์ค๋ ์์์ด๋ฏ๋ก, ์๊ปด์ ์ฌ์ฉํด์ผ ํ๋ค.
- ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ ธ๋ค์ฃผ๋ ์ด์ ์ด ๋น์ฐํ ๋ง์ง๋ง, ์ธํฐํ์ด์ค๊ฐ ๋ง์ผ๋ฉด ๋ง์์๋ก ์ง๊ด๋ ฅ์ด ๋จ์ด์ง๋ค.
- ๋จ๋ฐํ๋ ๊ฒ์ ์ข์ง ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์, ์ ๋ง ์จ์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ์ฐ๋ ๊ฒ์ด ์ข๋ค.
ํด๋น ์์์ ๋ณด๋ฉด์ ๋ ๋์ ์๊ฐ์
- ํ์ฅ์ฑ์ด ๋ช ํํ์ง ์์ ์ํ์์ ๋ฌด์์ Impl๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ง ์๊ตฌ๋.
- ํ์ง๋ง ๊ฐ๋ฐ์ด๊ธฐ์ ํ์ฅ์ฑ์ด ์ ํด์ง๋ serivce๊ฐ ์ผ๋ง๋ ์์๊น?
์ฌ์ค ์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์๋ "๋ฌด์์ Impl๋ก ๊ตฌํํ๋ ๊ฒ์ด ๋ง๋๊ฐ?"๋ผ๋ ์๊ตฌ์ฌ์ด ๋ค์์ง๋ง,
ํ์ฅ์ฑ์ ๋ฐฐ์ ํ๊ณ ์์ฑํ๊ธฐ์๋ ๋ง์์ ๊ฑธ๋ ธ๋ค.
๐โ๏ธ ํ์ ์๋ถ๋ค์ ์๊ฐ
๊ทธ๋์ ํด๋น ๊ณ ๋ฏผ์ ํ์ ์๋ถ์๊ฒ ์ฌ์ญค๋ณด์๊ณ , ์ ๋ฆฌํด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ ๊ฑฐ์ ์ฝ๋(Legacy Code)๋ก ์ธํด ์ด์ฉ ์ ์์ด ๋ฐ๋ผ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค.
- ํ์ง๋ง ๊ฐ๋ฐ ์ด๊ธฐ๋ผ๋ฉด, ๋ฌด์์ Impl๋ฅผ ๊ตฌํํ์ง ์์ ๊ฒ ๊ฐ๋ค.
- ์ด๊ธฐ์ ํ์ฅ์ฑ์ด ์ ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ฉฐ, ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ ์ํ๋ฉด ์ฐ์ ๊ตฌํ์๋ง ์ง์คํ ๊ฒ ๊ฐ๋ค.
- ํ์ง๋ง Impl๋ก ๊ตฌํ์ ์์ํ๋ ๊ฒ์ ์๋ชป๋ ๋ฐฉ์์ด ์๋๋, ๊ฐ๋ฐ ํ๊ฒฝ ๋ฐ ์คํ์ผ์ ๋ฐ๋ผ ๋ค๋ฅผ ๊ฒ ๊ฐ๋ค.
๐ก ์ฐธ๊ณ ์ฌํญ
JPA์ QueryDSL์ ์ฌ์ฉํด์ ์ธํฐํ์ด์ค๋ฅผ ํ์ ํด์ผ ํ ๋๋ Impl๋ฅผ ์จ์ผ ์คํ๋ง์ด ์ธ์์ ํ ์๊ฐ ์๋ค.
๐โ๏ธ ์ฌ์ค ํต์ฌ์...
์ฌ์ค ํต์ฌ์ "Service / Impl ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ"๊ฐ ์๋๋ผ "Impl๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉํ์ง ๋ง๋ผ"์๋ค.
์์ ๋คํธ์๋ ๋์ค๊ณ , ํ์ ์๋ถ๋ค๋ ์๋์ ๊ฐ์ ์๊ฒฌ์ ๋ชจ๋ ๋์ํ์ จ๋ค.
- Impl๋ ๋จ์ "๊ตฌํ์ฒด"๋ผ๋ ์๋ฏธ๊ฐ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ๊ณ ๋ชจํธํ๋ค.
- Service๋ผ๋ ๋ช ์นญ์ ๋๋ฌด ์ฝ๋งค์ด์ง ์์๋ ๋๋ค.
- ๋ ์์ธํ๊ฒ ๋ช ์นญ์ ์ ํ์. (ex. UserRegister, UserManager...)
๐ ์ ๋ฆฌ
ํ์ฅ ์ธก๋ฉด์์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ ธ๋ค์ฃผ๋ ์ด์ ์ ๋ง๋ค.
๊ทธ๋ฌ๋ ํ์ฅ์ฑ์ด ์ ํด์ง์ง ์์ ์ํ์์ ๋ฌด์์ `Impl`๋ก ๊ตฌํํ๋ ๊ฒ์ ์ง๊ด๋ จ์ ๋จ์ดํธ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ ์ฌ๋งํ๋ฉด
`Interface UserSerivce` ๊ตฌํ ์ดํ `class UserServiceImpl`๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์๋,
`class UserServiceImpl`๊ตฌํ ์ดํ ์ถํ์ ํ์ฅ์ฑ์ด ํ์ ๋๋ฉด `Interface UserSerivce`๋ฅผ ๊ตฌํํ์ฌ ์ธํฐํ์ด์ค์ ์ด์ ์ ๋ณด์.
๊ทธ๋ฆฌ๊ณ `Impl`๋ณด๋ค๋ ๋ ์์ธํ๊ณ ๋ฏ์ ํ์คํ ์ ๋ฌํ ์ ์๋ ๋ช ์นญ์ ์ฌ์ฉํ์.
'๊ฐ๋ฐ > BACKEND' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Data Auditing ์ ์ฉํ๊ธฐ (0) | 2024.07.10 |
---|---|
PK๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข์๊น? ๐ค (0) | 2024.07.10 |
[Query dsl]hibernate.query.SemanticException : Could not interpret path expression (0) | 2024.07.10 |
[์๋ฌ ํด๊ฒฐ] cannot resolve class or package 'cj' (2) | 2024.07.10 |
java์์ ์ด๋ฏธ์ง ์์ ๋ฐ ์ต์ ํํ๊ธฐ (0) | 2024.07.10 |